Борода был английский пират в начале 18 - го века. Хотя он был известен тем, что грабил и захватывал корабли, он командовал своими судами с разрешения их экипажей. Нет сообщений о том, что он когда-либо причинял вред или убивал своих пленников.
Этот вызов в честь печально известной Черной Бороды и вдохновлен Международным Днем Разговора Как Пиратский День (19 сентября). Кроме того , обратная этой задачи с помощью Пирра .
Соревнование
Создайте программу, которая принимает карту сокровищ в качестве входных данных (состоит из символов, перечисленных ниже) и выводит ее направления.
вход
Все входы будут состоять из v
, >
, <
, ^
, пробела и один X
.
Вы можете предположить следующее:
карта никогда не будет зацикливаться или пересекать себя
начальная стрелка всегда будет самым нижним символом в крайнем левом столбце
всегда будет сокровище (
X
)
Пример ввода показан ниже.
>>v >>>>>>v
^ v ^ v
^ v ^ v<<
^ v ^ v
^ >>>>^ >>X
^
>>^
Вывод
На выходе должна быть ", "
строка с неограниченным количеством направлений. Ниже приведен правильный вывод с карты выше.
E2, N6, E2, S4, E4, N4, E6, S2, W2, S2, E2
Допускается один завершающий перевод строки или пробел.
Примеры
In:
>>>>>>>>>>>>>>>v
v
v
>>>>X
Out:
E15, S3, E4
In:
>>>>>>v
^ v
^ >>>>X
Out:
N2, E6, S2, E4
In:
X
^
^
^
Out:
N3
In:
>>>>>>v
^ v
^ v
v
>>>>>>X
Out:
N2, E6, S4, E6
In:
X
^
^
>^
Out:
E1, N3
In:
>X
Out:
E1
In:
v<<<<<
vX<<<^
>>>>^^
>>>>>^
Out:
E5, N3, W5, S2, E4, N1, W3
Счастливого международного разговора, как пиратский день!
Ответы:
CJam, 78 байт
Попробуйте онлайн .
объяснение
Основная идея здесь - найти самую длинную строку (мы назовем эту длину
T
), затем дополнить все строки одинаковой длиной и объединить их (это новая строкаU
). Таким образом, для перемещения по карте необходим только один счетчик. Сложение / вычитание1
означает перемещение вправо / влево по одной и той же строке, сложение / вычитаниеT
означает перемещение вниз / вверх на одну строку.Теперь пришло время настроить цикл.
Тело цикла использует таблицу поиска и eval, чтобы выбрать, что делать. В начале каждой итерации верхний элемент стека является текущей позицией. Под ним находятся все обработанные направления NSWE. В конце итерации новое направление помещается под позицией, и его копия используется в качестве условия для цикла. Ненулевые символы правдивы. Когда X встречается, 0 выдвигается как направление, заканчивая цикл.
Теперь стек выглядит следующим образом :
[directions 0 position]
. Давайте сгенерируем вывод.источник
CJam, 86 байт
Попробуйте онлайн
Объяснение:
источник
Javascript (ES6), 239 байт
Объяснение:
источник
JavaScript (ES6), 189
Попробуйте запустить приведенный ниже фрагмент в браузере, совместимом с EcmaScript 6.
Меньше гольфа
источник