Fannkuch è un classico programma di benchmark. Il nome deriva dal tedesco "Pfannkuchen" - pancakes - per la somiglianza dell'algoritmo con il lancio di pile di pancake. Una sequenza di numeri Fannkuch è formata come segue:
Prendi una permutazione di {1 ..... n}, ad esempio: {4,2,1,5,3}. Prendi il primo elemento, qui 4, e inverti l'ordine dei primi 4 elementi: {5,1,2,4,3}. Ripeti fino a quando il primo elemento è 1, quindi il lancio non cambierà più nulla: {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3, 1,5}, {1,3,2,4,5}
Devi scrivere un programma o una funzione che calcola una sequenza simile a Fannkuch per stringhe di caratteri alfabetici. Invece di usare i numeri per indicare quanti elementi dell'elenco dovrebbero essere capovolti ogni volta, dovrebbe essere usata la posizione di una lettera nell'alfabeto. Ad esempio, un lead c
indica che è necessario invertire l'ordine dei primi 3 elementi, mentre un lead a
indica che la sequenza è completa.
Ingresso
L'input verrà fornito come stringa tramite stdin o come argomento di funzione. La stringa conterrà tra 1 e 26 lettere minuscole distinte. Le stringhe non conterranno lettere il cui indice equivalente provocherebbe il capovolgimento dell'algoritmo Fannkuch di più elementi di quelli esistenti.
Produzione
I programmi o le funzioni dovrebbero tornare o stampare per stdout la sequenza di termini prodotti applicando l'algoritmo Fannkuch fino a quando non a
viene rilevato un inizio, inclusa la stringa iniziale. Ad esempio, se l'input è bca
, è possibile stampare:
bca
cba
abc
I risultati stampati possono utilizzare qualsiasi virgola di separazione ragionevole, newline, ecc. Qualsiasi scelta di spazi bianchi è accettabile.
Come altro esempio, se il tuo input è eabdc
che potresti restituire:
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
Regole e punteggio
Questo è code-golf : vince il programma più breve. Le scappatoie standard non sono ammesse.
proc fcmp
queste parti.