Ваша цель - написать программу, которая создает случайную карту 10x10, используя 0
, 1
и 2
, и находит кратчайший путь от верхнего левого до нижнего правого, предполагая, что:
0 представляет поле травы: любой может ходить по нему;
1 представляет стену: вы не можете пересечь ее;
2 представляет портал: при входе на портал вы можете перейти на любой другой портал на карте.
Технические характеристики:
- Верхний левый элемент и нижний правый элемент должны быть 0 ;
- При создании случайной карты каждое поле должно иметь 60% шансов быть 0 , 30% - 1, а 10% - 2 ;
- Вы можете перемещаться в любом смежном поле (даже по диагонали);
- Ваша программа должна вывести карту и количество шагов по кратчайшему пути;
- Если нет правильного пути, ведущего к нижнему правому полю, ваша программа должна выводить только карту;
- Вы можете использовать любой ресурс, который захотите;
- Самый короткий код выигрывает.
Расчет шагов:
шаг - это фактическое движение; каждый раз, когда вы меняете поле, вы увеличиваете счетчик.
Выход:
0000100200
0100100010
1000000111
0002001000
1111100020
0001111111
0001001000
0020001111
1100110000
0000020100
9
code-golf
path-finding
maze
Vereos
источник
источник
Ответы:
GolfScript, 182 символа
Примеры:
источник
Математика (344)
Бонус: подсветка пути
Я создаю график всех возможных фильмов для соседних вершин и добавляю все возможные «телепорты».
источник
Mathematica,
208202 символовОсновываясь на решениях Дэвида Каррахера и Ибельтукова. И благодаря предложению Ибельтукова.
источник
n/n
вместоn/10
:)〚 〛
за скобки (это правильные символы юникода)Norm[# - #2] & @@ # < 2 || # \[Union] u == u &
Norm[# - #2] & @@ # < 2
означает, что расстояние между двумя точками меньше 2, поэтому они должны быть смежными.# ⋃ u == u
означает, что обе точки находятся в и.Питон 3, 279
Какой-то вариант Дейкстры. Гадкий, но играл в гольф столько, сколько мог ...
Пробный прогон
источник
Mathematica
316 279275Базовый объект - это массив 10x10 с приблизительно 60 0, 30 1 и 10 2. Массив используется для изменения 10x10
GridGraph
со всеми связанными ребрами. Те узлы, которые соответствуют ячейкам, содержащим 1 в массиве, удаляются из графика. Эти узлы, «содержащие 2», все связаны друг с другом. Затем ищется кратчайший путь между вершиной 1 и вершиной 100. Если такой путь не существует, возвращается карта; если такой путь существует, отображается карта и кратчайшая длина пути.Пробный прогон :
источник
Питон (1923)
Поиск в обратном направленииПо общему признанию не самый короткий или самый эффективный, хотя есть некоторая памятка, присутствующая.
источник
JavaScript (541)
Генерация графика происходит в первых пяти строках.
f
содержит поля,p
содержит порталы. Фактический поиск осуществляется через BFS.Пример вывода:
источник
Питон 3 (695)
Дейкстра!
Пример вывода:
источник
Python, 314
Это отвратительная реализация Bellman-Ford. Этот алгоритм O (n ^ 6)! (Что нормально для n = 10)
источник
print '\n'.join(map(str,a))
; Я сделалprint a
ради гольфа.r*10
имеет 100 элементов).