배경
피보나치 타일링은 짧은 세그먼트 S 와 긴 세그먼트 L을 사용하는 (1D) 라인의 타일링입니다 . 이 두 프로토 타이핑을 사용하여 실제로 피보나치 타일링을하는 타일링을 위해서는 다음 조건이 충족되어야합니다.
- 타일링에는 하위 시퀀스 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
?