Antecedentes
El mosaico de Fibonacci es un mosaico de la línea (1D) que utiliza dos segmentos: uno corto, S y uno largo, L (su relación de longitud es la relación de oro, pero eso no es relevante para este desafío). Para que un mosaico que utiliza estos dos prototipos sea realmente un mosaico de Fibonacci, se deben cumplir las siguientes condiciones:
- El mosaico no debe contener la subsecuencia SS .
- El mosaico no debe contener la subsecuencia LLL .
- Si un nuevo mosaico se compone realizando todas las sustituciones siguientes, el resultado debe ser un mosaico de Fibonacci:
- LL → S
- S → L
- L → (cadena vacía)
Veamos algunos ejemplos:
SLLSLLSLLSLS
Esto parece un mosaico válido, porque no contiene dos * S * so tres * L * s, pero realicemos la composición:
LSLSLSLL
Eso todavía se ve bien, pero si volvemos a componer esto, obtenemos
LLLS
que no es un mosaico válido de Fibonacci. Por lo tanto, las dos secuencias anteriores tampoco eran válidas.
Por otro lado, si comenzamos con
LSLLSLSLLSLSLL
y componer esto repetidamente en secuencias más cortas
LSLLSLLS
LSLSL
LL
S
todos los resultados son inclinaciones de Fibonacci válidas, porque nunca obtenemos SS o LLL en ningún lugar dentro de esas cadenas.
Para leer más, hay una tesis que usa este mosaico como una simple analogía 1D a las inclinaciones de Penrose.
El reto
Escriba un programa o función que, dado un número entero no negativo N , devuelva todos los mosaicos de Fibonacci válidos en forma de cadenas que contienen N caracteres (being S
o L
).
Puede tomar la entrada a través del argumento de función, STDIN o ARGV y devolver o imprimir el resultado.
Este es el código golf, gana la respuesta más corta (en bytes).
Ejemplos
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
?