Правила
Башни Ханоя - загадка, и если вы не очень хорошо знакомы с этим, вот как это работает:
Поле игры состоит из 3 стержней и x количество дисков, каждое из которых больше, чем предыдущее. Эти диски могут быть помещены на стержень с этими ПРАВИЛАМИ:
- только один диск может быть перемещен сразу, и его нужно переместить в верхнюю часть другого стержня.
- диск должен быть взят с верха стержня
- диск можно перемещать где-то, ТОЛЬКО, если самый верхний диск на целевом стержне больше, чем тот, который нужно переместить.
И, наконец, игровое поле STARTS выглядит следующим образом:
- стержень с x дисками, отсортированный так, что наибольший находится на дне, а самый маленький в верхней части
- пустой стержень
- пустой стержень
ЦЕЛЬ игры состоит в том, чтобы переместить исходный "стопку" дисков на другой стержень, то есть - поместить все диски на другой стержень, так что (снова) наибольшее находится на нижний и наименьший в верхней части
Реализация
ВАША цель состоит в том, чтобы сделать программу на выбранном вами языке программирования, которая принимает вход (описанный ниже) и выводит шаги, необходимые для решения этой задачи.
Как всегда, постарайтесь сделать его как можно короче.
Ввод
Пример ввода:
4-3,7-6-5,2-1
Ввод - это строка, состоящая из трех частей, разделенных запятыми. Детали представляют собой список дисков на каждом из трех стержней. Они также разделены, на этот раз с дефисами (-), и каждая подчасти является числом, чем больше число, тем больше будет диск.
Итак - для указанного выше ввода это будет визуальное представление:
. . .
| =====|===== |
===|=== ======|====== =|=
====|==== =======|======= ==|==
ROD 1 ROD 2 ROD 3
Выход
Как вы можете видеть в приведенном выше представлении - самая левая часть ввода - это стержень номер один, середина - это стержень номер два, а последний - стержень № 3.
Результат вашей программы должен выглядеть следующим образом:
12,23,31,12,23,13
Список номеров, разделенных запятыми, определяющими стержень, из которого должен быть извлечен диск, и стержень, на который должен быть надет диск. Есть только 3 стержня, поэтому есть всего 6 возможных комбинаций (потому что диск должен быть перемещен на другой стержень, а не один):
12
13
21
23
31
32
Примечания
Ввод не должен описывать поле в "исходном" состоянии - он может быть разрешен в середине.
Ваша программа НЕ может выдавать нулевой вывод. Если входной сигнал IS находится в исходном состоянии, просто установите диски на РАЗЛИЧНЫЙ стержень.
Вход может содержать пустой стержень (ы), например:
2-1,3,
,,1
4-3,,2-1
Если вход не отформатирован таким образом, ваша программа может создавать поведение undefined. Таким образом, он может, если вход недействителен (например, больший диск на меньшем, отсутствующий диск, неразрешимый). Вход всегда будет действительным.
Удостоверьтесь, что решение работает как можно быстрее (как можно меньше поворотов), то есть не тратьте обороты на "12,21,12"...
Тестирование
Итак, я подготовил для вас эту маленькую вспышку, с помощью которой вы можете проверить, было ли у вашей программы хорошее решение, не записывая ни слова или что-то в этом роде.
Вот он: Hanoi AlgoTest (подождите, пока он загрузится, а затем обновится - Dead link: |)
Чтобы использовать его, вставьте ввод в программу в поле INPUT и результат, полученный вашей программой, в поле ПРОЦЕСС. Он будет запускать симуляцию со скоростью, которую вы также можете изменить, с визуальным представлением, распечатав любые ошибки в нижней части.
Надеюсь, что это поможет.