Input:
Daftar / array bilangan bulat untuk setiap item dalam kisaran 2-36
.
Output:
Jumlah bilangan bulat (sebagai basis 10), di mana setiap integer berikutnya berada di dasar nilai sebelumnya (dimulai dengan basis reguler 10).
Contoh:
Misalkan kita memiliki input seperti ini: [4, 12, 34, 20, 14, 6, 25, 13, 33]
Kemudian kita memiliki jumlah seperti ini:
4 (4 in base-10) +
6 (12 in base-4 ) +
40 (34 in base-12) +
68 (20 in base-34) +
24 (14 in base-20) +
6 (6 in base-14) +
17 (25 in base-6 ) +
28 (13 in base-26) +
42 (33 in base-13)
= 235
Basis matematika menjelaskan:
Saya menganggap asumsi semua orang tahu cara kerja basis, tapi saya akan memberikan contoh singkat bagaimana cara kerjanya, untuk berjaga-jaga. Mari kita ambil34 in base-12
contohnya, bagaimana kita mendapatkannya40
?
1-34 in regular base-10:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
So, from 1 to 34 is 34 steps in base-10
1-34 in base-12:
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 30, 31, 32, 33, 34
So, from 1 to 34 is 40 steps in base-12
Ini mungkin kalkulator yang berguna.
Aturan tantangan:
- Ukuran array akan berada dalam kisaran yang wajar (seperti
1-100
/ lihat kasus uji). - Kasing uji tidak akan pernah berisi bilangan bulat yang nilai saat ini tidak valid untuk basis sebelumnya (yaitu Anda tidak akan pernah memiliki sesuatu seperti
19 in base-6
atau6 in base-6
, karena basis-6 hanya berisi digit0-5
). - Anda dapat mengambil input dengan cara apa pun yang Anda inginkan. Dapat berupa int-array, sebagai string yang dipisahkan tanda koma / spasi, dll. Panggilan Anda. (Anda juga diizinkan untuk mengambil int-array terbalik, yang dapat berguna untuk bahasa pemrograman berbasis tumpukan.)
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda dari memposting jawaban dengan bahasa yang bukan golf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman apa pun. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
[4, 12, 34, 20, 14, 6, 25, 13, 33] -> 235
4+ 6+ 40+ 68+ 24+ 6+ 17+ 28+ 42
[5, 14, 2, 11, 30, 18] -> 90
5+ 9+ 2+ 3+ 33+ 38
[12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 12, 2, 11, 3, 10, 2, 10] -> 98
12+ 13+ 11+ 9+ 8+ 7+ 6+ 5+ 4+ 3+ 5+ 2+ 3+ 3+ 3+ 2+ 2
[36, 36] -> 150
36+ 114
code-golf
math
base-conversion
Kevin Cruijssen
sumber
sumber
Jawaban:
05AB1E ,
765 byteMenggunakan penyandian 05AB1E .
Disimpan 1 byte menggunakan built-in baru
š
seperti yang disarankan oleh Kevin CruijssenPenjelasan
Daftar input diambil terbalik, sebagaimana diizinkan oleh spesifikasi tantangan.
Cobalah online!
Testuite yang dimodifikasi
sumber
š
bukan¸ì
. Juga, penjelasan Anda menyatakan " tambahkan " bukan " prepend ". :)Python 3, 40 byte
Tes ada di ideone
map(str, a)
menciptakan generator,,G
yang memanggilstr
setiap nilai dalama
, mengonversi ke stringmap(int, G, [10]+a)
menciptakan generator yang memanggilint(g, v)
pasangan melintasiG
dan[10]+a
int(g, v)
mengubah stringg
dari basis integerv
(jikav
ada[2,36]
dang
valid)sum
melakukan apa yang dikatakan di kalengsumber
Python 2, 48 byte
Tes ada di ideone
zip(a,[10]+a)
melintasi pasang nilai-nilai dalama
, dan nilai sebelumnya atau10
untuk pertamayang
backticks
diint
panggilan convertx
ke string,s
int(s, y)
mengkonversi strings
dari dasar bilangan bulaty
(jikay
dalam[2,36]
dans
berlaku)sum
melakukan apa yang tertulis di kalengsumber
Perl,
353433 byteTermasuk +2 untuk
-ap
Jalankan dengan daftar nomor di STDIN:
basemix.pl
:Saya sudah menunggu lama untuk menggunakan penyalahgunaan ini ...
Penjelasan
Nomor input dapat memiliki paling banyak 2 digit. Angka
xy
dalam basisb
sederhanab*x+y
. Saya akan menggunakan regex/.$/
sehingga angka pertama berakhir$`
dan digit terakhir$&
, jadi kontribusi untuk penjumlahannya adalah$&+$b*$`
.Saya menyalahgunakan fakta yang
for
tidak melokalkan variabel regex dengan benar (seperti misalnyamap
danwhile
lakukan) sehingga hasil kecocokan dalam loop sebelumnya masih tersedia di loop saat ini. Jadi jika saya berhati-hati tentang urutan operasi yang dilakukan, basis tersedia sebagai"$`$&"
, kecuali untuk loop pertama di mana saya membutuhkan basis menjadi 10. Jadi saya gunakan"$`$& 10"
sebagai gantinyaCara kerja pertama
$&
adalah penyalahgunaan juga karena sebenarnya diubah oleh/.$/
sementara itu sudah di tumpukan menunggu untuk ditambahkan.Penyalahgunaan terakhir adalah
}{
pada bagian akhir yang mengubah perulangan tersirat-p
dariuntuk
Yang berarti
$_
akan tidak ditentukan dalam cetakan, tetapi masih menambahkan$\
di mana saya mengumpulkan jumlahnya. Ini juga merupakan trik golf standar untuk mendapatkan pemrosesan post-loopsumber
PHP,
5351 byteIterate atas input, mengubah setiap input menjadi varian string. Kemudian mengambil nilai integer menggunakan angka sebelumnya sebagai basis. Untuk angka pertama, basis tidak akan ditetapkan, PHP kemudian akan mulai dengan 10 (disimpulkan dari format angka).
Jalankan seperti ini (
-d
ditambahkan hanya untuk estetika):Tweaks
sumber
Jelly , 7 byte
Cobalah online!
sumber
ṖḌ
denganF
Java, 86 byte
Menguji dan tidak berkhianat
sumber
JavaScript ES6,
454241 BytesConventiently
parseInt(x,0) === parseInt(x,10)
.sunting : Disimpan 1 byte berkat @ETHproductions
sumber
&&s
dengan|s
.const g
dengan hanyag
Bash murni, 38
Daftar input diberikan di baris perintah.
for i;
secara otomatis beralih pada parameter input (setara denganfor i in $@;
).Ideone.
sumber
Java 7,
1098986 byteGolf 20 byte berkat @cliffroot (12 di antaranya karena kesalahan bodoh yang saya buat sendiri).
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
p
? Jumlahnya dapat dihitung seperti ini, bukankah itur+=r.valueOf(""+a[i],a[i-1])
:?+""
alih-alihvalueOf
dan menghapus variabel yang tidak perlu -int c(int[]a){for(Integer i=1;i<a.length;a[0]+=i.valueOf(a[i]+"",a[++i-2]));return a[0];}
10
danp
membalikkannya. Saya menyadari kesalahan dan memperbaikinya, tetapi karena bagian String sekarang menjadi basis-10 biasa saya memang bisa menghapustoString
dan hanya menggunakan+""
.. Terima kasih, dan juga terima kasih untuk bermain golf hal-hal lain, -20 byte. Saya benar-benar harus membuat jawaban Anda tidak bisa bermain golf lebih banyak (bukan karena saya tidak menghargai itu! Semakin pendek tentu saja lebih baik - dalam kode-golf yaitu; P)Sebenarnya, 12 byte
Cobalah online!
Penjelasan:
sumber
CJam , 15 byte
Cobalah online!
Penjelasan
sumber
Haskell,
6559 byteUji di Ideone .
sumber
Matlab, 68 byte
Bukan solusi yang sangat kreatif, tetapi ini dia:
Tes:
sumber
function s=r(x);...
JavaScript (ES6),
544840 byteSaya menggunakan pendekatan rekursif.
Disimpan 6 byte, terima kasih kepada Lmis!
Disimpan 8 byte lebih, terima kasih kepada Neil!
sumber
parseInt(a,b)
alih-alihparseInt(a[0],b)
karenaparseInt
mengubah argumen pertama menjadi string dan mengabaikan semuanya mulai dari karakter pertama yang tidak valid (yaitu ',').a[0]?stuff():0
bukana.length&&stuff()
f=([b,...a],c)=>b?parseInt(b,c)+f(a,b):0
slice
fungsiPerl 6 ,
5250 bytePenjelasan:
sumber
Python 2, 52 byte
Uji di Ideone .
sumber
Julia, 63 Bytes
Mem-parsing setiap angka (kecuali yang pertama) dengan mengambil elemen sebelumnya sebagai basis dan jumlah. Menambahkan elemen pertama di akhir
sumber
Ruby, 52 byte
ungolfed
pemakaian
sumber
Scala, 67 byte
Penjelasan:
sumber
Mathematica, 59 byte
Saya berharap nama fungsi Mathematica lebih pendek. Tetapi sebaliknya saya senang.
Sebagai contoh,
hasil panen
235
.{##,0}
adalah daftar argumen input dengan 0 ditambahkan (mewakili angka);{10,##}
adalah daftar argumen input dengan 10 prepended (mewakili basis). Sepasang daftar tersebut adalahTranspose
d untuk mengaitkan masing-masing dengan angka dengan basisnya, danFromDigits
(yay!) Mengonversi setiap pasangan angka-basis menjadi bilangan bulat-10, yang hasilnya dijumlahkan olehTr
.sumber
Common Lisp, 83
Detail
The
loop
konstruk menerima "v kemudian w" konstruksi iterasi, di mana v adalah ekspresi akan dievaluasi pertama kalinya variabel iterasi dihitung, dan w adalah ekspresi akan dievaluasi untuk iterasi berturut-turut. Deklarasi dievaluasi satu demi satu, begitubase
juga pertama "10", maka elemen sebelumnyastring
dari daftarlist
iterasi. Katasum
kunci menghitung jumlah: bilangan bulat dibaca daristring
dengan basis b , di mana b adalah bilangan bulat yang diuraikan daribase
string, dalam basis 10.#1=
dan#1#
merupakan notasi untuk menentukan dan menggunakan variabel pembaca: yang pertama mempengaruhi ekspresi-s ke variabel, yang lain menggantikan referensi dengan objek yang sama. Ini menghemat beberapa karakter untuk nama panjang.Contoh
sumber
Japt
-x
, 7 byteCobalah
sumber