Kami memiliki banyak tantangan berdasarkan pada basis 10, basis 2, basis 36, atau bahkan basis -10 , tetapi bagaimana dengan semua basis rasional lainnya?
Tugas
Diberikan bilangan bulat di basis 10 dan basis rasional, kembalikan integer di basis itu (sebagai array, string, dll.).
Proses
Sulit membayangkan dasar yang rasional, jadi mari kita bayangkan dengan menggunakan Exploding Dots :
Pertimbangkan animasi ini, dengan mengekspresikan 17 pada basis 3:
Setiap titik mewakili satuan, dan kotak mewakili angka: kotak paling kanan adalah tempat seseorang, kotak tengah adalah tempat 3 ^ 1, dan kotak paling kiri adalah tempat 3 ^ 2.
Kita bisa mulai dengan 17 titik di tempat seseorang. Namun, ini adalah basis 3, jadi tempat yang harus kurang dari 3. Oleh karena itu, kami "meledak" 3 titik dan membuat sebuah titik pada kotak di sebelah kiri. Kami ulangi ini sampai kami memiliki posisi stabil tanpa titik yang dapat meledak (yaitu 3 titik di kotak yang sama).
Jadi 17 di basis 10 adalah 122 di basis 3.
Basis pecahan adalah analog dengan meledaknya sejumlah titik menjadi lebih dari satu titik. Basis 3/2 akan meledak 3 titik untuk membuat 2.
Mengekspresikan 17 dalam basis 3/2:
Jadi 17 di basis 10 adalah 21012 di basis 3/2.
Basis negatif bekerja dengan cara yang sama, tetapi kita harus melacak tanda-tanda (menggunakan apa yang disebut anti-dots, sama dengan -1; diwakili oleh lingkaran terbuka).
Mengekspresikan 17 dalam basis -3:
Catatan, ada ledakan tambahan untuk membuat tanda semua kotak sama (mengabaikan nol).
Jadi, 17 pada basis 10 adalah 212 pada basis -3.
Basis rasional negatif bekerja sama, dalam kombinasi dari dua kasus di atas.
Aturan
- Tidak ada celah standar.
- Tanda setiap "digit" pada output harus sama (atau nol).
- Nilai absolut dari semua digit harus kurang dari nilai absolut pembilang dari basis.
- Anda dapat mengasumsikan bahwa nilai absolut dari pangkalan lebih besar dari 1.
- Anda dapat berasumsi bahwa basis rasional adalah dalam bentuk tereduksi terendah.
- Anda dapat mengambil pembilang dan penyebut basis secara terpisah dalam input.
- Jika angka memiliki beberapa representasi, Anda dapat menampilkan salah satu dari mereka. (mis. 12 di base 10 bisa
{-2, -8}
dan{1, 9, 2}
di base -10)
Kasus uji:
Format: {in, base} -> result
{7, 4/3} -> {3, 3}
{-42, -2} -> {1, 0, 1, 0, 1, 0}
{-112, -7/3} -> {-6, -5, 0, -1, 0}
{1234, 9/2} -> {2, 3, 6, 4, 1}
{60043, -37/3} -> {-33, -14, -22, -8}
Karena beberapa input mungkin memiliki beberapa representasi, saya sarankan menguji output menggunakan potongan Mathematica ini di TIO.
Ini adalah kode-golf , jadi pengiriman dengan jumlah byte terpendek di setiap bahasa akan menang!
Untuk informasi lebih lanjut tentang titik-titik yang meledak, kunjungi situs web proyek matematika global ! Mereka memiliki banyak hal keren yang keren!