Pertimbangkan proses:
Mengambil bilangan bulat non-negatif N.
eg27
.Membagi menjadi bilangan bulat
N - floor(N/2)
danfloor(N/2)
(bagian 'lebih besar' dan 'lebih kecil') dan menuliskannya dalam urutan itu.
misalnya27
menjadi14 13
.Menghapus ruang untuk bergabung dengan bilangan bulat menjadi bilangan bulat baru yang jauh lebih besar.
misalnya14 13
menjadi1413
.Ulangi langkah 2 dan 3 beberapa kali beberapa kali.
misalnya1413
→707 706
→707706
→353853 353853
→353853353853
→ ...
Tantangan ini adalah tentang melakukan hal ini, tetapi tidak selalu di base 10.
Tantangan
Tulis program yang terdiri dari tiga angka, B, N, dan S:
B adalah bilangan bulat dari 2 hingga 10 yang merupakan basis N (biner ke desimal).
N adalah bilangan bulat non-negatif untuk menerapkan proses splitting-rejoining. Untuk membuat input pengguna lebih mudah, itu diberikan sebagai string di basis B, bukan bilangan bulat.
S adalah bilangan bulat non-negatif yang merupakan jumlah kali untuk mengulangi proses pemisahan-bergabung kembali.
Output dari program ini adalah representasi string dari N di basis B setelah prosedur split-join S.
Ketika S adalah 0
, tidak ada pemisahan yang dilakukan, sehingga output selalu N.
Ketika N adalah 0
, semua pembagian memiliki bentuk 0 0
dan menguranginya 0
lagi, sehingga hasilnya selalu 0
.
Contohnya
B = 10, N = 27, S = 1
→1413
B = 10, N = 27, S = 2
→707706
B = 9, N = 27, S = 1
→1413
B = 9, N = 27, S = 2
→652651
B = anything, N = anything, S = 0
→N
B = anything, N = 0, S = anything
→0
Tabel untuk semua B dengan N = 1
untuk S = 0
ke 7
:
B S=0 S=1 S=2 S=3 S=4 S=5 S=6 S=7
2 1 10 11 101 1110 111111 10000011111 10000100001000001111
3 1 10 21 1110 202201 101101101100 1201201201212012012011 212100212102121002121212100212102121002120
4 1 10 22 1111 223222 111311111311 2232222232322322222322 11131111131311311111311113111113131131111131
5 1 10 32 1413 432431 213441213440 104220331443104220331442 2433241322130211014044424332413221302110140443
6 1 10 33 1514 535535 245550245545 122553122553122553122552 4125434125434125434125441254341254341254341254
7 1 10 43 2221 11111110 40404044040403 2020202202020220202022020201 10101011010101101010110101011010101101010110101011010100
8 1 10 44 2222 11111111 44444454444444 2222222622222222222226222222 11111113111111111111131111111111111311111111111113111111
9 1 10 54 2726 13581357 62851746285173 3142536758708231425367587081 15212633743485606571782880411521263374348560657178288040
10 1 10 55 2827 14141413 70707077070706 3535353853535335353538535353 17676769267676676767692676771767676926767667676769267676
Tabel untuk semua B dengan N acak untuk S = 0
ke 3
:
B S=0 S=1 S=2 S=3
2 11011 11101101 11101111110110 11101111110111110111111011
3 2210 11021101 20102012010200 1001212100121210012121001211
4 1113 230223 112112112111 2302302302323023023022
5 101 2323 11341134 31430423143042
6 120 4040 20202020 1010101010101010
7 134 5252 24612461 1230456412304564
8 22 1111 445444 222622222622
9 4 22 1111 505505
10 92 4646 23232323 1161616211616161
Detail
- Ambil input melalui stdin atau baris perintah. Output ke stdout.
- Alih-alih sebuah program, Anda dapat menulis fungsi yang mengambil B, N, dan S dan mencetak hasilnya secara normal atau mengembalikannya (sebagai string).
- B, N, dan S dapat diambil dalam urutan apa pun.
- Semua input yang menghasilkan output dengan nilai desimal di bawah 2 32 harus berfungsi.
- N diwakili dengan cara biasa. yaitu digit paling signifikan pertama dan tidak ada nol terkemuka kecuali dalam nol itu sendiri yang ditulis
0
. (Outputing00
bukannya0
tidak valid.) - Kode terpendek dalam byte menang.
Jika Anda menikmati tantangan saya, pertimbangkan untuk memberikan Block Building Bot Flocks! Beberapa cinta :)
sumber
Jawaban:
Pyth,
2119 bytesMengambil input dalam format
N\nB\nS
. Cobalah online: Demonstrasi atau Uji harnessPenjelasan
sumber
Pyth,
2921 byteImplementasi yang sangat mudah.
Mengambil input pada stdin dalam format berikut:
sumber
00
untukN=0
.Mathematica, 101 byte
Gunakan beberapa
Through
tipu daya untuk menerapkan fungsi langit-langit dan lantai. Abaikan saja kesalahannya.sumber
CJam, 24 byte
Uji di sini.Mengambil input sebagai
"N" S B
.Penjelasan
sumber
"0" 1 9
dikeluarkan00
. Saya mencoba golf itu:,q~:B;{:~Bb,2/z:,Bfbs}*
tetapi juga tidak valid karena itu dihasilkan string kosong.i
pada akhirnya akan diurus00
. Anda bisa mendapatkan byte kembali dengan menggantinya2/:I-I]
dengan)\]2f/
.JavaScript ( ES6 ) 78
79Fungsi rekursif. Jalankan cuplikan untuk menguji (khusus Firefox)
Edit 1 byte disimpan thx @DocMax
sumber
m&&s
denganm*s
.ECMAScript 6, 90 byte
Mendefinisikan fungsi rekursif menggunakan variabel bukanlah gaya yang benar-benar baik, tetapi ini adalah kode terpendek yang dapat saya buat dalam ECMAScript 6.
Mendapatkan casing sudut dengan
"00" => "0"
benar menghabiskan tiga byte (s(n)
bukan hanyaN
).Untuk mencobanya, Anda dapat menggunakan repl Babel : copy / paste kode dan mencetak hasil contoh doa seperti:
console.log(f(9, "27", 2))
.sumber
Lisp umum - 113 karakter
Tidak disatukan
~vR
Format direktif output integer dalam basisv
, di manav
disediakan sebagai argumen untukformat
.parse-integer
menerima:radix
argumen untuk mengonversi dari basis tertentu.#1=
dan#1#
(masing-masing menetapkan dan menggunakan) adalah variabel pembaca yang memungkinkan untuk berbagi sub-ekspresi umum. Ketika diperluas, mereka memberikan kode berikut:sumber
Pip , 27 byte
Mengambil basis, integer, dan jumlah pengulangan sebagai argumen baris perintah. Algoritma ini mudah, tetapi menggunakan beberapa fitur bahasa yang menarik:
Jenis skalar Pip, yang mewakili angka dan string, sangat berguna di sini, seperti operasi item-bijaksana pada daftar; sayangnya, tanda kurung dan operator dua karakter
FB
,TB
dan//
meniadakan setiap keuntungan.Solusi alternatif, tanpa tugas perantara tetapi masih 27 byte:
sumber
C, 245 byte
Ini tidak akan memenangkan apa pun , tapi itu menyenangkan untuk dilakukan!
sumber
PHP ,
115112 byteCobalah online!
Tidak Disatukan:
Keluaran
sumber
Japt , 17 byte
Cobalah online!
Mengambil input dalam urutan S, N, B dengan N sebagai daftar tunggal . Menerima N tanpa daftar tunggal biayanya 2 byte .
Penjelasan:
sumber
Keempat (gforth) , 105 byte
Cobalah online!
Penjelasan
Mengubah basis menjadi B, lalu dalam satu loop yang menjalankan S kali:
Mencetak string ketika selesai dan menetapkan basis kembali ke 10 (sehingga kami dapat menjalankan beberapa kali berturut-turut)
Penjelasan Kode
sumber