Profesor matematika yang sinting ini ingin menyandikan semua penelitian mereka menggunakan sistem yang pasti akan mengalahkan pesaing mereka yang paling keren sekalipun!
Untuk tujuan ini, profesor telah memutuskan untuk mengubah basis bukan hanya nomor yang mereka tulis tetapi setiap digit di nomor itu, sesuai dengan tempat digit itu menemukan dirinya (menghitung dari kanan, dimulai dengan 1). Sebagai contoh:
Angka 0 memiliki satu digit, sehingga diwakili dalam basis 1: 0
Angka 1 akan memiliki satu digit di basis sepuluh, tetapi dalam sistem profesor kami itu tidak valid. Tempat pertama dicadangkan untuk basis 1 digit saja! Ini berarti harus ditabrak ke tempat kedua di mana basis 2 diizinkan: 10
Angka 2 mengharuskan setidaknya basis 3 ditulis: 100
Tetapi sekarang angka 3 dapat ditulis dengan mengubah angka di tempat kedua: 110
dan 4 sebagai: 200
Berikut beberapa contoh lain untuk membantu Anda mendapatkan ide:
5: 210
6: 1000
7: 1010
8: 1100
9: 1110
10: 1200
11: 1210
12: 2000
13: 2010
14: 2100
15: 2110
16: 2200
17: 2210
18: 3000
Dengan menggunakan sistem ini, catatan profesor tidak akan masuk akal bagi siapa pun kecuali mereka, dan mereka akhirnya dapat mengambil alih dunia !!!! tidur nyenyak di malam hari.
Tentu saja metode pengkodean harus sejelas mungkin.
Tugas Anda adalah menulis 10 cuplikan kode, masing-masing mewakili salah satu dari 10 digit basis
0 1 2 3 4 5 6 7 8 9
yang bila digabungkan dalam urutan nomor yang akan dikonversi akan menghasilkan angka yang ditulis dalam sistem penomoran jahat profesor (metode output mungkin pilihan Anda tetapi harus nomor yang dapat dibaca manusia dengan hanya menggunakan angka 0-9)
Misalnya jika cuplikan saya adalah:
0 = MONKEY 1 = CONTOH, 2 = KODE, 3 = GOLF dan 9 = UJI
kemudian
19 = EXAMPLETEST -> 3010
20 = CODEMONKEY -> 3100
21 = CODEEXAMPLE -> 3110
22 = CODECODE -> 3200
23 = CODEGOLF -> 3210
Tidak ada angka input dengan lebih dari 10 digit atau angka negatif yang perlu dipertimbangkan, meskipun jika Anda ingin menulis kode untuk digit tambahan Anda akan mendapatkan pujian tambahan. Ini adalah kode golf, jadi jawaban tersingkat (menggunakan total byte gabungan dari semua snippet) menang dan celah standar tidak diizinkan.
ADDENDUM: Sebelum ada yang memulai apakah 0 adalah representasi yang benar dari 0 di basis 1, saya ingin mengingatkan Anda bahwa profesor ini gila. Jalani saja.
sumber
Jawaban:
Mathematica (lingkungan REPL), 858 total byte
Berikut adalah cuplikan kode 86-byte untuk digit 9:
Cuplikan kode untuk angka 1 hingga 8 identik, kecuali bahwa 9 diganti dengan angka yang sesuai. Cuplikan kode untuk angka 0 sama, kecuali
+9
hanya dihapus.a~IntegerDigits~MixedRadix@Range[b,1,-1]
menghitung daftar angka sistem angka faktoriala
, selamab
paling tidak sebesar jumlah digit;FromDigits
mengonversi daftar angka itu menjadi integer basis-10 biasa untuk keperluan output. (Jika salah satu elemen daftar melebihi 9, sesuatu yang lucu terjadi.)Dalam lingkungan REPL Mathematica, perhitungan dapat diakhiri dengan titik koma untuk menekan output; jadi hanya output terakhir dalam rantai yang dipisahkan titik koma yang akan ditampilkan. Kami mendefinisikan bilangan bulat yang
a
ditunjuk oleh cuplikan secara rekursif , dan juga terikatb
pada jumlah digit sistem-faktorial yang diperlukan. PerintahValueQ@a||(a=0;b=3)
menginisialisasi variabel-variabel ini jika mereka tidak diinisialisasi (yaitu, dalam potongan pertama) dan membiarkannya sendiri; kemudiana=10a+9;b++
melakukan rekursi. Akhirnya, yang pertama1;
adalah untuk menempelkan potongan: itu mengalikan perhitungan menengah dengan 1 (yang tidak pernah kita lihat lagi pula).sumber
Goruby, 790
810980Inilah upaya kedua, dengan mengandalkan fakta bahwa, pada dasarnya shell apa pun, mencetak carriage return ("\ r") tanpa baris baru ("\ n") akan menimpa baris yang sebelumnya dicetak, pada akhirnya memastikan bahwa hanya bit terakhir yang dicetak. (yaitu, hasil akhir) ditampilkan.
Ini harus dijalankan dalam shell, mis
ruby name_of_file.rb
.Ini berfungsi untuk angka positif dengan panjang tidak terbatas.
Kode adalah sepuluh salinan cuplikan di bawah ini, dengan
X
(di bagian atas) diganti dengan angka 0-9, satu per cuplikan.Artinya, cuplikan yang mewakili (misalnya) 8 akan terlihat seperti:
Tantangan menyatakan bahwa cuplikan harus "digabungkan" untuk membuat mewakili angka beberapa digit, jadi, untuk menambahkan satu digit ke suatu angka, cukup letakkan di kurung siku di ujung angka. Dengan demikian, angka 103 (dalam desimal) adalah:
sumber