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
вказує на те, що послідовність завершена.
Вхідні дані
Введення надається у вигляді рядка через stdin або як аргумент функції. Рядок буде містити від 1 до 26 різних малих літер. Рядки не містять букв, еквівалентний індекс яких призведе до того, що алгоритм Fannkuch переверне більше елементів, ніж існує.
Вихідні дані
Програми або функції повинні повертати або друкувати, щоб викреслити послідовність термінів, створених за допомогою застосування алгоритму Fannkuch, поки a
не зустрінеться ведучий , включаючи початковий рядок. Наприклад, якщо введення є bca
, ви можете надрукувати:
bca
cba
abc
Для друкованих результатів можна використовувати будь-які розумні роздільники, коми, нові рядки тощо. Будь-який вибір пробілу є прийнятним.
Як інший приклад, якщо ви введете дані, eabdc
ви можете повернутись:
("eabdc"
"cdbae"
"bdcae"
"dbcae"
"acbde")
Правила та підрахунок балів
Це код-гольф - виграє найкоротша програма. Стандартні лазівки заборонені.
proc fcmp
.