Fannkuch é um programa de benchmark clássico. O nome vem do alemão "Pfannkuchen" - panquecas - pela semelhança do algoritmo com as pilhas de panquecas. Uma sequência de números Fannkuch é formada da seguinte forma:
Tome uma permutação de {1 ..... n}, por exemplo: {4,2,1,5,3}. Pegue o primeiro elemento, aqui 4, e inverta a ordem dos 4 primeiros elementos: {5,1,2,4,3}. Repita isso até que o primeiro elemento seja 1, para que o lançamento não mude mais: {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3, 1,5}, {1,3,2,4,5}
Você deve escrever um programa ou função que calcule uma sequência do tipo Fannkuch para seqüências de caracteres alfabéticos. Em vez de usar números para indicar quantos elementos da lista devem ser invertidos a cada vez, a posição de uma letra no alfabeto deve ser usada. Por exemplo, um líder c
indica que você deve reverter a ordem dos 3 primeiros elementos, enquanto um líder a
indica que a sequência está completa.
Entrada
A entrada será fornecida como uma string via stdin ou como um argumento de função. A cadeia conterá entre 1 e 26 letras minúsculas distintas. Strings não conterão letras cujo índice equivalente faria com que o algoritmo Fannkuch invertesse mais elementos do que existem.
Resultado
Programas ou funções devem retornar ou imprimir para evitar a sequência de termos produzidos aplicando o algoritmo Fannkuch até que um líder a
seja encontrado, incluindo a sequência inicial. Por exemplo, se a entrada for bca
, você pode imprimir:
bca
cba
abc
Os resultados impressos podem usar qualquer separador - vírgulas, novas linhas etc. Qualquer escolha de espaço em branco é aceitável.
Como outro exemplo, se sua entrada for, eabdc
você poderá retornar:
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
Regras e Pontuação
Este é o código-golfe - o programa mais curto vence. As brechas padrão não são permitidas.
fonte
proc fcmp
por aqui.Haskell, 78 bytes
Uso:
f "eabdc"
->["eabdc","cdbae","bdcae","dbcae","acbde"]
.fonte
splitAt
- você pode reduzi-lo a 71 bytes!K5, 21 bytes
Economizou 5 bytes graças a @JohnE e outro byte, reorganizando uma expressão.
Pela primeira vez na terra, acho que o K venceu o CJam!
Versão de 27 bytes
fonte
a
, a string não muda.Haskell, 68
Qualquer tática mais complicada em que pensei ocupava mais bytes.
fonte