Latar Belakang
Ubin Fibonacci adalah ubin garis (1D) menggunakan dua segmen: pendek, S , dan panjang, L (rasio panjangnya adalah rasio emas, tetapi itu tidak relevan dengan tantangan ini). Untuk ubin yang menggunakan dua prototipe ini untuk benar-benar menjadi ubin Fibonacci, kondisi berikut harus dipenuhi:
- Ubin tidak boleh mengandung SS berikutnya .
- Ubin tidak boleh mengandung LLL berikutnya .
- Jika ubin baru dikomposisikan dengan melakukan semua pergantian berikut, hasilnya tetap harus ubin Fibonacci:
- LL → S
- S → L
- L → (string kosong)
Mari kita lihat beberapa contoh:
SLLSLLSLLSLS
Ini terlihat seperti ubin yang valid, karena tidak mengandung dua * S * atau tiga * L * tetapi mari kita lakukan komposisi:
LSLSLSLL
Itu masih terlihat baik-baik saja, tetapi jika kita menyusun ini lagi, kita dapatkan
LLLS
yang bukan merupakan ubin Fibonacci yang valid. Oleh karena itu, dua urutan sebelumnya juga tidak berlaku.
Di sisi lain, jika kita mulai dengan
LSLLSLSLLSLSLL
dan berulang kali menyusun ini ke urutan yang lebih pendek
LSLLSLLS
LSLSL
LL
S
semua hasil adalah Fibonacci yang valid, karena kami tidak pernah mendapatkan SS atau LLL di mana pun di dalam string itu.
Untuk bacaan lebih lanjut, ada tesis yang menggunakan ubin ini sebagai analogi 1D sederhana untuk ubin Penrose.
Tantangan
Menulis sebuah program atau fungsi yang, diberi non-negatif bilangan bulat N , mengembalikan semua Fibonacci berlaku ubin dalam bentuk string yang mengandung N karakter (menjadi S
atau L
).
Anda dapat mengambil input melalui argumen fungsi, STDIN atau ARGV dan mengembalikan atau mencetak hasilnya.
Ini adalah kode golf, jawaban terpendek (dalam byte) menang.
Contohnya
N Output
0 (an empty string)
1 S, L
2 SL, LS, LL
3 LSL, SLS, LLS, SLL
4 SLSL, SLLS, LSLS, LSLL, LLSL
5 LLSLL, LLSLS, LSLLS, LSLSL, SLLSL, SLSLL
...
8 LLSLLSLS, LLSLSLLS, LSLLSLLS, LSLLSLSL, LSLSLLSL, SLLSLLSL, SLLSLSLL, SLSLLSLL, SLSLLSLS
LSLSL
->LL
?