Fannkuch - это классическая тестовая программа. Название происходит от немецкого "Pfannkuchen" - блины - для алгоритма, похожего на переворачивание стопок блинов. Последовательность чисел Фаннуча формируется следующим образом:
Возьмем перестановку {1 ..... n}, например: {4,2,1,5,3}. Возьмите первый элемент, здесь 4, и измените порядок первых 4 элементов: {5,1,2,4,3}. Повторяйте это до тех пор, пока первый элемент не станет 1, поэтому переворачивание больше ничего не изменит: {3,4,2,1,5}, {2,4,3,1,5}, {4,2,3, 1,5}, {1,3,2,4,5}
Вы должны написать программу или функцию, которая вычисляет последовательность, похожую на Фаннуч, для строк буквенных символов. Вместо того, чтобы использовать числа, чтобы указать, сколько элементов списка нужно перевернуть каждый раз, следует использовать положение буквы в алфавите. Например, ведущий c
будет означать, что вы должны изменить порядок первых 3 элементов, в то время как ведущий a
указывает, что последовательность завершена.
вход
Ввод будет предоставлен в виде строки через стандартный ввод или в качестве аргумента функции. Строка будет содержать от 1 до 26 различных строчных букв. Строки не будут содержать букв, чей эквивалентный индекс приведет к тому, что алгоритм Fannkuch перевернет больше элементов, чем существует.
Выход
Программы или функции должны возвращать или печатать, чтобы выводить последовательность терминов, полученных с помощью алгоритма Фаннуча, до тех пор, пока a
не встретится ведущий , включая начальную строку. Например, если введено bca
, вы можете напечатать:
bca
cba
abc
В распечатанных результатах могут использоваться любые разумные разделители - запятые, переводы строк и т. Д. Любой выбор пробела является приемлемым.
В качестве другого примера, если вы введете это, eabdc
вы можете вернуть:
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
Правила и оценки
Это код-гольф - выигрывает самая короткая программа. Стандартные лазейки запрещены.
источник
proc fcmp
.Haskell, 78 байт
Использование:
f "eabdc"
->["eabdc","cdbae","bdcae","dbcae","acbde"]
.источник
splitAt
- вы можете уменьшить его до 71 байта!К5, 21 байт
Сохранено 5 байтов благодаря @JohnE и еще один байт путем перестановки выражения.
Впервые на земле, я думаю, K победил CJam!
27-байтовая версия
источник
a
, строка не изменится.Хаскелл, 68
Любая более сложная тактика, о которой я думал, занимала больше байтов.
источник