"Skema sajak" adalah serangkaian huruf a
untuk z
, sehingga kemunculan karakter pertama dalam urutan menaik (tanpa celah), dimulai dari a
. Misalnya (dengan kejadian pertama ditandai):
abccdbebdcfa
^^^ ^ ^ ^
Jumlah skema sajak panjang N
diberikan oleh nomor Bell B(N)
. ( OEIS A000110 )
Tantangan
Tugas Anda adalah mengimplementasikan enumerasi skema sajak ini, yaitu pemetaan bijective dari integer ke skema sajak. Anda diberi bilangan bulat positif N <= 26
, dan juga bilangan bulat non-negatif 0 <= i < B(N)
. Atau, Anda dapat menggunakan rentang 1 <= i <= B(N)
. Anda harus menampilkan skema sajak panjang N
, sehingga setiap i
menghasilkan string yang berbeda.
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter function (out).
Anda dapat menggunakan huruf besar atau kecil (secara konsisten).
Kode Anda harus dapat menangani input yang valid dalam jumlah waktu yang wajar (mis. Tidak lebih dari beberapa jam untuk N = 26
, kasus terburuk i
). Ini harus memungkinkan solusi berskala eksponensial dengan N
(untuk pangkalan kecil), bahkan dalam bahasa yang lambat tetapi melarang solusi yang berskala linier dengan i
(yaitu B(N)
). Secara khusus, itu berarti Anda tidak bisa hanya mengulangi semua skema panjang sajak yang valid N
sampai Anda membuang i
skema.
Aturan standar kode-golf berlaku.
Contohnya
Penugasan yang tepat i
untuk skema to (yaitu urutan skema untuk suatu yang diberikan N
) terserah Anda. Tetapi katakanlah Anda memilih pemesanan leksikografis, solusi Anda harus sesuai dengan tabel berikut (dengan -
menunjukkan input yang tidak valid):
N\i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 a - - - - - - - - - - - - - -
2 aa ab - - - - - - - - - - - - -
3 aaa aab aba abb abc - - - - - - - - - -
4 aaaa aaab aaba aabb aabc abaa abab abac abba abbb abbc abca abcb abcc abcd
Berikut ini adalah skrip CJam pendek yang menghasilkan semua skema sajak yang valid untuk jangka waktu tertentu (tetapi jangan mencoba lebih dari 10 atau Anda akan menunggu beberapa saat).
N
), asalkan tidak berubah menjadi cukup sepele dan saya terlalu bodoh untuk menemukannya.