Fannkuch to klasyczny program testowy . Nazwa pochodzi od niemieckiego „Pfannkuchen” - naleśników - ze względu na podobieństwo algorytmu do przerzucania stosów naleśników. Sekwencja liczb Fannkucha jest tworzona w następujący sposób:
Weź permutację {1 ..... n}, na przykład: {4,2,1,5,3}. Weź pierwszy element, tutaj 4, i odwróć kolejność pierwszych 4 elementów: {5,1,2,4,3}. Powtarzaj tę czynność, aż pierwszy element będzie miał wartość 1, więc przerzucanie niczego więcej nie zmieni: {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3, 1,5}, {1,3,2,4,5}
Masz napisać program lub funkcję, która oblicza sekwencję podobną do Fannkucha dla ciągów znaków alfabetycznych. Zamiast używania liczb do wskazania, ile elementów listy należy przerzucić za każdym razem, należy użyć pozycji litery w alfabecie. Na przykład interlinia c
wskazuje, że należy odwrócić kolejność pierwszych 3 elementów, a interlinia a
wskazuje, że sekwencja jest zakończona.
Wejście
Dane wejściowe będą dostarczane jako ciąg przez stdin lub jako argument funkcji. Ciąg będzie zawierał od 1 do 26 wyraźnych małych liter. Ciągi nie będą zawierać liter, których równoważny indeks spowodowałby, że algorytm Fannkuch przerzucił więcej elementów niż istnieje.
Wynik
Programy lub funkcje powinny zwracać lub drukować na początku sekwencji terminów utworzonych przez zastosowanie algorytmu Fannkuch aż do a
napotkania wiodącego , w tym łańcucha początkowego. Na przykład, jeśli dane wejściowe to bca
, możesz wydrukować:
bca
cba
abc
W wydrukowanych wynikach można zastosować dowolny rozsądny separator - przecinki, znaki nowej linii itp. Dowolny wybór białych znaków jest dopuszczalny.
Jako kolejny przykład, jeśli twoje dane wejściowe to eabdc
możesz zwrócić:
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
Zasady i punktacja
To jest golf golfowy - wygrywa najkrótszy program. Standardowe luki są niedozwolone.
źródło
proc fcmp
.Haskell, 78 bajtów
Zastosowanie:
f "eabdc"
->["eabdc","cdbae","bdcae","dbcae","acbde"]
.źródło
splitAt
- możesz zmniejszyć go do 71 bajtów!K5, 21 bajtów
Zaoszczędzono 5 bajtów dzięki @JohnE i kolejny bajt poprzez zmianę kolejności wyrażeń.
Po raz pierwszy na ziemi myślę, że K pokonał CJam!
Wersja 27-bajtowa
źródło
a
, łańcuch się nie zmieni.Haskell, 68
Każda bardziej skomplikowana taktyka, o której myślałem, wymagała więcej bajtów.
źródło