Tujuan dari tantangan ini adalah untuk menulis sebuah program untuk mengonversi string yang dimasukkan dari apa yang dapat dianggap hanya berisi huruf dan angka dari sebanyak mungkin basis antara 2 dan 36, dan menemukan basis 10 jumlah hasil.
Input string akan dikonversi ke semua basis di mana jumlahnya akan ditetapkan sesuai dengan abjad standar untuk basis hingga 36: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Misalnya, input 2T
akan valid hanya dalam basis 30 dan lebih tinggi. Program akan mengkonversi 2T dari basis 30 hingga 36 menjadi desimal dan menjumlahkan hasilnya.
Anda dapat mengasumsikan bahwa string input hanya berisi huruf dan angka. Program Anda dapat menggunakan huruf besar atau kecil; itu bisa, tetapi tidak perlu, mendukung keduanya.
Uji kasus
Input sampel: 2T
Bagan pangkalan yang mungkin
Base Value
30 89
31 91
32 93
33 95
34 97
35 99
36 101
Output: 665
Input sampel: 1012
Bagan pangkalan yang mungkin:
Base Value
3 32
4 70
5 132
6 224
7 352
8 522
9 740
10 1012
11 1344
12 1742
13 2212
14 2760
15 3392
16 4114
17 4932
18 5852
19 6880
20 8022
21 9284
22 10672
23 12192
24 13850
25 15652
26 17604
27 19712
28 21982
29 24420
30 27032
31 29824
32 32802
33 35972
34 39340
35 42912
36 46694
Keluaran: 444278
Input sampel: HELLOworld
Bagan pangkalan yang mungkin
Base Value
33 809608041709942
34 1058326557132355
35 1372783151310948
36 1767707668033969
Keluaran: 5008425418187214
Masukan dari 0
akan dibaca seperti 0
dalam semua pangkalan antara 2 dan 36 inklusif. Tidak ada yang namanya base 1.
Ini kode golf. Aturan standar berlaku. Kode terpendek dalam byte menang.
sumber
0
0
uji kasus penting?0
ada0
di setiap basis, dan tidak ada yang namanya base 1.Jawaban:
Python 3,
727169 byteTerima kasih kepada FryAmTheEggman karena telah menghemat satu byte!
Terima kasih kepada DSM karena telah menghemat 2 byte!
sumber
try
except
akan membiarkan Anda melakukanrange(37)
. Dua byte!Pyth,
201911 byteSecara terang-terangan mencuri ide Adnan dari jawaban Python-nya.
Coba di sini
sumber
S
char1012
.Bash Murni (tanpa utilitas), 38
Dengan asumsi konversi basis bawaan diizinkan:
Ini akan menampilkan kesalahan ke STDERR. Saya berasumsi ini tidak apa-apa sesuai jawaban meta ini .
Output tes:
sumber
Mathematica, 57 byte
sumber
FromDigits
.Serius, 65 byte
Berisi unsintables, hexdump:
Sayangnya saya tidak memiliki cara yang baik untuk memfilter dari daftar berdasarkan tipe. Catatan untuk diri sendiri: tambahkan itu.
Mengambil input seperti
"2T"
Cobalah online (Anda harus memasukkan input secara manual)
Penjelasan:
sumber
Matlab, 98 byte
sumber
Oktaf,
7573 bytePenjelasan:
polyval
memiliki kelebihan dibandingkanbase2dec
vektornya, jadi tidakfor
diperlukan loop.Hanya '0' .. '9' dan huruf besar 'A' .. 'Z' didukung sebagai input.
sumber
polyval
untuk membuat vektor!Japt , 26 byte
Cobalah online!
Tidak terseret dan penjelasan
sumber
Pyth, 16 byte
Cobalah online
Penjelasan:
sumber
CJam,
2827 byteTerima kasih kepada Reto Koradi karena menghemat 1 byte.
Ini agak mengerikan ...
Membutuhkan huruf besar.
Uji di sini.
CJam tidak memiliki konversi basis-36 bawaan dari string, jadi kami harus mengirimkan sendiri string ke string. Saya sudah mencoba segala macam shenanigans divmod, tetapi tampaknya paling pendek untuk membangun string dari semua 36 digit dan hanya menemukan indeks masing-masing karakter dalam string itu.
sumber
q{'0-_9>7*-}%
sama pendeknya.Fungsi C, 93 (hanya keluaran integer 32 bit)
Dengan asumsi OK untuk output hanya naik ke INT_MAX, maka kita bisa melakukan ini:
Testcase terakhir menyiratkan bahwa ini mungkin tidak cukup. Jika demikian, maka dengan bilangan bulat 64-bit yang kita miliki:
Fungsi C, 122
Sayangnya
#include <stdlib.h>
diperlukan sehingga jenis pengembalianstrtoll()
sudah benar. Kita perlu menggunakanlong long
untuk menanganiHELLOworld
testcase. Kalau tidak, ini bisa sedikit lebih pendek.Tes driver:
Output tes:
sumber
#include <stdlib.h>
seperti yang Anda bisa di C ++?Python 3, 142 byte
Adnan menyuruh saya mengalahkan dengan solusi mereka, tetapi saya ingin menambahkan usaha saya sendiri.
Fungsi ini hanya menangani input huruf besar. Tambahkan
.upper()
kefor i in s
, dan itu akan menangani huruf besar dan kecil.sumber
Scala 2.11, 93 byte
Ini dijalankan pada konsol scala.
sumber
Haskell, 97 byte
Hanya mendukung karakter huruf kecil. Contoh penggunaan:
Ini sangat besar, karena saya harus mengimplementasikan konversi char-to-ASCII dan basis sendiri. Fungsi yang telah ditentukan sebelumnya sesuai dalam modul yang membutuhkan impor lebih mahal.
Cara kerjanya:
i
mengonversi karakterc
ke nilai digitnya (mis.i 't'
->29
).f
menghitung nilai string input untuk setiap basis yang mungkin dan menjumlahkannya. Versi non-pointfree dari loop dalam adalahmap (\base -> foldl1 (\value digit -> value*base + digit) (map i s)) [ ...bases... ]
.sumber
JavaScript (ES6), 86 byte
Penjelasan
Uji
Tampilkan cuplikan kode
sumber
&&b=v
menghemat 1 byte lebih?b=v:0
.Perl 6 , 35 byte
pemakaian:
sumber
Ceylon,
10096 byteSaya pertama kali memiliki versi yang lebih sederhana ini hanya mengambil 69 byte:
Tetapi ini gagal dengan kasus uji pertama, kembali
2000000000665
bukannya665
. ( Alasannya adalah bahwaT
dalam2T
diuraikan sebagai Tera, yaitu mengalikan 2 dengan 10 ^ 12, ketika radix adalah 10. ) Oleh karena itu kita perlu menangkap kasus ini secara terpisah. Terima kasih kepada Neil karena menyarankan cara berbeda untuk melakukan ini yang menyelamatkan 4 byte.Diformat:
sumber