Фон
Черепица Фибоначчи - это чередование линии (1D) с использованием двух сегментов: короткого S и длинного L (их отношение длины - золотое сечение, но это не относится к этой задаче). Чтобы плитка, использующая эти два прототипа, фактически была плиткой Фибоначчи, должны быть выполнены следующие условия:
- Черепица не должна содержать подпоследовательность SS .
- Черепица не должна содержать подпоследовательность LLL .
- Если новый лист составлен путем выполнения всех следующих подстановок, результатом по-прежнему должен быть лист Фибоначчи:
- LL → S
- S → L
- L → (пустая строка)
Давайте посмотрим на некоторые примеры:
SLLSLLSLLSLS
Это похоже на правильный лист, потому что он не содержит двух * S * s или трех * L * s, но давайте выполним композицию:
LSLSLSLL
Это все еще выглядит хорошо, но если мы составим это снова, мы получим
LLLS
что не является действительным тайлингом Фибоначчи. Следовательно, две предыдущие последовательности также не были действительными значениями.
С другой стороны, если мы начнем с
LSLLSLSLLSLSLL
и многократно составлять это для более коротких последовательностей
LSLLSLLS
LSLSL
LL
S
все результаты являются действительными значениями Фибоначчи, потому что мы нигде не получаем SS или LLL внутри этих строк.
Для дальнейшего чтения есть тезис, в котором эта мозаика используется как простая одномерная аналогия мозаики Пенроуза.
Соревнование
Напишите программу или функцию, которая, учитывая неотрицательное целое число 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
?