Или, возможно, это не настоящий лабиринт, но все же.
Правила:
Ввод является строкой две строки, состоящей из
*
,1
,x
иX
. Эта нить - лабиринт, через который нужно пройти. Строки имеют одинаковую длину .Вы можете взять ввод в виде строки с
,
(запятой) или любым удобным разделителем между этими двумя строками. Или вы можете взять обе строки в качестве отдельных аргументов вашей функции.Выход - это количество шагов, которые вы должны предпринять, чтобы выйти из строки (последний шаг - это шаг, который выводит вас из строки).
Вы начинаете в верхнем левом углу (верхняя линия), перед первым символом.
Для каждого шага вы двигаетесь вперед на один символ (от n-й до (n + 1) -й позиции ). Затем, в зависимости от характера, на которого вы наступаете, результат будет другим. Вот что делает каждый символ:
*
- ничего. Вы просто наступаете на это нормально.x
- как только вы наступите на него, переключите линию, но оставайтесь на том же горизонтальном расстоянии от начала. Например, вы вышли на третью позицию более высокой строки и встретили здесь нижний регистрx
. Затем вы сразу переходите на нижнюю линию, но снова на третью позицию.X
- переключить линию и перейти к следующей позиции. Пример там тот же, но вы также переходите с третьей на четвертую позицию (таким образом, вы находитесь на второй строке в четвертой позиции).1
- просто двигаться вперед еще на одну позицию.
Как только каждый персонаж выполняет свою работу, он заменяется пробелом и больше не «работает».
Примеры следуют.
Вход :
x *
Как сказано выше, вы начинаете перед первым символом первой строки. Первый шаг перемещает вас на букву,
x
и эта буква переключает вас на вторую строку. Букваx
больше не функционируетx
, но заменена на*
. Это будет более актуально в последних примерах. Вы сейчас на звёздочке в нижней строке, и она ничего не сделала для вас.Второй шаг продвигает вас вперед и вы выходите из струны, так что лабиринт завершен, и он занял 2 шага.
Выход
2
.Вход :
xX* x1*
1-й шаг : вы двигаетесь дальше
x
, что перемещает вас поx
нижней линии. Здесь следует правило, согласно которому используемый символ заменяется звездочкой. Затем вы возвращаетесь на первую строку, но ее большеx
нет, поскольку она была использована и стала звездочкой. Таким образом, вы безопасно перемещаетесь по этой звездочке, и шаг завершен (теперь вы находитесь на первой позиции первой строки).2-й шаг : вы двигаетесь дальше
X
, он подталкивает вас к нижней линии, а затем подталкивает вас вперед. Теперь вы находитесь на третьей позиции второй строки (звездочка), никогда не посещая вторую позицию (которая содержит1
).3-й шаг : вы двигаетесь вперед, выходя из строки.
Выход :
3
.
Тестовые случаи:
Входные данные:
*1* xxx
Выход:
3
. (потому что1
заставляет вас прыгать на третьей позиции). Там вы никогда не посещаете вторую строку, но это обязательная часть ввода.Входные данные:
*X*1*x x*1xx*
Выход:
4
.Входные данные:
1x1x ***X
Выход:
3
.Входные данные:
1*x1xxx1*x x*x1*11X1x
Выход:
6
.Входные данные:
xXXXxxx111* **xxx11*xxx
Выход:
6
.
источник
"\n\n"
это строка из двух строк ...1
, когда вы начинаете до 1-й строки, затем вы продвигаетесь вперед на один шаг, а затем вы заканчиваете лабиринт ...Ответы:
Улитки, 34 байта
Expanded:
Для пути, который занимает N шагов, программа находит одно успешное совпадение для каждого обхода: 0 шагов, 1 шаг, ..., N - 1 шаг.
источник
Хаскелл,
686665 байтфункция
#
принимает обе строки как отдельные параметры. Пример использования:"1x1x" # "***X"
->3
.Мы просто должны считать звезды
*
мы наступаем, плюс 1 за уход.Изменить: @feersum сохранил байт. Благодарность!
источник
a>'a'
вместоa=='x'
?JavaScript (ES6), 119
Меньше гольфа
Тестовое задание
источник
TSQL (sqlserver 2012+), 276 байт
Golfed:
Ungolfed:
скрипка
источник
JavaScript, 211 байт
Я думаю о создании версии, которая показывает каждый шаг, воспроизводимый после друг друга, отображаемый на веб-странице.
Используются больше байт , чем я надеялся при замене
x
с*
из - за JS непреложногоStrings
. Предложения по улучшению приветствуются, особенно с запасной частью.источник