Желе , 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']]
повний список, який ми хочемо (желейні рядки є у формі [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.