Deskripsi Biner Rekursif
Baru-baru ini, saya membuat kontribusi pertama saya ke OEIS dengan memperluas dan menambahkan file-b ke urutan A049064 . Urutan dimulai dengan 0
, dan kemudian nilai selanjutnya diperoleh dari memberikan "deskripsi biner" dari item terakhir.
Misalnya, istilah kedua adalah 10
, karena ada satu 0
di elemen pertama. Istilah ketiga adalah 1110
, karena ada satu 1
dan satu 0
. Yang keempat adalah 11110
. karena ada tiga ( 11
dalam biner!) 1
dan satu 0
. Di bawah ini adalah uraian dari istilah kelima untuk memperjelas proses ini:
> 11110
> 1111 0 (split into groups of each number)
> 4*1 1*0 (get count of each number in each group)
> 100*1 1*0 (convert counts to binary)
> 100110 (join each group back together)
Dan inilah contoh untuk beralih dari istilah ke-6 ke ke-7:
> 1110010110
> 111 00 1 0 11 0
> 3*1 2*0 1*1 1*0 2*1 1*0
> 11*1 10*0 1*1 1*0 10*1 1*0
> 111100111010110
Anda dapat memeriksa program referensi φ Saya membuat untuk menghitung persyaratan.
Pekerjaan Anda
Anda perlu membuat program atau fungsi yang mengambil angka n
melalui input standar atau argumen fungsi , dan mencetak urutan dari 1st
term ke (n+1)th
term, dipisahkan oleh baris baru. Jika Anda ingin melihat angka yang lebih rendah, Anda dapat merujuk ke file-b dari halaman OEIS. Namun, program / fungsi Anda harus mendukung 0 <= n <= 30
, yaitu hingga istilah ke-31. Ini bukan prestasi kecil, seperti A049064(30)
lebih dari 140.000 digit δ . Jika Anda ingin melihat seperti apa seharusnya istilah ke-31, saya sudah meletakkannya di Pastebin .
Contoh I / O
func(10)
0
10
1110
11110
100110
1110010110
111100111010110
100110011110111010110
1110010110010011011110111010110
1111001110101100111001011010011011110111010110
1001100111101110101100111100111010110111001011010011011110111010110
func(0)
0
func(3)
0
10
1110
11110
Hanya ada satu aturan: Tidak ada celah standar!
Ini adalah kode-golf , sehingga jumlah byte terendah menang.
φ - Intisari dapat ditemukan di sini , dan demo ideone ada di sini .
δ - Kalau-kalau Anda bertanya-tanya, perkiraan saya pada panjang istilah ke-100 meletakkannya di sekitar 3,28x10 250 karakter, yang akan cukup banyak bagi siapa pun untuk menghitung.
[0]\n[1, 0]\n[1, 1, 1, 0]\n...
Jawaban:
CJam,
1817 byteTerima kasih kepada @ MartinBüttner untuk bermain golf satu byte!
Cobalah online di penerjemah CJam .
Bagaimana itu bekerja
sumber
Pyth,
1817 byteCobalah online: Peragaan
Terima kasih kepada @isaacg untuk menghemat satu byte.
Penjelasan:
Ini menggunakan fakta, bahwa 0 dan 1 dalam biner juga 0 dan 1.
sumber
V
daripada menggunakan.u
:J]0VQjk~JsjR2srJ8
Python 2,
125116110 byteDisimpan 1 byte berkat @ Sp3000 dan 5 byte dengan menghapus
int
panggilan yang berlebihan .Versi yang lebih lama:
Disimpan banyak, banyak byte berkat @ Vioz-!
Versi asli:
sumber
Ruby,
807269 byteSebagai fungsi:
Sebut saja misalnya dengan:
f[6]
sumber
->m{l=?0;0.upto(m){puts l;l.gsub!(/1+|0+/){$&.size.to_s(2)+$&[0]}}}
upto
dan!
- Terima kasih :)Python 2, 102 byte
Entah bagaimana kombinasi
itertools
menjadi lebih darire
dangroupby
mengembalikangrouper
objek berarti bahwa menggunakan regex sedikit lebih pendek ...sumber
Cobra - 128
sumber
Haskell,
136130 Bytessumber