Давным-давно, когда я проводил больше времени за игрой в RPG, одной из проблем, с которой сталкивались некоторые игроки, было отслеживание движения группы и составление правильной карты. Итак, я пришел с идеей, чтобы проверить, как вы, ребята, решаете эту проблему.
Задача состоит в том, чтобы написать функцию, которая принимает в качестве входного параметра список направлений (передается в качестве структуры по вашему выбору) ^v<>
, отображать карту подземелья. В примере для ввода: >>>vvv<<<^^^
вывод будет:
+----+ +----+
| | |>>>v|
| ++ | |^++v|
| ++ | because |^++v|
| | |^<<<|
+----+ +----+
Testcases
>>>>>>vvvvv<<<<^^^>>v
+-------+
| |
+-+---+ |
| | |
| + | |
| +-+ |
| |
+-----+
^^^^^vvv<<<^^vv>>>>>>>>vv>><<^^^^v>>>>v^<^
+-+
+-+| | +-++-+
| || | | ++ ++
| ++ +-+ |
| +-+ |
+--+ +-+ +-+-+
| | | |
+-+ +---+
Так как это вызов гольф-кода, выигрывает самый короткий код.
Счастливого гольфа.
РЕДАКТИРОВАТЬ Извините за позднее редактирование, у меня не было много времени в последнее время.
Карта генерируется на основе движения. Он должен содержать только коридоры, которые посещали во время прогулки. Следовательно, создание одной большой комнаты не будет правильным ответом.
На карте есть три действительных символа:
|
вертикальная стена|
горизонтальная стена+
пересечение вертикальной и горизонтальной стен.
Максимальная длина пути составляет 255 символов (но если вы можете, не ограничивайте себя).
Больше тестовых случаев:
><><><><
+--+
| |
+--+
>^<v
+--+
| |
| |
+--+
Надеюсь теперь все ясно.
vvv>>^^^<<
будет производить (пересекает? Трубы?)Ответы:
Javascript (ES6),
261254243 байтаJSFiddle
источник
return
, заменив;
с,
и{}
с()
for
цикл, который не может быть встроен таким образом.{
сeval("
и}
с ,")
чтобы удалить возвратные codegolf.stackexchange.com/a/80967/41042'\\n'
если бы я это сделал. Если я считаю правильно, это на самом деле приводит к +1 байт. Или есть лучший способ вставить разрыв строки в Eval?\n
строки шаблона поддерживают буквально новые строки, но это все равно оставит его при том же количестве байтов. О, хорошоC 246 байт
Принимает ввод как отдельные символы, например:
Или, что более удобно, этот (намеренно без кавычек!) Формат:
Или для (довольно неэффективного) случайного ввода:
И, наконец, использование
awk
для обрезки результата означает, что мы можем получить гораздо больше:Выходы в стандартный вывод. Используется тот факт, что для карты разрешено заполнение (создается карта с длиной ребра 2 * n + 1, в которой конечная позиция находится посередине).
Сломать
Это работает, перебирая аргументы в обратном направлении и двигаясь в обратном направлении. На самом деле он использует тот факт, что arg 0 - это имя программы; Неважно, какое это имя, но оно позволяет нам посещать как начальную, так и последнюю ячейку (а также все промежуточные ячейки) без специальной обработки.
источник