Это «стрелка лабиринта»:
v <
> v
> ^
> v
^ < *
В *
отмечает место , где вы закончите. Ваша цель - найти, где начинается лабиринт (следовательно, обратный лабиринт). В данном случае это первый >
на второй строке.
v------<
S-+---v |
| >--^
>-+-------v
^ < *
Обратите внимание, что все стрелки должны быть использованы. Также обратите внимание, что вы можете предположить, что строки будут дополнены пробелами равной длины.
Ваша программа должна вводить лабиринт любым разумным способом (стандартный, из файла, окна сообщения и т. Д.), Однако лабиринт должен быть полностью неповрежденным. Например, вы не можете вводить строки, разделенные запятыми; вход должен быть точно лабиринт.
Вы должны вывести начало лабиринта любым разумным способом. Например, вы могли бы
- вывести координаты старта
- выведите весь лабиринт со стрелкой начала, замененной на
S
- вывести весь лабиринт со всеми стрелками, кроме удаленной стартовой (пробел не поврежден!)
- и т.п.
До тех пор, пока по выходным данным вы можете определить, какая стрелка является стрелкой начала, все в порядке. Например, вывод
"0"
"2"
все в порядке, независимо от новых строк и кавычек, потому что вы все еще можете сказать, где было начало.
Это код-гольф , поэтому выиграет самый короткий код в байтах.
>v^
>
v
^
Ответы:
GolfScript, 55 байт
Онлайн демо
Предполагается, что все входные строки заполнены пробелами одинаковой длины и разделены символами новой строки. Выводит байтовое смещение стартовой стрелки от начала входной строки (например,
12
для примера лабиринта в задании).В частности, эта программа находит смещения в байтах всех стрелок, которые не имеют других стрелок, указывающих на них (при условии, что все стрелки указывают на стрелку или цель; странное поведение может произойти, если это не так). По умолчанию, если есть несколько таких стрелок (которые, согласно спецификации, не должны быть возможны при правильном вводе), их смещения будут просто объединены в выводе. Если вы хотите, вы можете добавить
n*
в программу, чтобы они разделялись символами новой строки.Де-гольф версия с комментариями:
источник
w
.z
чтобы&
избежать необходимости дополнительного места, хотя. ОТО,?~.~)
делает довольно хороший смайлик. :-)GolfScript (
101100 байт)Выходные данные находятся в форме,
[[x y]]
где обе координаты основаны на 0.Онлайн демо
Обработка происходит в два этапа: первый этап превращает лабиринт в массив
[x y dx dy]
кортежей; вторая фаза отображает каждую стрелку / звездочку на стрелку / звездочку, на которую она указывает. (Звездочки считаются указывающими на себя). По определению проблемы, есть ровно одна стрелка, которой нет в результате этой карты, и это решение.источник
;'STUFF'
имитирует подачуSTUFF
через стандартный ввод.Mathematica
491323Разгромленный с комментариями
Процедура начинается с финиша ("*"), находит стрелку, которая указывает на нее, и так далее, пока не достигнет начала.
Функция, f [лабиринт].
предшественник [{Flatten [{aboveMe [loc, a], bottomMe [loc, a], rightOfMe [loc, a], leftOfMe [loc, a]}, 2], a, Prepend [список, loc]}]]
Golfed
пример
Лабиринт. Каждая упорядоченная пара содержит строку и столбец ячейки. Например, {2, 3} обозначает ячейку в строке 2, столбец 3.
вход
Вывод : путь от начала до конца.
источник
Я думаю, что нашел хороший способ решить эту проблему, но я случайно проиграл в гольф. Я думаю, что это может быть ПУТЬ короче, поэтому я собираюсь объяснить мою идею, чтобы другие могли использовать ее, если сочтут ее хорошей.
Если нужно использовать каждую стрелку, тогда все стрелки будут указываться другой стрелкой, кроме одной, которая является нашим решением.
Это означает, что нам на самом деле не нужно играть в лабиринт задом наперед, но, начиная с верхнего левого, нам просто нужно проверить ближайшую стрелку с указанием для каждого. Это настоящий болеутоляющий для больших лабиринтов (так как вам не нужно проверять все четыре направления, а только одно).
Вот мое решение:
PHP, 622 байта
Ungolfed:
источник
PHP - 492 байта
Это решение предполагает, что карту можно найти в локальной переменной
$m
. Самый короткий метод, который у меня есть для передачи через$_GET
:$m=$_GET['m'];
в 14 байтах. Для ясности чтения ниже представлена версия без разметки с картой в переменной.источник
К,
281277258Вот более ранняя, не одураченная версия
Возвращает начальную точку как
x y
с 0 на основе индексов.источник
Python 422
Вход находится в файле с именем
m.txt
. Вывод есть,(x, y)
но если вы измените последний оператор печати наprint g
, вывод будет список, как[(x, y), (x, y), ...]
со всеми шагами, чтобы добраться от конца до начала.источник