Latar Belakang
Kebanyakan orang di sini harus terbiasa dengan beberapa sistem dasar: desimal, biner, heksadesimal, oktal. Misalnya dalam sistem heksadesimal, angka 12345 16 akan mewakili
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Perhatikan bahwa kami biasanya tidak mengharapkan basis (di sini, 16
) berubah dari digit ke digit.
Generalisasi dari sistem posisi yang biasa ini memungkinkan Anda untuk menggunakan basis numerik yang berbeda untuk setiap digit. Misalnya jika kita berganti-ganti antara sistem desimal dan biner (dimulai dengan basis 10 dalam digit paling signifikan), angka 190315 [2,10] akan mewakili
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Kami menyatakan basis ini sebagai [2,10]
. Basis paling kanan sesuai dengan digit paling tidak signifikan. Kemudian Anda pergi melalui basis (ke kiri) saat Anda pergi melalui digit (ke kiri), membungkus jika ada lebih banyak digit daripada basis.
Untuk bacaan lebih lanjut, lihat Wikipedia .
Tantangan
Tulis program atau fungsi yang, dengan memberikan daftar D
basis input I
dan basis output O
, mengubah bilangan bulat yang diwakili oleh D
dari basis I
ke basis O
. Anda dapat mengambil input melalui STDIN, ARGV atau argumen fungsi dan mengembalikan hasilnya atau mencetaknya ke STDOUT.
Anda mungkin berasumsi:
- bahwa angka-angka
I
danO
semua lebih besar dari1
. - yang
I
danO
non-kosong. - bahwa nomor input valid dalam basis yang diberikan (yaitu, tidak ada digit lebih besar dari basisnya).
D
bisa kosong (mewakili 0
) atau bisa memimpin nol. Output Anda tidak boleh mengandung nol terkemuka. Secara khusus, hasil yang mewakili 0
harus dikembalikan sebagai daftar kosong.
Anda tidak boleh menggunakan fungsi konversi basis bawaan atau pihak ketiga.
Ini kode golf, jawaban terpendek (dalam byte) menang.
Contohnya
D I O Result
[1,0,0] [10] [2] [1,1,0,0,1,0,0]
[1,0,0] [2] [10] [4]
[1,9,0,3,1,5] [2,10] [10] [7,6,7,5]
[1,9,0,3,1,5] [2,10] [4,3,2] [2,0,1,1,0,1,3,0,1]
[52,0,0,0,0] [100,7,24,60,60] [10] [3,1,4,4,9,6,0,0]
[0,2,10] [2,4,8,16] [42] [1,0]
[] [123,456] [13] []
[0,0] [123,456] [13] []
sumber
[]
jika inputnya[0]
Jawaban:
CJam, 45
Akhirnya saya menemukan penggunaan yang bagus
j
.Bagaimana itu bekerja
Long ArrayList Block j
mengeksekusi blok yang mengambil integer sebagai parameter, danLong j
akan memanggil blok ini secara rekursif di blok. Ini juga akan menyimpan nilai-nilai yang dikembalikan oleh blok dalam array internal, yang diinisialisasi oleh parameter array. Ini tidak akan menjalankan blok jika input sudah ada dalam array, dan nilai dalam array dikembalikan sebagai gantinya.Jadi jika saya menginisialisasi dengan array dari array kosong, array kosong akan dikembalikan untuk input 0, dan blok akan dieksekusi untuk input lainnya.
CJam,
4948Input seharusnya
O I D
.Contoh:
Bagaimana itu bekerja
sumber
_{}?
Trik itu benar-benar rapi.{}e|
adalah sama.j
? :)CJam,
62615957 byteMembaca array input
[O I D]
dari STDIN. Cobalah online.Bagaimana itu bekerja
Uji kasus
Perhatikan bahwa string kosong dan array kosong bisa dibedakan ke CJam, sehingga
[]p
cetakan""
.sumber
Python 2 - 318
Saya mengacaukan urutan argumen secara tidak sengaja, jadi saya harus membalikkannya. Saya akan bekerja pada slice-fu untuk mendapatkan daftar untuk bekerja di arah lain nanti, saya sudah membuang seluruh istirahat makan siang saya: pTetap
sumber
APL, 78
Contoh:
sumber
{{⍵↓⍨1⍳⍨×⍵}(99⍴⎕)⊤⍵⊥⍨⎕⍴⍨⍴⍵}
menganggap D sebagai argumen yang benar, lalu meminta I dan O.Python 2 - 122
Sangat mudah, tidak berhasil menemukan trik golf khusus yang satu ini.
Tidak Disatukan:
Sunting: versi program 116-byte berkat FryAmTheEggman
Versi ini menerima input yang dipisahkan koma, mis
[1,9,0,3,1,5], [2,10], [10]
sumber
k2 -
8374 charBerfungsi mengambil satu argumen. Ini jauh lebih cocok untuk K daripada J, itulah sebabnya saya tidak menggunakan J. Itu hanya akan menjadi sampah tinju / unboxing, dan tidak ada yang menginginkan itu. Ini dalam dialek k2 (mungkin memerlukan beberapa adaptasi untuk bekerja dalam implementasi open source Kona), tapi saya akan mengubahnya ke k4 jika saya dapat menurunkannya lebih pendek di sana.
Saya akan perhatikan bahwa saya mengambil sikap pilih-pilih di sini dan mengatakan bahwa satu daftar barang harus dimasukkan sebagai masukan.
,2
adalah daftar satu item, item tersebut adalah skalar2
. Seringkali daftar skalar dan 1-item dapat dipertukarkan, tetapi ada logika dalam golf ini yang bergantung pada asumsi argumen daftar.Untuk menjelaskan golf, saya akan memecahnya menjadi dua bagian.
F
adalah golf,L
adalah loop utama yang menghitung output. Mekanisme yang tepat dari perulangan adalah yangL
diterapkan pada argumennya berulang kali hingga argumen kedua adalah nol, maka hasilnya dikembalikan. (Ini.[L]/
bagiannya.)Dengan ledakan:
Beraksi:
sumber
Perl 6 , 67 byte
Cobalah
Diperluas:
Jika Anda tidak yakin apa yang dilakukan pengurangan segitiga:
Jika saya bisa mengambil input terbalik, dan output sebaliknya, itu akan menjadi 47 byte.
Cobalah
sumber