Соревнование
Самый короткий код по количеству символов, чтобы помочь роботу найти котенка за наименьшее количество шагов.
Гольфисты, это время кризиса - Котенок пропал без вести, и работа Робота - найти его! Робот должен добраться до котенка по кратчайшему пути. Однако на пути Робота много препятствий, и ему нужно, чтобы вы запрограммировали решение для него.
Раньше у робота была программа, делающая это за него, но эта программа была потеряна, и у робота нет резервной копии :(.
Время выполнения робота не самое лучшее, и наименьшее количество символов, которое робот должен прочитать из исходного кода, меньше времени, которое он потратит на обработку, а это значит, что котенок будет найден быстрее!
Память робота содержит карту местоположения, в котором он находится в данный момент: верхняя часть представляет север, нижняя - юг, правая - восток, а левая - запад. Робот всегда находится в прямоугольной комнате неизвестного размера, окруженной стенами, представленной на #
его радиолокационной карте. Области, в которые может ходить робот, представлены пространством .
Радар робота также сканирует множество препятствий в комнате и отмечает их различными буквами ASCII. Робот не может преодолеть эти препятствия. Радар пометит Киттена как специальный символ ASCII K
, в то время как местоположение робота будет отмечено с помощью R
.
Навигационная система робота работает следующим образом: он может понять пару направлений и количество единиц движения, к которым он должен идти - например, N 3
означает «перейти на север 3 единицы движения». Карта радара робота сделана так, что единицей движения является один символ ASCII. Робот может двигаться только в 4 направлениях и не может двигаться по диагонали.
Ваша задача, храбрый котенок-спасатель, - прочитать радиолокационную карту робота один раз и вывести наименьшее количество направлений с наименьшим расстоянием перемещения юнита. Робот гарантированно имеет хотя бы один путь к котенку.
Чтобы робот не тратил время на выполнение работающей со сбоями программы, которая не поможет роботу найти котенка, я призываю вас, отважный хранитель котят, использовать этот вывод из прошлой программы робота, чтобы не тратить время на поиск котенка!
Контрольные примеры
Input:
######################
# d 3 Kj #
# #
# R #
# q #
######################
Output:
E 13
N 2
Input:
######################
# d r 3 Kj #
# p p #
# T X #
# q s t #
# #
# R o d W #
# #
# g t U #
# #
######################
Output:
N 1
E 10
N 4
E 2
Input:
######################
# spdfmsdlwe9mw WEK3#
# we hi #
# rdf fsszr#
# sdfg gjkti #
# fc d g i #
# dfg sdd #
# g zfg #
# df df #
# xcf R#
######################
Output:
N 1
W 9
N 5
E 4
N 1
E 4
N 1
Количество кодов включает в себя ввод / вывод (т.е. полную программу).
источник
Ответы:
C ++
1002899799 символовПримечание требует использования C ++ 0x для устранения пробела между>> в шаблонах.
Он находит маршрут с минимальным количеством поворотов.
Это
Dijkstra's Algorithm
для решения проблемы кратчайшего пути.Чтобы различать несколько маршрутов одинакового размера, длинная прямая линия имеет меньший вес, чем несколько коротких (это благоприятствует маршрутам с меньшим количеством поворотов).
В более читаемой форме:
источник
Scala 2.8 (451 символов)
... но это не решает связи в пользу наименьшего количества направлений (хотя и находит наименьшее количество шагов).
Scala 2.8, 642 символа, правильно решает связи;
Он обнаружил более короткий путь для второго примера, чем тот, который приведен в задаче:
источник
Python 2.6 (504 символа)
источник
Python 2.6 (535 символов)
Распаковывает в строго неправильно обработанную A * реализацию. Читает stdin. Ищет решения с минимальным общим расстоянием. Разрывает связи, предпочитая минимальное количество направлений. Списки перемещаются в стандартный вывод. Находит котят.
Распаковано :
В некоторых местах источник был вручную защищен от гольфа, чтобы получить сжатое представление меньшего размера. Например, был развернут цикл for по направлениям компаса.
источник
c ++ - 681 необходимый символ
Сначала он заменяет все препятствия на карте на
#
s (и изменяет значенияK
иR
, чтобы оставить запас в пространстве символов для очень длинных путей. Затем он набрасывает на карте. Итерационный процесс отмечает все последовательно доступные квадраты до тех пор, пока может добраться до котенка за один ход. После этого используется та же самая процедура проверки доступности, чтобы найти строку положений, которые приводят к началу в минимальных инструкциях. Эти инструкции загружаются в строку путем предварительного ожидания, так что они печатать в правильном порядке.Я не собираюсь играть в гольф дальше, поскольку он не разрешает должным образом связи и не может быть легко адаптирован для этого.
Это терпит неудачу на
производства
Более или менее читаемая версия:
источник
Рубин - 539 символов
Может быть сделано с большим количеством улучшений, но это работает для кратчайших шагов, а также указаний.
источник
Рубин - 648 символов
Еще один, который не проходит проверку наименьшего числа направлений, так как я не могу придумать простой способ вставить его в A *.
источник