Jelly , 37 34 byte
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Cobalah online!
Mengambil input huruf kecil.
Terima kasih kepada Jonathan Allan .
-1 karena ternyata ini valid sebagai fungsi :)
Terima kasih kepada Jonathan Allan (dan Dennis), sekarang Anda dapat menghapus €
. Sayangnya, itu tidak akan bersaing di sini.
Penjelasan algoritma terperinci :
Kami biasanya mulai menjelaskan dari bawah (utama) tautan, turun, tapi di sini saya merasa lebih tepat untuk menjelaskan dari atas.
Pertama, kami hanya memuat daftar [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Ini terlihat seperti angka acak ya? Nah, ini sebenarnya adalah daftar angka basis-5-terkompresi, jadi kami basis-5-dekompreskan. Sekarang sepertinya [[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]]
. Masih tampak acak, tapi ini sebenarnya NESW
daftar enam belas koordinat yang dipetakan, jadi kami tidak jauh dari menyelesaikan daftar (Jelly adalah indeks 1). Melakukan pemetaan akhir, kita dapatkan [['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']]
, yang merupakan daftar lengkap yang kita inginkan (string Jelly ada di formulir [char1, char2, char3, ...]
.)
Karena kami sekarang telah membangun daftar koordinat, kami bekerja dengannya. Tautan utama ikut berperan. Pertama, kita memuat daftar yang telah kita buat, dan kemudian mengambil indeks bahwa koordinat input (sebagai argumen baris perintah) berada. Kemudian, kita memasangkan pendahulunya dan penggantinya ke dalam daftar, dan kita menggunakannya sebagai modular indeks ke dalam daftar koordinat yang sama untuk mengambil koordinat ke kiri dan kanan input masing-masing. Anda sekarang berpikir kita akhirnya selesai, tetapi sebenarnya ada satu hal lagi, pemisah. Ini valid sebagai fungsi, karena 1) Anda dapat memanggilnya menggunakan <integer>Ŀ
2) Anda juga diizinkan untuk mendefinisikan fungsi lain (seperti mengimpor modul). Sekarang, kita sudah selesai. Sebagai program lengkap, ini tidak memiliki pemisah, tapi tidak apa-apa, karena berfungsi sebagai fungsi.
Penjelasan kode tautan-per-tautan :
¢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.