посылка
Так что недавно я был на полчаса раньше, чем на прием, и решил подождать снаружи. Я также решил, что было бы странно, если бы я просто стоял неподвижно перед домом. Поэтому я решил быстро прогуляться в пределах ограниченного пространства. Я также пришел к выводу, что если бы я начал ходить по кругу, это сделало бы очевидным, что я слонялся без дела. Поэтому я был вдохновлен на создание своего первого соревнования Code Golf.
Спецификация
Вам будет предоставлен список, карта области, которая будет содержать либо, " "
либо "#"
, которые представляют свободные пространства и препятствия в некотором роде. Свободные места могут пересекаться только один раз, и пересечение занимает 1 минуту. Ваша начальная позиция будет обозначена в "@"
соответствии с традицией roguelike, и цель будет представлена с, "$"
потому что это то, что вы собираетесь потерять там. Вам также дадут целое число, которое будет представлять, сколько минут вы должны потратить, прежде чем не будет казаться, что вы вторгаетесь. Когда вы приземлитесь на"$"
, это должно было быть точное количество минут (поэтому, если вы выполняли обратный отсчет, это должно быть 1 на соседней плитке и 0 на плитке). Всегда будет возможность добраться до места назначения. Ваша программа или функция должна будет вернуть список, показывающий кратчайший путь с помощью <,>, ^ и v, чтобы представить четыре возможных направления.
Примеры
Входные данные:
[[" ", " ", " ", " "],
["@", " ", " ", "$"],
[" ", " ", " ", " "],
[" ", " ", " ", " "]]
а также
5
Ouput:
[[">", ">", ">", "v"],
["^", " ", " ", "$"],
[" ", " ", " ", " "],
[" ", " ", " ", " "]]
Входные данные:
[[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "],
["@", "#", " ", "$", " "],
[" ", " ", " ", " ", " "],
[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "]]
а также
7
Выход:
[[" ", "#", " ", " ", " "],
[" ", "#", ">", "v", " "],
["v", "#", "^", "$", " "],
[">", ">", "^", " ", " "],
[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "]]
Входные данные:
[[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "],
["@", "#", " ", "$", " "],
[" ", " ", " ", " ", " "],
[" ", "#", " ", " ", " "],
[" ", "#", " ", " ", " "]]
а также
17
Выход:
[[" ", "#", " ", "v", "<"],
[" ", "#", " ", "v", "^"],
["v", "#", " ", "$", "^"],
[">", ">", "v", ">", "^"],
[" ", "#", "v", "^", "<"],
[" ", "#", ">", ">", "^"]]
правила
- Применяются стандартные лазейки
- Каждая плитка должна быть перемещена только один раз
- Точное количество времени должно быть проведено на доске
- В случае нескольких путей должен отображаться только один путь
- Это вопрос игры в гольф, поэтому выигрывает самый короткий ответ
- В соответствии с вопросом user202729 в комментариях, вы можете принять правильные данные.
Добавить комментарий, если требуется дальнейшее уточнение
источник
Ответы:
JavaScript (ES6), 171 байт
Принимает ввод в синтаксис карри
(a)(n)
. Выходы путем изменения входной матрицы.Попробуйте онлайн!
комментарии
источник
Python 2 ,
310256 байтСпасибо @cairdcoinheringaahing за
except:0
-3 байтаСпасибо @Mnemonic за -8 байтов
Спасибо @JonathanAllan за -3 байта
Спасибо @ovs за -5 байтов
Попробуйте онлайн!
Некоторое объяснение:
try-except
используется для обеспечения того, чтобыx
иy
координаты, и координаты находились в границах. Исключение будет поднят при доступе кG[y][x]
. Python слишком хорош и отрицательные индексы приемлемы, поэтому проверкаx>-1<y
добавлена.T=[r[:]for r in G]
используется для создания копииG
по значениям~-i/2
и~-(i^2)/2
используются для генерации пар(-1, 0), (0, 1), (0, -1), (1, 0)
, которые используются для перемещения в сетке (путь должен быть еще короче!)R+=[G]*(0==c<'$'==G[y][x])
проверьте, что'$'
достигнуто требуемое количество шагов.R
используется для получения этого результата от рекурсивных вызовов функций.for i,y in enumerate(G):"@"in y>S(y.index("@"),i,G,L,R)
Найденоx
иy
из'@'
во входной и вызове функцииS
.print R[0]
R
может содержать более одного решения, поэтому выводите только сначалаисточник
if G[y][x]=='$':
наif'$'==G[y][x]:
.R+=(G[y][x]=='$')*(c==0)*[G]
на другой байт.if(x>-1<y)*(G[y][x]in' @'):
y+cmp(i%2,i/2)
будетy+~-(i^2)/2
; там может быть еще короче.Python 2 ,
264261251249 байтПопробуйте онлайн!
источник