Где указана стрелка?
В этой задаче ваша цель - следовать за стрелкой и выводить символ, на который она указывает.
Примеры
Входные данные:
d S------+ b
|
|
c +--->a
Выход: a
Входные данные:
S-----+---a->c
|
V
b
Выход: b
Стрелка не указывает на, c
потому что она разделена на a
, что означает, что этот путь никогда не ведет к наконечнику стрелки.
Входные данные:
a S s
| |
V V
b c
Выход: b
Входные данные:
d s<+S+--V
||| Q
-++
Выход: Q
Этот путь начинается с S
, идет вниз, направо, идет вверх, вправо, затем указывает вниз на Q. Обратите внимание, что путь не идет прямо от S
к +
.
Входные данные:
d s-+ +-S +--+
+-->b | | |
| | +--+ |
+--+ A<----+
Выход: A
Входные данные:
S-----+
| +-^
+---+->B
+---^
Выход: B
Поскольку действительная строка никогда не приведет к пробелу. Единственная строка, которая не приводит к пробелу, приводит кB
Вызов
На входе будет многострочная строка, в которой вам нужно найти символ, на который указывает стрелка. Там будет только одна действительная стрелка. Действительная стрелка будет указывать только на буквенно-цифровые символы, исключая S
. Линия никогда не будет перекрывать себя. например-|-
S
(заглавная) представляет место, где начинается стрелка.-
представляет горизонтальную линию+
представляет возможное изменение в оси. Действительная стрелка никогда не начинается с+
.|
представляет вертикальную линию> < V ^
любой из них представляет наконечник стрелки. Они никогда не подключатся к+
.
Там будет только один S
в строке. Вход также будет дополнен прямоугольником (не обязательно квадратом).
S
». Вероятно, следует перефразировать: «Это никогда не будет первым символом стрелки». (Поскольку вQ
примере есть+
соседний сS
.) "+
Представляет изменение в оси". может быть лучше "+
представляет возможное изменение в оси". (ПосколькуB
пример показывает, что вы можете перемещаться+
без изменения направления.) В противном случае, хороший вызов. :)---^
? Другими словами, если в примере B, B мог остаться в первом ряду?S>a
действительным?Ответы:
JavaScript (ES6), 195
245 231 242 246 250Edit4 Теперь, одна рекурсивная функция. Наверное, больше нельзя играть в гольф
Edit3 Тест для прямой линии и тест для стрелки, объединенной в функции T, функции S и H удалены.
Edit2 пересмотрен и дольше :( после этого это уточнение
редактировать Небольшие улучшения, обрезая немного символов здесь и там, ожидая, когда CJammers вступит
Попробуйте запустить приведенный ниже фрагмент в браузере, совместимом с EcmaScript 6. (работает на Firefox. В Chrome все еще отсутствует оператор распространения
...
)источник
JavaScript 2016,
264 263 249 240 235234 байтаЗапустите его в Firefox:
Разбросаны в некоторых моих заметках:
источник
o = 'indexOf'
и затем делая,q[o](e)
когда вы хотите использовать его.for(;;)
петли, как правило, наиболее эффективны. В этом случае может быть неправильно, но попробуйте.a<-+S->b
я думаю, что он должен даватьb
только, так как действительная стрелка никогда не начнется с +JavaScript 2016
(все еще правильный и хороший ответ, не проблема с ним)VBA Excel 2007, 894 байта
Ну, это началось намного лучше, чем закончилось. У меня такое чувство, что моя логика несовершенна, и я мог бы сэкономить тонну байтов, если бы переупорядочил некоторые из своих логик, но слишком много времени уже потрачено на это = P
Вход для этого - столбец A любого листа, на котором вы находитесь. Этот метод использует тот факт, что Excel имеет эту красивую сетку и разбивает все на части, чтобы вы могли видеть, что он делает более четко.
Sub m()
просто берет скопированные данные из столбца А и разбивает их на символы. Если мы разрешаем модифицированный ввод, то если вы предварительно отформатируете лабиринт в 1 символ на ячейку, вы можете сохранить несколько байтов, удаливsub m()
Вставьте лабиринт в Excel любого размера до 99 строк по 27 символов в поперечнике. Если вы хотите больше лабиринтов, это всего 2 дополнительных байта, чтобы увеличить область до 999 строк и столбцов ZZ
Также может понадобиться судейский звонок о том, является ли лист Excel допустимым «стандартным вводом» для ответа VBA. Если нет, то почти невозможно дать многострочному вводу VBA VIA немедленное окно
Чтобы запустить этот код, просто вставьте этот код в модуль Excel, вставьте лабиринт в A1 и запустите
sub j()
источник
Python 3, 349 байт
Тьфу, так много байтов.
По сути, поиск в ширину. Бонус: это на самом деле выходит изящно вместо использования
exit()
, что в любом случае дольше.источник
input()
? Это проблематично для меня.Perl 5
Решение получилось дольше других решений.
Даже после игры в гольф. Так что это версия без присмотра.
Он печатает карту, чтобы вы могли следовать за курсором.
Как это работает? На каждом шаге он помещает возможные ходы в стек. И он продолжает работать до тех пор, пока в стеке ничего не останется или не будет найдено решение.
Его можно легко изменить, чтобы найти все решения и выбрать ближайшее -> while (@_) {...
Тест
источник
Версия PHP (комментарии французские, извините)
источник
Haskell, 268 байт
Поздравляем Javascripters! Отдал награду, но вот что я получил. Может / не может работать не во всех случаях, но на самом деле обрабатывает стрелки, начинающиеся с и стрелки, соединяющиеся с ES
+
, насколько я знаю. Даже не включил поискS
, только(0,0)
сейчас.источник
Я хотел бы увидеть версию APL в духе https://www.youtube.com/watch?v=a9xAKttWgP4
Для начала, векторизованное решение Julia, которое, я думаю, можно перевести 1: 0.3 в APL или J. Для этого требуется строка R, представляющая стрелочную диаграмму L x K. Сначала он переводит матрицу символов в матрицу небольших матриц 3х3, шаблоны которых представляют собой двоичные разложения букв строки "\ 0 \ x18 \ fH \ t]] \ x1cI". Например, «+» кодируется как изменение формы ([0, цифры (int (']'), 2,8)], 3,3)
В этом представлении путь состоит из 2-х и затопляется на 3-х из начальной точки.
Тестировать,
Между прочим, я думаю, что пункт «Другой + может быть смежным, но стрелка должна определять приоритет продолжения - или | первого». ставит векторный подход в невыгодное положение. Во всяком случае, я просто проигнорировал это.
источник