Dengan 3 bilangan bulat, tentukan basis terendah yang mungkin untuk dua bilangan bulat pertama untuk dikalikan menjadi yang ketiga. Jika Anda memikirkan Jawaban atas Pertanyaan Utama Kehidupan, Alam Semesta, dan Segalanya, 6 * 9 == 42, benar di Basis 13.
Input dapat menyertakan angka apa pun yang digitnya menggunakan karakter 0-9, az, dan AZ, di mana a
sama dengan 10 di Basis 10, dan Z
61 di Basis 10.
Input harus dimasukkan dengan cara apa pun yang Anda suka (kecuali untuk hard-coding), dan Anda dapat menulis fungsi individual atau keseluruhan program.
Basis maksimum yang harus dipertimbangkan adalah Basis 62, dan basis minimum adalah Basis 2.
Anda dapat mengasumsikan bahwa dua nilai pertama lebih kecil dari nilai ketiga. Anda juga dapat menyimpulkan bahwa basis minimum adalah satu lebih besar dari digit / karakter tertinggi dari input (misalnya, jika inputnya 3 1a 55
, basis minimum adalah Base 11, karena a
merupakan digit tertinggi).
Jika tidak ada basis seperti itu, kembalikan nilai sampah pilihan Anda.
Ini kode golf, jadi kode terpendek menang.
Uji Kasus
6 9 42 --> 13
a a 64 --> 16
aA bB 36jk --> 41
2 3 20 --> <junk value>
10 10 100 --> 2
sumber
b
secara umum sepertia_0 b^0 + a_1 b^1 + a_2 b^2 + ...
(di manaa_0
digit paling signifikan) daripada basis 1 pasti masuk akal. Selain itu, kesimpulan OP juga akan mencakup basis 1 dalam pencarian jika digit hadiah terbesar adalah 0.Jawaban:
CJam,
525148 byteUji di sini. Penguji online tidak mendukung input melalui ARGV. Alternatif terdekat adalah dengan memasukkan input seperti
6 9 42
ke STDIN dan gunakan:Ini mencetak
-1
jika tidak ada basis yang valid hingga 62 dapat ditemukan.Terima kasih banyak kepada Peter untuk kode penguraian digit!
Saya memperbaiki banyak masalah yang menambahkan 14 byte ke hitungan. Penjelasan berikut masih untuk pengiriman asli saya, dan saya akan memperbaruinya besok.
Indeks dicetak secara otomatis di akhir program.
sumber
32base~\[-16.35 9]=+
. Saya tahu CJam memiliki konversi basis yang lebih pendek.APL (Dyalog Unicode) , 30 byte SBCS
Cobalah online!
Terima kasih kepada Adám atas bantuannya.
Penjelasan:
Kami menggunakan fungsi pembantu
In
,, untuk menerima input ke format yang lebih enak. Kalau tidak, input akan menerima matriks 3 kolom.'3 9 42'
akan memberi, misalnya (baca top-down kemudian kiri-ke-kanan):Dan untuk
'aA bB 36jk'
(sama di sini.a
Adalah 10,b
adalah 11,A
adalah 36, dll)sumber
Python 2 -
197213Sungguh monster ... (dibandingkan dengan CJam)
Sayangnya
int
konversi basis hanya dapat menangani basis hingga 36. Jadi saya perlu mengimplementasikannya sendiri. (Lihat solusi luar biasa ini .)sumber
CJam, 53 byte
Mengambil tiga input dari STDIN suka
Mencetak
0
jika produk di pangkalan apa pun tidak dimungkinkanAkan mencoba untuk golf lebih jauh.
Coba di sini
sumber
JavaScript (E6) 129
139Secara rekursif coba semua pangkalan dari 2 hingga 62, menghasilkan -1 jika tidak ada nilai ok.
Fungsi parseInt JavaScript berfungsi dengan basis hingga 36, sehingga sedikit bantuan diperlukan untuk basis yang lebih besar.
Hati-hati, parameter x, y, z adalah string, bukan angka.
Ini lebih sulit daripada yang terlihat. Terima kasih kepada Martin karena telah menunjukkan bug dasar di versi pertama.
Kurang golf
Uji di konsol FireFox / FireBug.
Tes ini mencoba 1000 angka dengan basis yang berbeda (hingga 36, bukan 62). Perlu dicatat bahwa pangkalan yang ditemukan bisa benar tetapi kurang dari pangkalan yang menghasilkan kasus uji.
sumber
Arang , 28 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Output
None
jika tidak ada basis yang valid dapat ditemukan. Penjelasan:sumber
⍘
adalahAny
untuk beberapa alasan ...Erlang (eskrip) - 200
Tambahkan dua baris baru terkemuka yang harus ada.
Dapat dibaca:
Doa:
sumber
if Digit < Base -> … end
bagian itu yang mengurusnya. Jikaif
blok tidak memiliki cabang yang benar, maka pengecualian dilemparkan, yang tertangkaptry … catch _:_ -> … end
.Haskell 216 char (177?)
Mencoba bermain golf ini sebanyak mungkin. Jika impor dihitung, maka ini adalah kode terpendek saya (216)
Namun, jika impor tidak dihitung, maka ini adalah versi terbaik saya (177):
Ini memperlakukan setiap angka sebagai P polinomial (x) di mana x adalah basis, dengan syarat bahwa tidak ada koefisien lebih besar dari x; Saya kemudian mengevaluasi polinomial atas setiap basis yang mungkin, berhenti ketika saya mencapai satu yang memenuhi persamaan P (x) * Q (x) = R (x). Aturan 'base lebih besar dari digit terbesar' diberlakukan dengan penjaga terakhir dalam pertandingan pola, yaitu
n>(m.map(m.f)$k)
. Saya tahu bahwa tantangan golf yang berbeda dan pembuat tantangan yang berbeda memiliki kebijakan yang berbeda tentang impor vis-a-vis scoring, jadi ambil yang kedua dengan sebutir garam.sumber
Prolog - 195 byte
Ide dasarnya sama dengan jawaban Erlang saya:
Dapat dibaca:
Doa:
sumber