Вызов
Вы дали карту другу, который выглядит примерно так:
|
/
|
/
|
\
|
\
D
Простая карта, которая начинается сверху и заканчивается снизу. К сожалению, твой друг не понимает этого. Можете ли вы расшифровать карту, чтобы он мог ее прочитать?
вход
Ввода представляет собой строку символов , состоящих из |
, /
, \
, D
, ^
, Y
, (пробел) и новой строки.
|
говорит остаться в той же колонке.\
приказывает перейти в колонку вправо и вниз 1./
приказывает перейти к колонке влево и вниз 1.D
отмечает место назначения.^
(если присутствует) говорит о расщеплении в пути.Y
(если присутствует) говорит о воссоединении путей. Относись к этому как к|
.
Ввод будет организован таким образом, чтобы он составлял своего рода путь:
|
|
\
|
^
/ \
/ |
D |
Между двумя путями всегда будет пробел, и все пути либо воссоединятся, либо достигнут последней строки ввода. На карте будет только один сплит. Нет ограничений на длину входной карты. Там никогда не будет более двух путей.
Выход
Вывод должен быть строкой направлений.
- « L » должны сообщить своему другу , чтобы двигаться L EFT и принять 1 шаг вперед.
- « R » должен сказать своему другу , чтобы переместить R IGHT и принять 1 шаг вперед.
- « F » должен сказать вашему другу, чтобы он сделал шаг вперед.
Для входного примера карты результат будет следующим:
F F L F R R R
Обратите внимание, что ваш друг начинает сверху и вниз. Дайте указания с его точки зрения. Для экземпляра «^» ваша программа должна иметь возможность выбрать путь, который ведет к месту назначения (D). Если два пути рекомбинируют, ваша программа должна выбрать самый прямой путь (тот, который имеет наибольшее количество |
s), по которому нужно следовать. Направления должны быть разделены пробелами, и должны заканчиваться на D .
Примеры
вход
|
|
\
\
^
/ |
| |
\ |
\ \
\ \
\ /
Y
D
Выход
F F L L L F F F L L R F
Поскольку крайний левый путь содержит только 1 |
, мы используем крайний правый путь с 3.
вход
\
|
/
|
\
|
/
D
Выход
L F R F L F R
вход
/
\
/
\
^
\ \
D \
Выход
R L R L R L
Другие детали
- Это кодовый гольф, поэтому выигрывает человек с самым коротким кодом к следующей среде, 19 августа.
- Конструктивная обратная связь приветствуется и высоко ценится.
- Частично вдохновлен картой скрытых сокровищ
- Не стесняйтесь менять название на что-то более креативное.
- Если вы найдете ошибки, которые я сделал, исправьте их.
- И конечно, веселиться.
Спасибо!
Возможно, немного поздно, но UndefinedFunction - победитель кодирования в JavaScript! Спасибо всем кто зашел. Другие записи не принимаются.
L L
, что я думаю, должно бытьL L L
. Пример с по-Y
прежнему имеет1
в конце, и, похоже, есть другие ошибки. Я читаю карту, какF F R R R F F F R R L F
будто я правильно понимаю правила.L
для^
и дваL
для двух/
? И почему вы добавили еще дваF
в конецY
примера?Ответы:
Javascript (ES6),
261248252248212 байтПоскольку должен поддерживаться только один сплит:
Тем не менее, 240 байт, и мы можем иметь дело с несколькими разбиениями:
Обе программы определяют анонимные функции.
Чтобы использовать, дайте имя функции, добавив
f=
перед кодом.После этого они могут быть вызваны с
объяснение
(устаревшая, но все та же концепция. Для решения множественного разделения)
Примечания
Все обратные косые черты (
\
) во входных данных экранируются как\\
, чтобы JavaScript мог их распознать.Оба выхода содержат завершающий пробел.
источник
PHP,
634631607396382381347338330337324 байтаМой первый в мире гольф, так что будь нежным Любые советы с благодарностью.
Краткое объяснение:
У меня есть счет, который равен 0, если вход имеет только один путь. Когда путь разделяется, счет равен 1 для левого пути и 2 для правого пути. После определения обоих путей (или только одного) я проверяю, какой путь имеет больше «F».
Безголовая версия:
Лог:
Сохранено 36 байт благодаря Kamehameha.
Сохранено много много байтов, немного изменив логику.
Сохранено 42 байта благодаря Axiac.
Заменен каждый if if с троичными операторами.
источник
$a=$b='';
вместо -$a='';$b='';
Сохраняет около 3 байтов.$a=$a.'L ';
может быть уменьшено до$a.='L '
. Вы, кажется, сделали это в нескольких местах. Это сэкономит около 6 байтов :)foreach($e as$i)
); Я проверил это, и, кажется, работает нормально.as
вforeach
, пробелы междуecho
и имя переменной могут быть удалены, так что у вас естьecho$b
. Кроме того , пара тестов равенства может быть короче , тоже,$c==0
может быть ,!$c
и если это так, то вы можете инициализируетесь$c
к''
с$a
и$b
!PHP, 281 байт
Это результат двух итераций игры в гольф. Безголовая версия:
Сама игра в гольф очень хороша, и она стала усовершенствованием следующей программы для гольфа (312 байт):
Это оригинальная версия для гольфа:
Пример выполнения:
Он также правильно обрабатывает несколько вилок (необходимо объединиться до следующего форка, чтобы в любое время было не более двух ветвей). Я спросил о нескольких ответвлениях в комментарии, но код был уже готов, когда пришел ответ («не нужен»).
Полный код с набором тестов и другими комментариями можно найти на github .
источник