sfondo
La piastrellatura di Fibonacci è una piastrellatura della linea (1D) che utilizza due segmenti: uno corto, S e lungo, L (il loro rapporto di lunghezza è il rapporto aureo, ma non è rilevante per questa sfida). Affinché una piastrellatura che utilizza questi due prototipi sia in realtà una piastrellatura di Fibonacci, devono essere soddisfatte le seguenti condizioni:
- La piastrellatura non deve contenere la sottosequenza SS .
- La piastrellatura non deve contenere la sottosequenza LLL .
- Se una nuova piastrellatura è composta eseguendo tutte le seguenti sostituzioni, il risultato deve essere ancora una piastrellatura di Fibonacci:
- LL → S
- S → L
- L → (stringa vuota)
Diamo un'occhiata ad alcuni esempi:
SLLSLLSLLSLS
Sembra una piastrellatura valida, perché non contiene due * S * se tre * L * ma eseguiamo la composizione:
LSLSLSLL
Sembra ancora bene, ma se lo componiamo di nuovo, otteniamo
LLLS
che non è una piastrellatura di Fibonacci valida. Pertanto, le due sequenze precedenti non erano neppure valori validi.
D'altra parte, se iniziamo con
LSLLSLSLLSLSLL
e comporre ripetutamente questo in sequenze più brevi
LSLLSLLS
LSLSL
LL
S
tutti i risultati sono limiti di Fibonacci validi, perché non otteniamo mai SS o LLL da nessuna parte all'interno di quelle stringhe.
Per ulteriori letture, esiste una tesi che utilizza questa piastrellatura come una semplice analogia 1D con i tasselli di Penrose.
La sfida
Scrivi un programma o una funzione che, dato un numero intero non negativo N , restituisce tutte le piastrellature di Fibonacci valide sotto forma di stringhe contenenti N caratteri (essere S
o L
).
È possibile accettare input tramite argomento di funzione, STDIN o ARGV e restituire o stampare il risultato.
Questo è il codice golf, vince la risposta più breve (in byte).
Esempi
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
?