Fannkuch es un programa de referencia clásico. El nombre proviene del alemán "Pfannkuchen" - panqueques - por la semejanza del algoritmo con voltear pilas de panqueques. Una secuencia de números de Fannkuch se forma de la siguiente manera:
Tome una permutación de {1 ..... n}, por ejemplo: {4,2,1,5,3}. Tome el primer elemento, aquí 4, e invierta el orden de los primeros 4 elementos: {5,1,2,4,3}. Repita esto hasta que el primer elemento sea un 1, por lo que voltear no cambiará nada más: {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3, 1,5}, {1,3,2,4,5}
Debe escribir un programa o función que calcule una secuencia tipo Fannkuch para cadenas de caracteres alfabéticos. En lugar de usar números para indicar cuántos elementos de la lista se deben voltear cada vez, se debe usar la posición de una letra en el alfabeto. Por ejemplo, un c
inicio indicaría que debe invertir el orden de los primeros 3 elementos, mientras que un inicio a
indica que la secuencia está completa.
Entrada
La entrada se proporcionará como una cadena a través de stdin o como un argumento de función. La cadena contendrá entre 1 y 26 letras minúsculas distintas. Las cadenas no contendrán letras cuyo índice equivalente haría que el algoritmo Fannkuch voltee más elementos de los que existen.
Salida
Los programas o funciones deben regresar o imprimirse para mostrar la secuencia de términos producidos al aplicar el algoritmo de Fannkuch hasta encontrar un a
inicio, incluida la cadena inicial. Por ejemplo, si la entrada es bca
, puede imprimir:
bca
cba
abc
Los resultados impresos pueden usar cualquier separador razonable: comas, líneas nuevas, etc. Cualquier opción de espacio en blanco es aceptable.
Como otro ejemplo, si su entrada es eabdc
puede devolver:
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
Reglas y puntuación
Este es el código de golf : gana el programa más corto. Las lagunas estándar no están permitidas.
fuente
proc fcmp
por aquí.Haskell, 78 bytes
Uso:
f "eabdc"
->["eabdc","cdbae","bdcae","dbcae","acbde"]
.fuente
splitAt
- ¡puede reducirlo a 71 bytes!K5, 21 bytes
Ahorró 5 bytes gracias a @JohnE y otro byte reorganizando una expresión.
¡Por primera vez en la tierra, creo que K ha vencido a CJam!
Versión de 27 bytes
fuente
a
, la cadena no cambiará.Haskell, 68
Cualquier táctica más complicada en la que pensé tomó más bytes.
fuente