Tujuannya adalah untuk menghitung semua kotak hingga x
dengan penambahan dan pengurangan.
Aturan:
- Kode harus berupa fungsi yang mengambil jumlah kuadrat total untuk dihasilkan, dan mengembalikan array yang berisi semua kuadrat itu.
- Anda tidak dapat menggunakan fungsi string, struktur, perkalian, pembagian, atau built-in untuk menghitung kotak.
- Anda hanya dapat menggunakan array, bilangan bulat (bilangan bulat), penjumlahan, pengurangan. Tidak ada operator lain yang diizinkan!
Ini adalah pertanyaan kode-golf , jadi kode terpendek dalam byte menang!
Jawaban:
APL - 10
Contoh penggunaan:
ngn APL demo
sumber
+\1+⍳+⍳
C,
5552 bytehanya menjumlahkan angka ganjil
n
: jumlah kotak untuk dihitungr
: output array untuk menyimpan hasilnyaj
: mengambil nilai berturut-turut 1, 3, 5, 7, ...i
: bertambahj
setiap iterasiEdit
4 karakter dapat disimpan menggunakan deklarasi int implisit (> C99), tetapi ini berharga 1 char karena
for
inisialisasi tidak dapat berisi deklarasi di> C99. Kemudian kodenya menjadiPemakaian
Keluaran
sumber
GolfScript, 17 karakter
Penggunaan (lihat juga contoh online ):
Catatan:
*
adalah loop dan bukan operator perkalian.sumber
,
mengambil input dan mengubahnya ke array[0 1 ... n-1]
. Kemudian*
menyuntikkan blok kode yang diberikan ke array. Blok ini pertama kali menggandakan item saat ini (.+
) kurangi satu ((
) dan kemudian tambahkan hasil sebelumnya1$+
(dengan kata lain, tambahkan2j-1
ke angka kuadrat sebelumnya).[]
melampirkan semuanya untuk mengembalikan array baru.Windows Batch, 115 byte
Ini harus ditempatkan dalam file batch bukannya dijalankan dari cmd, dan ini menampilkan daftar ke konsol. Dibutuhkan jumlah kotak untuk dibuat dari argumen baris perintah pertama. Untuk sebagian besar menggunakan
&
bukan baris baru, namun satu masih diperlukan dan itu dihitung sebagai dua byte.Perlu ekspansi variabel tertunda diaktifkan, ini bisa dilakukan dengan
cmd /v:on
. Dengan anggapan itu bukan, diperlukan ekstrasetlocal enabledelayedexpansion&
di awal (tanpa itu skrip adalah 83 byte).sumber
Haskell - 30
Ini menggunakan fakta bahwa
(n+1)^2=n^2+2n+1
sumber
Perl, 27 byte
Matematika:
Script untuk memanggil fungsi untuk mencetak 10 kotak:
Hasil:
Suntingan:
pop
bukannyashift
(−2 byte, terima kasih skibiranski )sumber
JavaScript - 32 Karakter
Mengasumsikan
x
ada variabel dan membuat arraya
kuadrat untuk nilai1..x
.ECMAScript 6 - 27 Karakter
Memanggil
f(x)
akan mengisi arrayb
dengan kotak untuk nilai0..x
.sumber
i+++i
pada akhirnya ...?k+=i+++i
sama dengank += i + (++i)
yangk+=i+i+1
diikuti olehi=i+1
b=[f=i=>b[i]=i&&i+--i+f(i)]
.).Julia - 33
Setiap angka kuadrat dapat ditulis dengan penjumlahan dari angka ganjil:
sumber
C ++
9981788078percobaan pertama saya di kode-golf
Kode ini didasarkan pada
a = 2 xn - 1
di mana n adalah jumlah istilah dan sebuah adalah n th istilah dalam mengikuti seri
1, 3, 5, 9, 11, 13, .....
jumlah dari pertama 2 istilah = 2 kuadrat
jumlah dari 3 istilah pertama = 3 kuadrat
dan seterusnya ...
sumber
{}
setelahfor
loop, karena hanya ada satu pernyataan. Ini dapat mengurangi jumlah char Anda dengan 2addition, subtraction
, saya hanya menggunakan ituMajelis DCPU-16 (90 byte)
Saya menulis ini dalam perakitan untuk prosesor fiksi, karena mengapa tidak?
Jumlahnya diharapkan berada di register X, dan register lain diharapkan menjadi 0. Hasil didorong ke stack, itu akan pecah begitu mencapai 65535 karena arsitektur 16 bit. Anda mungkin ingin menambahkan a
SUB PC, 1
ke ujung untuk mengujinya. Dikompilasi, program harus 20 byte (10 kata).sumber
Haskell
Ini pada dasarnya menciptakan perkalian, menggunakannya sendiri, dan memetakannya ke semua angka.
f 10
=[0,1,4,9,16,25,36,49,64,81]
. Jugaf 91
=[0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936,2025,2116,2209,2304,2401,2500,2601,2704,2809,2916,3025,3136,3249,3364,3481,3600,3721,3844,3969,4096,4225,4356,4489,4624,4761,4900,5041,5184,5329,5476,5625,5776,5929,6084,6241,6400,6561,6724,6889,7056,7225,7396,7569,7744,7921,8100]
.sumber
Haskell, 34/23
atau, jika impor baik-baik saja:
Keluaran:
sumber
Javascript 47
function f(n,a){return a[n]=n?f(n-1,a)+n+n-1:0}
r=[];f(12,r);console.log(r)
pengembalian:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144]
sumber
f=(n,a)=>a[n]=n?f(n-1,a)+n+n-1:0
.Smalltalk, 52
Mengembalikan array baru (yaitu tidak mengisi atau menambah yang sudah ada).
panggilan:
nilai f: 10
-> # (1 4 9 16 25 36 49 64 81 100)
sumber
python - 39
Ganti
5
dengan nilai apa pun. Ada saran?sumber
Bash -
928562615957Hasil:
Sunting: Saya mengganti loop dalam dengan algoritma dari solusi Haskell @ mniip.
sumber
Metode yang sama seperti di atas, di APL dan J:
APL:
F←{+\1+V+V←¯1+⍳⍵}
(17 karakter) berfungsi dengan sebagian besar varian APL (coba di sini )dan bahkan lebih sedikit (hanya 14 karakter) dengan NGN APL:
F←{+\1+V+V←⍳⍵}
(lihat di sini )J:
f=:+/\@(>:@+:@:i.)
(18 karakter)sunting: solusi yang lebih baik dalam APL:
F←{+\¯1+V+V←⍳⍵}
(15 karakter)sumber
C # (82)
sumber
C # - 93
Ketika dipanggil dari metode lain dari kelas yang sama, akan mengembalikan array -
[1,4,9,16,25,36...]
, hinggal
elemen th.sumber
int[]
dansq
? Saya tidak tahu C #, tetapi saya pikir itu harus berhasil.int[]sq
bukannyaint[] sq
danint[]res
bukannyaint[] res
. Ini membantu Anda menyimpan dua karakter, dan saya tidak mendapatkan kesalahan kompilasi dengan itu. Anda juga harus menggunakan pengidentifikasi karakter tunggal untuksq
danres
seperti yang Anda sarankan.Fortran II | IV | 66 | 77,
134122109105Sunting: hapus inner loop dan gunakan algoritma Haskell @ mniip sebagai gantinya.
Sunting: Diverifikasi bahwa subrutin dan driver valid Fortran II dan IV
Sopir:
Hasil:
sumber
Python - 51
Di sini saya mendefinisikan fungsi seperti yang diminta oleh aturan.
Penggunaan
sum
angka ganjil:Ini hanya menggunakan
sum
(builtin yang melakukan penambahan) danrange
(builtin yang membuat array menggunakan penambahan). Jika Anda keberatansum
, kami dapat melakukan ini denganreduce
:sumber
PHP, 92 byte
Ini perlu memiliki opsi "tag pendek" diaktifkan, tentu saja (untuk mengurangi 3 byte di awal).
Keluaran:
sumber
Keempat - 48 byte
Pemakaian:
Keluaran:
sumber