Hintergrund
Die Fibonacci-Kachelung ist eine Kachelung der (1D) -Linie mit zwei Segmenten: einem kurzen, S , und einem langen, L (ihr Längenverhältnis ist das goldene Verhältnis, aber das ist für diese Herausforderung nicht relevant). Damit eine Kachelung mit diesen beiden Prototilen tatsächlich eine Fibonacci-Kachelung ist, müssen folgende Bedingungen erfüllt sein:
- Die Kachelung darf nicht die Teilsequenz SS enthalten .
- Die Kachelung darf nicht die Teilsequenz LLL enthalten .
- Wenn eine neue Kachelung durch Ausführen aller folgenden Ersetzungen erstellt wird, muss das Ergebnis immer noch eine Fibonacci-Kachelung sein:
- LL → S.
- S → L.
- L → (leere Zeichenfolge)
Schauen wir uns einige Beispiele an:
SLLSLLSLLSLS
Dies sieht aus wie eine gültige Kachelung, da sie keine zwei * S * s oder drei * L * s enthält, aber lassen Sie uns die Komposition ausführen:
LSLSLSLL
Das sieht immer noch gut aus, aber wenn wir das noch einmal komponieren, bekommen wir
LLLS
Dies ist keine gültige Fibonacci-Kachelung. Daher waren auch die beiden vorherigen Sequenzen keine gültigen Kacheln.
Auf der anderen Seite, wenn wir mit beginnen
LSLLSLSLLSLSLL
und komponiere dies wiederholt zu kürzeren Sequenzen
LSLLSLLS
LSLSL
LL
S
Alle Ergebnisse sind gültige Fibonacci-Kacheln, da wir innerhalb dieser Zeichenfolgen niemals SS oder LLL erhalten .
Zur weiteren Lektüre gibt es eine These, die diese Kacheln als einfache 1D-Analogie zu Penrose-Kacheln verwendet.
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die bei einer nicht negativen Ganzzahl N alle gültigen Fibonacci-Kacheln in Form von Zeichenfolgen mit N Zeichen (Sein S
oder L
) zurückgibt .
Sie können Eingaben über das Funktionsargument STDIN oder ARGV vornehmen und das Ergebnis zurückgeben oder drucken.
Dies ist Code Golf, die kürzeste Antwort (in Bytes) gewinnt.
Beispiele
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
?