Правила:
В этой игре вы начинаете на вершине прямоугольной сетки размером N x M, состоящей из стен и открытых пространств. Входные данные - это N строк из M символов, где a .
указывает открытое пространство, а a x
указывает стену. Ваша программа должна вывести наименьшее число K так, чтобы существовал путь из верхнего левого угла в нижний правый угол (без диагоналей), который пересекает K стен.
Например, с учетом ввода:
..x..
..x..
xxxxx
..x..
..x..
ваша программа должна вывести 2
.
Другие примеры:
вывод 4
:
xxxxx
x.x.x
x.x.x
x..xx
вывод 0
:
.xxxxxxxx
.x...x...
.x.x.x.x.
.x.x...x.
...xxxxx.
вывод 6
:
xx
xx
xx
xx
xx
Дополнительные лакомые кусочки:
Если это облегчает вашу жизнь, вы можете указать N и M в качестве параметров командной строки.
Дополнительный кредит, если вы можете заставить вашу программу распечатать путь в той или иной форме.
Ответы:
Рубин 1,9
(235)(225)(222)(214)Я не знаю, короче ли это, чем программа, основанная на Дейкстре, но я решил попробовать другой подход. Это использует регулярное выражение в цикле, чтобы отметить каждое пространство с минимальным количеством стен, необходимых для его достижения.
Ввод указывается в виде файла в командной строке, т.е.
Ungolfed:
источник
Perl 5,10 (164)
Очень похоже на решение Migimaru, только с этим дополнительным прикосновением Perl. 5.10 необходимо для
\K
вs///
.источник
Python
406378360348418 символовУпрощенная Дейкстра, так как ходы с весом находятся на
x
поле. Это делается в «волнах», сначала цикл с поиском.
полей, соприкасающихся с фронтом, и настройте их на тот же вес, а затем один раз найдитеx
поля, соприкасающиеся с фронтом, и установите их на+1
вес. Повторите, пока нет больше не посещаемых полей.В конце мы знаем вес для каждого поля.
Ввод указывается в виде файла в командной строке:
Обновление: печатает путь.
источник
Версия C ++ (
610607606584)Реализует алгоритм Дейкстры.
Un-golfed:
источник