Фон
Плитка Фібоначчі - це плитка лінії (1D), що використовує два сегменти: короткий, S та довгий, L (їх відношення довжини - це золоте співвідношення, але це не стосується цієї проблеми). Щоб плитка з використанням цих двох прототилів фактично була плиткою Фібоначчі, повинні бути виконані наступні умови:
- Плитка не повинна містити послідовності SS .
- Черепиця не повинна містити підсвічування LLL .
- Якщо нова плитка складається з виконання всіх наступних підстановок, результатом все одно повинен бути плитка Фібоначчі:
- LL → S
- S → L
- L → (порожній рядок)
Давайте розглянемо кілька прикладів:
SLLSLLSLLSLS
Це виглядає як дійсна плитка, оскільки вона не містить двох * S * s або трьох * L * s, але давайте виконаємо композицію:
LSLSLSLL
Це все ще виглядає чудово, але якщо ми знову складемо це, отримаємо
LLLS
що не є дійсною плиткою Фібоначчі. Тому дві попередні послідовності також не були допустимими.
З іншого боку, якщо ми почнемо з
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
?