Желе , 37 34 байта
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Попробуйте онлайн!
Принимает строчные буквы
-2 спасибо Джонатану Аллану .
-1 так как оказывается это действует как функция :)
Благодаря Джонатану Аллану (и Деннису), теперь вы можете удалить €
. К сожалению, это было бы неконкурентоспособным здесь.
Подробное объяснение алгоритма :
Обычно мы начинаем объяснение с нижней (основной) ссылки, спускаясь вниз, но здесь я чувствую, что более уместно объяснять сверху.
Сначала мы просто загружаем список [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Это похоже на случайные числа, а? Ну, на самом деле это список сжатых по основанию 5 чисел, поэтому мы распаковываем по основанию 5. Теперь это выглядит так [[1], [1, 1, 2], [1, 2], [2, 1, 2], [2], [2, 3, 2], [3, 2], [3, 3, 2], [3], [3, 3, 4], [3, 4], [4, 3, 4], [4], [4, 1, 4], [1, 4], [1, 1, 4]]
. Все еще выглядит случайным образом, но на самом деле это NESW
список из шестнадцати координат, поэтому мы недалек от его завершения (Jelly имеет индекс 1). Делая окончательное сопоставление, мы получаем [['N'], ['N', 'N', 'E'], ['N', 'E'], ['E', 'N', 'E'], ['E'], ['E', 'S', 'E'], ['S', 'E'], ['S', 'S', 'E'], ['S'], ['S', 'S', 'W'], ['S', 'W'], ['W', 'S', 'W'], ['W'], ['W', 'N', 'W'], ['N', 'W'], ['N', 'N', 'W']]
полный список, который нам нужен (строки Jelly находятся в форме [char1, char2, char3, ...]
.)
Поскольку мы сейчас создали список координат, мы работаем с ним. Основная ссылка вступает в игру. Сначала мы загружаем список, который мы создали, а затем берем индекс, в котором находится входная координата (в качестве аргумента командной строки). Затем мы объединяем его предшественника и его преемника в список и используем их как модульные. индексы в один и тот же список координат, чтобы взять координаты слева и справа от ввода соответственно. Теперь вы думаете, что мы наконец закончили, но на самом деле есть еще одна вещь, разделитель. Это действительно как функция, так как 1) Вы можете вызывать ее, используя <integer>Ŀ
2) Вы можете определять и другие функции (например, импорт модулей). Теперь мы сделали. Как полная программа, у нее нет разделителя, но это нормально, так как она работает как функция.
Объяснение кода ссылки по ссылке :
¢iµ’,‘ị¢K Main link. Arguments: z = cmd0
¢ Run the helper link niladically (i.e. load the coordinate list).
i Find the index of z in the list.
µ Start a new monadic chain. Arguments: z = list_index.
’ Decrement z.
‘ Increment z.
, Pair x and y into [x, y].
¢ Run the helper link niladically.
ị Take the elements of y at the indices in x.
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦» Helper link. Arguments: [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
“¢ ¬9£Hæz¥{çb¤S®!‘ Generate the integer list (the argument).
“¡&¦» Literal "newsy".
ṃ€ Base-length(y)-decompress every integer in x, then index into y.