Имея лабиринт на stdin и точку входа, напишите программу, которая печатает путь к выходу на stdout. Любой путь является приемлемым, если ваша программа не генерирует тривиальный путь (проходящий через каждую точку в лабиринте) для каждого лабиринта.
На входе стены отмечены символом a, #
а точка входа - символом a @
. Вы можете использовать любые символы для рисования лабиринта и пути в выводе, если они все различны.
Вы можете предположить, что:
- Точки входа и выхода находятся по краям ввода
- Каждая строка ввода имеет одинаковую длину
- Лабиринт разрешим и не имеет циклов
- Есть только одна точка выхода
Кратчайшее решение по количеству символов (Unicode) побеждает.
Примеры
(обратите внимание, что входы дополняются пробелами)
####
# #
@ #####
# #
#
#######
####
# #
@*#####
#* #
#******
#######
### ###################
### # #
## ######### # #
# ##### #
############### #@##
###*###################
###*********#*********#
## *#########* # *#
# *********** #####**#
############### #@##
code-golf
path-finding
maze
Lowjacker
источник
источник
Ответы:
Ruby 1.9, 244 символа
Вывод для двух примеров:
Редактирование:
источник
ANSI C (
384373368 символов)Вот моя попытка Си. Скомпилировано и запущено на Mac OS X.
Пример вывода для пары тестов:
Ограничения: Работает только для лабиринтов длиной до 1000 символов, но это можно легко увеличить. Я просто выбрал произвольное число, а не беспокоить malloc / remalloc.
Кроме того, это самый загруженный мной код, который я когда-либо писал. 19 предупреждений, хотя с подсветкой кода XCode это выглядит еще больше. : D
РЕДАКТИРОВАТЬ: Отредактировано и протестировано для удаления int из main, для использования ~ вместо! = EOF и putchar вместо printf. Спасибо за комментарии!
источник
int
" передmain
и сохраните 4 символа. Также используйтеputchar(*(s-1))
вместо того,printf("%c",*(s-1))
чтобы сохранить еще 4.0xA
на10
и!=
на^
.~
оператор для проверки EOF:while(~(c=getchar())
Python, 339 символов
Создает кратчайший путь через лабиринт.
Вывод для примера лабиринтов:
источник
Питон -
510421 символовисточник
*
в правом нижнем углу, в первом тестовом случае (Python 2.6.1). Есть предположения?print b,r
и наprint (i,j)
, что я полагаю , были для отладки :)Python 3 , 275 байт
Попробуйте онлайн!
Порт моего ответа Найти кратчайший маршрут на дороге ASCII .
Используется
'#'
для начала,'*'
для конца,'@'
для стены и' '
для пустого пространства. В этом случае функцияq
является вспомогательной функцией, которая возвращает одномерный массив с кратчайшим путем в лабиринте. Функциюf
можно сократить на 4 байта, не назначая переменнуюs
. Это невероятно неэффективно и, скорее всего, истечет время ожидания, так как вызывает функцию поиска пути для каждого персонажа в лабиринте.источник