バックグラウンド
フィボナッチタイリングは、短いセグメントSと長いセグメントLの 2つのセグメントを使用した(1D)ラインのタイリングです(長さの比率は黄金比ですが、この課題には関係ありません)。これらの2つのプロトタイルを使用してタイリングを実際にフィボナッチタイリングにするには、次の条件を満たす必要があります。
- タイリングには、サブシーケンスSSを含めることはできません。
- タイリングには、サブシーケンスLLLを含めることはできません。
- 次のすべての置換を実行して新しいタイリングを構成する場合でも、結果はフィボナッチタイリングでなければなりません。
- LL → S
- S → L
- L → (空の文字列)
いくつかの例を見てみましょう:
SLLSLLSLLSLS
2つの* S *または3つの* L *が含まれていないため、これは有効なタイリングのように見えますが、構成を実行してみましょう。
LSLSLSLL
それでも問題はないように見えますが、これをもう一度作成すると、
LLLS
これは有効なフィボナッチタイルではありません。したがって、前の2つのシーケンスも有効なタイリングではありませんでした。
一方、
LSLLSLSLLSLSLL
これを繰り返して短いシーケンスに構成します
LSLLSLLS
LSLSL
LL
S
これらの文字列内のどこかでSSまたはLLLを取得することはないため、すべての結果は有効なフィボナッチタイルです。
さらに読むために、このタイリングをペンローズタイリングの単純な1Dアナロジーとして使用する論文があります。
チャレンジ
非負の整数Nを指定すると、N文字(S
またはL
)を含む文字列の形式ですべての有効なフィボナッチタイリングを返すプログラムまたは関数を記述します。
関数の引数STDINまたはARGVを介して入力を受け取り、結果を返すか印刷することができます。
これはコードゴルフで、最短の回答(バイト単位)が勝ちます。
例
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
?