Fannkuch ist ein klassisches Benchmark-Programm. Der Name kommt vom deutschen "Pfannkuchen", der die Ähnlichkeit des Algorithmus mit dem Umdrehen von Pfannkuchenstapeln beschreibt. Eine Fannkuch-Folge von Zahlen wird wie folgt gebildet:
Nehmen Sie eine Permutation von {1 ..... n}, zum Beispiel: {4,2,1,5,3}. Nehmen Sie das erste Element, hier 4, und kehren Sie die Reihenfolge der ersten 4 Elemente um: {5,1,2,4,3}. Wiederholen Sie dies, bis das erste Element eine 1 ist, damit das Spiegeln nichts mehr ändert: {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3, 1,5}, {1,3,2,4,5}
Sie müssen ein Programm oder eine Funktion schreiben, die eine Fannkuch-ähnliche Sequenz für Zeichenfolgen aus alphabetischen Zeichen berechnet. Anstatt Zahlen zu verwenden, um anzugeben, wie viele Elemente der Liste jedes Mal umgedreht werden sollen, sollte die Position eines Buchstabens im Alphabet verwendet werden. Ein vorangestellter Punkt bedeutet beispielsweise, c
dass Sie die Reihenfolge der ersten drei Elemente umkehren sollten, während ein vorangestellter a
Punkt angibt, dass die Sequenz abgeschlossen ist.
Eingang
Die Eingabe erfolgt als String über stdin oder als Funktionsargument. Die Zeichenfolge enthält zwischen 1 und 26 verschiedene Kleinbuchstaben. Strings enthalten keine Buchstaben, deren äquivalenter Index dazu führen würde, dass der Fannkuch-Algorithmus mehr Elemente spiegelt, als vorhanden sind.
Ausgabe
Programme oder Funktionen sollten die durch Anwendung des Fannkuch-Algorithmus erzeugte Abfolge von Begriffen zurückgeben oder drucken, bis ein führendes Zeichen a
einschließlich der Anfangszeichenfolge angetroffen wird. Wenn die Eingabe beispielsweise lautet bca
, können Sie Folgendes drucken:
bca
cba
abc
Für gedruckte Ergebnisse können alle sinnvollen Trennzeichen, Zeilenumbrüche usw. verwendet werden. Es kann ein beliebiges Leerzeichen gewählt werden.
Wenn Sie als weiteres Beispiel Folgendes eingeben, können eabdc
Sie Folgendes zurückgeben:
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
Regeln und Wertung
Das ist Code-Golf - das kürzeste Programm gewinnt. Standard-Regelungslücken sind nicht zulässig.
quelle
proc fcmp
rum.Haskell, 78 Bytes
Verwendung:
f "eabdc"
->["eabdc","cdbae","bdcae","dbcae","acbde"]
.quelle
splitAt
- Sie können es auf 71 Bytes reduzieren!K5, 21 Bytes
5 Bytes dank @JohnE und ein weiteres Byte durch Neuanordnen eines Ausdrucks gespart.
Zum ersten Mal auf der Welt, denke ich, hat K CJam geschlagen!
27-Byte-Version
quelle
a
die Zeichenfolge nicht ändert , wenn der erste Buchstabe ein ist .Haskell, 68
Jede kompliziertere Taktik, an die ich dachte, brauchte mehr Bytes.
quelle