Желе , 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.
Mathematica,
118112 байтСпасибо Мартину Эндеру за сохранение 6 байтов!
Безымянная функция (действительно ассоциация), которая принимает строку в качестве входных данных и возвращает упорядоченную пару строк. В основном, просто жестко код ответа.
источник
Python 2,
116115103 байт-12 байт благодаря Нейлу
Попробуйте онлайн!
источник
d[n-15]
чтобы избежать условия.JavaScript ES6,
106102 байтаПопробуйте онлайн!
источник
let
вместоconst
.05AB1E ,
4443 байта (спасибо Аднану )Попробуйте онлайн!
Exmaple output:
Версия, которая выдвигает
N0NNE0NE0ENE0E0ESE0SE0SSE0S0SSW0SW0WSW0W0WNW0NW0NNW
вместо:Также 44 байта, было 0 причин для моего рефакторинга, и есть 0 причин для разделения на 4.
источник
4
с?•17¿$Mn]6VAÆ—Dªd—•5B4LJ"NSWE"‡0¡©skD<®ès>®è)
оказывается, нет никаких причин вообще. Использование 0 в качестве разделителя - та же степень сжатия, поскольку она не уменьшает длину числа при преобразовании base-5 в base-214. Может, клятва сделать это так спасла мне хоть байт.„ €Ã¦•174SÝ©l2ÎG¦˜fÐ98•5BSè#ÐIk©<ès®>è)
чтобы сохранить 4 байта.Javascript -
234154156152120106102 байтаТолько мой второй раз занимаюсь гольфом кода !!
Последняя редакция:
Спасибо @ fəˈnɛtɪk за этот аккуратный трюк с переменными!
До этого: Хорошо, так последняя редакция: Input - это строка, а output - строка, которая есть в правилах, поэтому я превратил ее в функцию, а с сокращениями я стал еще меньше (функция также является анонимной, что теперь означает, что у меня есть каким-то образом запутался в другом ответе js ой! У него (пауэлл) это было первым !!)
Может использоваться:
Переделано (не работает) с выводом - 120:
Обратите внимание, что изначально я допустил ошибку, указав для первого индекса значение a.length вместо a.length-1. Спасибо @Neil за указание, что это не работает для NNW.
Примечание 2: Спасибо @Neil и @ETHProductions за помощь в сокращении кода!
Originial:
источник
NNW
.,
, i = a.indexOf (p), [a [i-1 & 15], a [i + 1 & 15]]))Пакет, 196 байт
Прокручивает каждую пару точек компаса, печатая одну, когда другая совпадает. Например, для параметра
ENE
, когда цикл достигаетENE
, переменнаяs
содержит,NE
который печатается, затем, когда цикл переходит кE
, переменнаяs
содержитENE
и такE
печатается. Одна пара должна быть в специальном корпусе, чтобы точки компаса не печатались в неправильном порядке.источник
Желе ,
4038 байтПопробуйте онлайн! (добавлен нижний колонтитул, чтобы показать, что вывод представляет собой список из двух элементов) ... или просмотреть все случаи .
(Я не совсем уверен, почему
1323DRẋ4
вместо“¢)`)’ḃ3R
этого не работает в данный момент.)Как?
источник
Haskell ,
10099 байтПопробуйте онлайн! Звонок
(s#) "N"
возвращается("NNW","NNE")
.s
является бесконечным повторением списка направлений, поэтому нам не нужно добавлять дополнительныеN
иNNE
как и некоторые другие ответы, чтобы правильно обрабатывать края списка.Спасибо @nimi за сохранение одного байта!
источник
(a:b:c:r)!x| ... =r!x;(s!)
.СОГЛ , 33 байта
Первая часть
≠┐πΜ]ρ½d⁹V¹-┐*╔╤¹Ψæ;¶‘
представляет собой сжатую строку, котораясжатый с помощью пользовательского словаря с
ENSW
Остальная часть программы:
источник
bytes
в заголовке есть ссылка на кодовую страницуPHP, 122 байта
источник
$argv[1]
с$argn
использованием опции -R. если вы используете устаревшие функции, если они могут заканчиватьсяereg("([^_]+)_{$argn}(_[^_]+)",N_NNE_NE_ENE_E_ESE_SE_SSE_S_SSW_SW_WSW_W_WNW_NW_NNW_N_NNE,$t);echo$t[1].$t[2];
Рубин - 94 байта
Рифф на ответ Синий Okiris в , просто чтобы воспользоваться какой - то хороший Ruby , стенографии (
%w[]
синтаксис иp
специально):источник
Japt ,
6652 байтаСохранено 14 байт благодаря @ETHproductions
Попробуйте онлайн!
Объяснение:
источник
'
вq'o
и он будет работать точно так же :-)[J1]£VgX+VaU
чтобы сэкономить несколько байтовCJam, 41
Попробуйте онлайн
источник
PHP, 115 байт
-2 байта, используя устаревшую функцию
split
вместоexplode
PHP, 128 байт
PHP, 134 байта
источник
PHP,
110109 байтСохранено 1 байт благодаря Jörg Hülsermann .
источник
preg_replace
на,preg_filter
чтобы сохранить 1 байтПитон 3 -
112107 байтЯ основал это на своем ответе на Javascript:
Переделал:
Используйте как говорят
Оригинал:
источник
MATL , 43 байта
Попробуйте онлайн!
объяснение
источник
с,
222216211 байтПопробуйте онлайн
источник
Javascript (ES6), 189 байт
Просто принимает входные данные, ищет их и возвращает.
источник
JavaScript (ES6), 94 байта
Ожидается строка в верхнем регистре, такая как
"ENE"
. Возвращает строку через запятую, например"NE,E"
.Как это работает
При вызове выражение
0+s+0
приводится к строкеsplit()
. Например, если входные данные"ENE"
, строка будет разделена на"0ENE0"
:Это приводит к следующему массиву:
Опять же, этот массив приводится к строке при
exec()
вызове. Итак, регулярное выражение фактически применяется к:Мы ищем последовательные нечисловые символы (
\D+
), за которыми следует запятая, а затем последовательные нечисловые символы. Это возвращает массив[ "NE,E" ]
. Мы могли бы остановиться на этом и вернуть именно это. Но задача состоит в том, чтобы запросить строку с разделителями или массив из двух элементов. Итак, мы извлекаем строку с[0]
.демонстрация
Показать фрагмент кода
источник
Pyth , 39 байт:
где
❤
представляет непечатные буквы.Попробуйте онлайн!
HexDump:
источник