Змеи выглядят так:
>>>v
@ ^ v
^ >>>^ v
^ v
^<<<<<<<<<
Змея может пересечь себя, как в этом случае:
@
^
>^>v
^<<
Чтобы кроссовер был действительным, символы с обеих сторон должны двигаться в одном направлении. Случай
@
>^v
^<
можно считать неясным и недействительным.
Результатом является строка, WASD
представляющая переход от головы к хвосту ( @
).
Учитывая змею, которая не отступает и не является двусмысленной, можете ли вы написать программу, которая будет выводить строку ходов, которые делает змея?
Это код-гольф, поэтому выигрывает самый короткий ответ!
Тестовые случаи:
(Примечание: @
можно заменить любым символом, не входящим в v^<>
)
Входные данные:
>>>>v
v
v<< @
v ^
>>>>>^
Выход: ddddssaassdddddww
Входные данные:
@>>v
^ v
^ v
^<<<
Выход: dddsssaaawww
Входные данные:
>>>v
v @
v ^
>>>>v ^
>>>>^
Выход: dddsssddddsddddwww
Входные данные:
@<< v
^ v
v<^<<
v ^
>>^
Выход: ssaaaassddwwwwaa
Входные данные:
@v<v
^v^v
^v^<
^<
Выход: ssawwasssawww
Ответы:
Java,
626539536529 байт-87 байт, сохранив несколько во многих местах. Спасибо г-ну Public за то, что указал на некоторые.
-3 байта, потому что я не могу удалить все пробелы с первой попытки (спасибо mbomb007)
+8 байтов, чтобы исправить для этого случая:
-15 байт при объявлении переменной с фронтальной загрузкой
Читаемая версия:
Принимает строку как
v @\n>>>^
. Создает путь, начинающийся с каждой координаты, а затем возвращает самый длинный. Ожидание, необходимое для перекрывающихся путей, было самой сложной частью.источник
Руби, 217
Это начинается с
@
и идет назад, ища соседей, которые указывают на текущую позицию (z
). Чтобы выбрать правильный путь на перекрестках с 4 путями, предпочтение отдается соседям, указывающим в одном направлении (max_by{...}
). Если непосредственные соседи не найдены, это предполагает, что, должно быть, был переход, и достигает одного уровня за один раз, пока он не находит один (until n
иc+=1
). Этот процесс повторяется для количества сегментов тела (не включая голову) (.scan(/\w/){...}
).Тестовый пример, который я добавил в головоломку, постоянно приводил меня в замешательство, поэтому я перешел с 182 символа на 218. Все эти дополнительные персонажи следили за тем, чтобы мои горизонтальные перемещения не переходили в следующие / предыдущие строки. Интересно, смогу ли я справиться с этим лучше?
Ungolfed:
источник