Legenda India menceritakan kisah dugaan penemu permainan catur, yang sangat mengesankan kaisar India dengan permainannya sehingga ia akan mendapatkan imbalan dengan apa pun yang diminta.
Pria itu berkata dia ingin dibayar dengan beras. Dia menginginkan sebutir beras untuk kotak pertama dari papan catur, dua untuk yang kedua, empat untuk yang ketiga, delapan untuk yang keempat, dan seterusnya, sampai kotak ke-64.
Kaisar kagum bahwa orang itu meminta hadiah kecil, tetapi ketika matematikawannya mulai menghitung, dia akhirnya kehilangan salah satu provinsi.
Tugas
Mengingat panjang sisi papan catur hipotetis (yaitu 8 pada papan catur default) dan pengganda antara kotak (yang 2 dalam legenda), hitung jumlah butir beras yang harus dibayar oleh kaisar kepada lelaki itu.
Catatan
Panjang sisi akan selalu menjadi bilangan bulat positif. Pengganda bukan bisa berupa bilangan rasional apa pun.
Jika bahasa pilihan Anda tidak dapat menampilkan angka yang sangat besar, tidak masalah selama program Anda dapat memproses input yang lebih kecil dengan benar.
Juga jika bahasa pilihan Anda membulatkan nilai yang lebih besar (dengan notasi eksponensial), tidak apa-apa jika nilai-nilai itu kira-kira benar.
Testcases
Input (side length, multiplier) => Output
8, 2 => 18446744073709551615
3, 6 => 2015539
7, 1.5 => 850161998.2854
5, -3 => 211822152361
256, 1 => 65536
2, 2 => 15
2, -2 => -5
Harap perhatikan bahwa rumus eksplisit
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Melakukan salah pada multiplier = 1
, seperti
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Mencetak gol
Ini adalah kode-golf. Jawaban terpendek dalam byte menang.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Hati-hati, itu telah menyebabkan masalah di masa lalu. meta.codegolf.stackexchange.com/a/8245/31716Jawaban:
Jelly , 4 byte
Ini menggunakan pendekatan dari jawaban APL pintar @ APLDude .
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
MATL , 6 byte
Cobalah online!
sumber
APL, 10 byte
⎕
digunakan untuk membaca input pengguna dua kali. Jika kami menyimpan panjang sisi dalam s dan pengali dalam m , kami mendapatkan kode berikut.Dan inilah cara APL mem-parsing kode ini:
sumber
⊣⊥1⍴⍨⊢×⊢
(8 byte) Sebagai perintah REPL interaktif,⎕⊥×⍳⎕*2
(7 byte) juga berfungsi.Python, 40 byte
Menghasilkan dan mengevaluasi string seperti
yang mengkodekan jumlah sebagai polinomial Hornerized dengan
n*n
istilah.Banyak metode yang berbeda memberikan jumlah byte yang sangat mirip:
sumber
Pyth, 6 byte
1 byte disimpan berkat @FryAmTheEggman .
Cobalah online!
Suite uji.
sumber
Haskell, 25 byte
Jumlahkan daftar
[m^0, m^1, ..., m^(n*n-1)]
.sumber
JavaScript (ES2016 / ES7),
312928 byteHanya @Bassdrop Cumberwubwubwub dan @ Kaizo versi ES6, tetapi dengan operator eksponensial. :) (Saya tidak punya cukup reputasi untuk berkomentar.)
Sunting:
/+(b-1)
diubah menjadi/--b
(terima kasih @Neil).Sunting: sekarang menggunakan currying (terima kasih @MamaFunRoll).
sumber
+
operator adalah tes saya lupa untuk mengedit, sehingga Anda dapat mencukur 1 byte dengan menghilangkan itu :)/--b
Anda akan menghemat satu atau dua byte?Jelly, 6 byte
Cobalah online!
sumber
MATLAB, 23 byte
Uji di sini !
sumber
Javascript ES6,
59373534 byteTerima kasih kepada @Kaizo karena telah mengurangi 19 byte, @Neil untuk 2 lainnya dan @gcampbell untuk 1 lagi!
Coba di sini
Tampilkan cuplikan kode
Versi rusak alternatif
32 byte
Penyebab
NaN
untukb==1
.30 byte
Penyebab
Infinity
untukb==1.5
.28 byte
Output
1
untuk beberapa testcases yang valid.Versi lama untuk 59 byte
(a,b)=>Array(a*a).fill``.reduce((c,d,i)=>c+Math.pow(b,i),0)
sumber
/~-b
jelas tidak baik untuk pecahanb
, tetapi/--b
harusnya berhasil, bukan?(a,b)=>[...Array(a*a-1)].reduce(s=>s+=p*=b,p=1)
Java, 132 byte
Tidak disatukan
Catatan
Keluaran
sumber
R, 18 byte
Penjelasan:
sumber
05AB1E , 5 byte
Kode:
Penjelasan:
Cobalah online! .
sumber
Haskell, 30 byte
atau sama panjangnya
Versi pertama dimulai dengan
1
berulang kali dikalikanm
. Kemudian jumlahn^2
angka pertama dari urutan ini. Versi kedua adalah rumus eksplisit seperti yang terlihat pada jawaban lain.sumber
n#m=sum$(m^)<$>[0..n*n-1]
?J, 10 byte
Pemakaian
Saya menandai beberapa bilangan bulat dengan
x
akhiran untuk menggunakan bilangan bulat diperluas untuk mendapatkan hasil yang tepat.Penjelasan
sumber
#.*:$*
sesuai APL Bung.Mathcad, [tbd] byte (~ 11)
Menggunakan operator penjumlahan bawaan Mathcad. Juga menunjukkan penyederhanaan prosesor simbolik untuk menghasilkan formula yang tepat.
Mathcad secara efektif menjalankan dua mesin pengolah secara paralel - satu standar IEEE 64/80 bit floating point, dan yang lainnya merupakan proses simbolic length length (MuPad). Evaluasi numerik standar ditunjukkan dengan tanda sama dengan (=), sedangkan panah kanan menunjukkan evaluasi simbolik.
Skema penghitungan MathCad belum ditentukan sehingga tidak ada byte yang dihitung.
ctl- memasuki operator penjumlahan (Sigma), termasuk placeholder kosong untuk meletakkan variabel penjumlahan, nilai awal, nilai akhir, dan ekspresi. Perkiraan byte-equivalence count = 11.
sumber
PostgreSQL,
6766 byteSqlFiddleDemo
Memasukkan:
VALUES(side, multiplier)
EDIT:
Masukan dipindahkan ke tabel, semuanya sekaligus:
SqlFiddleDemo
Keluaran:
sumber
TI-Basic, 19 byte
S
adalah panjang sisi, danM
merupakan pengali.sumber
Python, 40 byte
sumber
lambda l,m:(m**(l*l)-1)/(m-1)
Ruby: 39 byte
Uji:
sumber
sum
fungsi ??? Ini adalah gamechangingPython, 41 Bytes
Sama sekali baru dalam hal golf ini, selamat datang kritik!
sumber
l**l
alih - alih apa yang saya lakukan?l*l
sebenarnya, yang lebih pendek daril**2
.Jolf,
181510 byteTerima kasih kepada Cᴏɴᴏʀ O'Bʀɪᴇɴ karena telah menghemat 3 byte dan mengarahkan saya ke pemetaan
Coba di sini!
sumber
CJam , 9 byte
Input dalam urutan terbalik dipisahkan oleh baris baru atau spasi.
Cobalah online!
sumber
PHP,
5854 byteIni hanya menggunakan rumus penjumlahan untuk menunjukkan nilainya, setelah memeriksa apakah pengali adalah 1 (yang mengembalikan NAN dalam rumus).
sumber
Mathematica, 22 byte
Buat kisaran
{1, 2, ... s^2}
, kurangi 1 untuk membuatnya{0, 1, ..., s^2-1}
. Kemudian naikkan masing-masing ke kekuatanm
membuat{m^0, m^1, ..., m^(s^2-1)}
dan mengembalikan jumlah itu.Atau, Mathematica dapat menggunakan rumus eksplisit dengan mengambil batasnya. Ini membutuhkan 29 byte.
sumber
Tr[#^Range[#2^2]/#]&
PARI / GP , 25 byte
Lebih lama tetapi lebih cepat (35 byte):
Lucu (30 byte):
sumber
C #, 56 byte
sumber
256, 1
?(Math.Pow(1, 256 * 256) - 1) / --1
= 0/0.Lua,
5447 byteJalankan dari baris perintah dengan panjang sisi papan sebagai argumen pertama dan pengganda sebagai yang kedua.
Terima kasih kepada user6245072 untuk menghemat 6 byte, dan Katenkyo karena menyimpan 1 tambahan.
Versi 54 byte asli:
sumber
l,m=...r=0 for i=0,l^2 do r=r+m^i end print(r)
c=1 d=1
=>a,b=...c=1g=1 for i=2,a^2 do c=c*b g=g+c end print(g)
. jika saran @ user6245072 berfungsi, Anda dapat menyimpan byte pada prinsip yang sama =>r=0l,m=...for i=0,l^2 do r=r+m^i end print(r)
r=0
danl,m=...
wajib, jadi itu tidak berubah. Juga loop seharusnyafor i=0,l^2-1
tetapi ini adalah kesalahan saya lol.𝔼𝕊𝕄𝕚𝕟, 11 karakter / 14 byte
Try it here (Firefox/WebKit Nightly only).
Ya, 𝔼𝕊𝕄𝕚𝕟 sekarang berfungsi di WebKit Nightly! Dukungan Chrome berikutnya.
Penjelasan
sumber
KEMBALI , 32 byte
Try it here.
Lambda anonim yang meninggalkan hasil di Stack2. Pemakaian:
Penjelasan
sumber