Tulis program atau fungsi untuk menampilkan jumlah angka kuadrat ganjil (OEIS # A016754) kurang dari satu input n
.
44 angka pertama dalam urutan adalah:
1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961, 1089,
1225, 1369, 1521, 1681, 1849, 2025, 2209, 2401, 2601, 2809, 3025, 3249, 3481,
3721, 3969, 4225, 4489, 4761, 5041, 5329, 5625, 5929, 6241, 6561, 6889, 7225, 7569
Rumus untuk urutan adalah a(n) = ( 2n + 1 ) ^ 2
.
Catatan
- Perilaku program Anda mungkin tidak ditentukan untuk
n < 1
(yaitu, semua input yang valid adalah>= 1
.)
Uji kasus
1 => 0
2 => 1
9 => 1
10 => 10
9801 => 156849
9802 => 166650
10000 => 166650
code-golf
arithmetic
Thomas
sumber
sumber
Jawaban:
Jelly, 6 byte
Cobalah online! atau verifikasi semua kasus uji .
Latar Belakang
Untuk semua bilangan bulat positif k , kita memiliki 1² + 3² + ⋯ + (2k - 1) ² = k (2k - 1) (2k +1) ÷ 3 .
Karena ada mC r = m! ÷ ((mr)! R!) R - kombinasi dari set elemen m , di atas dapat dihitung sebagai (2k + 1) C3 = (2k + 1) 2k (2k - 1) ÷ 6 = k (2k - 1) (2k + 1) ÷ 3.
Untuk menerapkan rumus, kita harus menemukan 2k + 1 tertinggi sehingga (2k - 1) ² <n . Mengabaikan paritas untuk sesaat, kita dapat menghitung m tertinggi sehingga (m - 1) ² <n sebagai m = ceil (srqt (n)) . Untuk menambahkan secara kondisional m jika genap, hitung saja m | 1 (bitwise ATAU dengan 1 ).
Bagaimana itu bekerja
sumber
JavaScript (ES6), 30 byte
31 byte jika
f(1)
perlu mengembalikan nol, bukan salah:sumber
05AB1E ,
108 byteKode:
Penjelasan:
Mungkin berguna:
t;L·<nO
.Menggunakan pengodean CP-1252 . Cobalah online! .
sumber
Haskell, 30 byte
Tampak sangat normal.
sumber
C #,
126131 byteVersi yang diedit agar sesuai dengan pertanyaan baru:
Menggunakan batas hardcoded:
sumber
# Language name, number bytes
untuk konsistensi.Console.Read
pada akhirnya?namespace
s tidak diperlukan untuk file tunggal.System.Console.Write(s);
jika berhasil, dan jika Anda tidak memerlukannyaConsole.Read
.Jelly, 7
Cobalah online atau coba versi modifikasi untuk beberapa nilai
Ssst ... Dennis sedang tidur ...
Terima kasih kepada Sp3000 dalam obrolan untuk bantuan mereka!
Penjelasan:
sumber
R,
3836 byte@ Giuseppe menyimpan dua byte dengan berpindah
x
ke daftar argumen untuk menyimpan kurung kurawal. Ide keren!Tidak disatukan
Cobalah online!
sumber
x
ke argumen fungsi default dan kemudian Anda dapat menghapus kawat gigi.C,
51, 5048 byteKarena mengapa tidak bermain golf di salah satu bahasa yang paling bertele-tele? (Hei, setidaknya itu bukan Jawa!)
Cobalah online!
Program ungolfed penuh, dengan tes I / O:
sumber
most verbose languages
Lebih golf daripada Python, C #, LISP, Forth, dll, C sebenarnya cukup bagus untuk golf< 50 bytes
. Juga, ada pos meta yang relevan di sini .Sebenarnya, 7 byte
Cobalah online!
Juga untuk 7 byte:
Cobalah online!
Ini menggunakan rumus yang sama seperti pada jawaban Dennis's Jelly.
Penjelasan:
sumber
Literally
?Oktaf, 23 byte
Pengujian:
sumber
CJam, 15 Bytes
Cobalah online!
Solusi Hardcoded 10000:
Solusi 12 byte Martin:
Solusi 13 byte asli saya:
Cobalah online!
sumber
Pyth, 10 byte
Suite uji
Penjelasan:
sumber
s<#Q%2t^R2
Mathcad, 31 "byte"
Perhatikan bahwa Mathcad menggunakan pintasan keyboard untuk memasukkan beberapa operator, termasuk definisi dan semua operator pemrograman. Sebagai contoh, ctl-] memasuki loop sementara - itu tidak dapat diketik dan hanya dapat dimasukkan menggunakan pintasan keyboard atau dari toolbar Programming. "Bytes" dianggap jumlah operasi keyboard yang diperlukan untuk memasukkan item Mathcad (misalnya, nama variabel atau operator).
Karena saya tidak memiliki peluang untuk memenangkan kompetisi ini, saya pikir saya akan menambahkan sedikit variasi dengan versi formula langsung.
sumber
Racket, 57 byte
sumber
MATL , 10 byte
EDIT (30 Juli 2016): kode tertaut menggantikan
9L
dengan1L
untuk beradaptasi dengan perubahan terbaru dalam bahasa.Cobalah online!
sumber
Python, 39 byte
Jika, untuk
n=1
, lebih valid untuk keluaranFalse
daripada0
, maka kita dapat menghindari konversi kasus dasar untuk mendapatkan 37 byteIni aneh bahwa saya belum menemukan cara yang lebih pendek untuk mendapatkan
0
untuki*i>=n
dan nol sebaliknya. Dalam Python 2, kita masih mendapat 39 bytesumber
bool
adalah subclass dariint
dalam Python, yang artinyaFalse
adalah nilai yang dapat diterima untuk0
.Python,
4238 bytesumber
Python 2, 38 byte
Didasarkan pada formula Dennis , dengan
s==-2*k
. Output mengapung. Efeknya, input berakar persegi, dikurangi, kemudian dibulatkan ke angka genap berikutnya.sumber
PARI / GP ,
333226 byteDiadaptasi dari kode Dennis :
Ide pertama saya (30 byte), menggunakan rumus polinomial sederhana:
Ini adalah implementasi yang efisien, sebenarnya tidak jauh berbeda dari versi yang tidak diklik yang akan saya tulis:
Implementasi alternatif (37 byte) yang melingkari setiap kotak:
Solusi alternatif lain (35 byte) yang menunjukkan penjumlahan tanpa variabel sementara:
Namun solusi lain, tidak terlalu kompetitif (40 byte), menggunakan norma L 2 . Ini akan lebih baik jika ada dukungan untuk vektor dengan indeks ukuran langkah. (Orang bisa membayangkan sintaks
n->norml2([1..((n-1)^.5+1)\2..2])
yang akan turun 8 byte.)sumber
Haskell,
3231 byteContoh penggunaan:
(#1) 9802
->166650
.Sunting: @xnatau menyimpan satu byte, dengan pemahaman daftar yang cerdas. Terima kasih!
sumber
n#x=sum[x^2+n#(x+2)|x^2<n]
Julia, 29 byte
Ini adalah fungsi rekursif yang menerima integer dan mengembalikan integer.
Kami memulai indeks pada 1 dan jika kuadratnya kurang dari input, kami mengambil kuadrat dan menambahkan hasil pengunduran diri pada indeks + 2, yang memastikan bahwa bilangan genap dilewati, jika tidak kita mengembalikan 0.
sumber
Oracle SQL 11.2, 97 byte
sumber
Julia, 26 byte
Ini membangun kisaran semua bilangan bulat ganjil dan positif di bawah ini n dan array kuadrat dari bilangan bulat dalam kisaran itu, kemudian menghitung jumlah bilangan bulat di kedua iterables.
Cobalah online!
sumber
Reng v.3.3, 36 byte
Coba di sini!
Penjelasan
1: inisialisasi
Atur
c
ke0
(penghitung) dan inputI
kem
kapak.1ø
pergi ke baris berikutnya.2: lingkaran
:
menduplikasi nilai saat ini (angka ganjil kuadrat) dan [sayam
meletakkanm
kapak ke bawah. Saya menggunakan trik yang kurang dari pada jawaban lain , yang saya gunakan di sini.%:1,e
memeriksa apakah STOS <TOS. Jika ya,q^
naik dan keluar dari loop. Jika tidak:c
menempatkan penghitung turun,2*
menggandakannya,1+
menambahkan satu, dan²
kuadratkan.c1+#C
kenaikanc
, dan loop berjalan lagi.3: final
$
menjatuhkan nilai terakhir (lebih besar dari yang diinginkan),a+¡
menambahkan sampai panjang tumpukan adalah 1,n~
output dan berakhir.sumber
Clojure, 53 byte
Anda dapat memeriksanya di sini: https://ideone.com/WKS4DA
sumber
Mathematica 30 byte
Fungsi yang tidak disebutkan namanya ini mengkuadratkan semua angka ganjil kurang dari input (
Range[1,Sqrt[#-1],2]
) dan menambahkannya.sumber
PHP, 64 byte
Diperluas:
Pada setiap iterasi dari
for
loop, itu akan menambah 2 ke k dan memeriksa apakah k 2 kurang dari$i
, jika itu menambahkan k 2 ke$a
.sumber
R, 60 byte
Apakah persis seperti yang dijelaskan dalam tantangan, termasuk mengembalikan 0 untuk n = 1 kasus. Merosot, ';' mewakili linebreak di R, diabaikan di bawah:
sumber
Java 8,
12811911711149 byteBerdasarkan @Thomas C # solusi ' .
Penjelasan:
Cobalah online.
sumber
Python 2, 49 byte
Ini akhirnya lebih pendek dari a
lambda
.Cobalah online
Terpendek saya
lambda
, 53 byte :sumber