Jöle , 37 34 bayt
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Çevrimiçi deneyin!
Küçük harf girişi yapar.
-2 Jonathan Allan'a teşekkürler .
-1 çıktığından beri bu bir fonksiyon olarak geçerlidir :)
Jonathan Allan (ve Dennis) sayesinde şimdi kaldırabilirsiniz €
. Ne yazık ki, bu burada rekabet edemez.
Detaylı algoritma açıklaması :
Genellikle aşağıdan (ana) bağlantıdan aşağıya doğru açıklamaya başlarız, ama burada yukarıdan açıklamanın daha uygun olduğunu düşünüyorum.
İlk önce listeyi yüklüyoruz [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Bu rasgele sayılar gibi görünüyor, ha? Aslında bu aslında 5 bazında sıkıştırılmış sayıların bir listesi, biz 5 bazında çıkardık. Şimdi benziyor [[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]]
. Yine de rastgele görünen şeyler, ama bu aslında NESW
on altı koordinatın haritalanmış bir listesi, bu yüzden listeyi tamamlamaktan çok uzakta değiliz (Jelly 1 indeksli). Son eşleştirmeyi [['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']]
yaparak istediğimiz listenin tamamını elde ederiz (Jelly string'leri formdadır) [char1, char2, char3, ...]
.
Şimdi koordinat listesini oluşturduğumuzdan beri onunla çalışıyoruz. Ana link devreye giriyor. Öncelikle, oluşturduğumuz listeyi yüklüyoruz, sonra girdi (komut satırı argümanı) koordinatının içinde bulunduğu dizini alıyoruz. Sonra selefini ve halefini bir liste halinde eşleştiriyoruz ve onları modüler olarak kullanıyoruz. sırasıyla koordinatın girişin soluna ve sağına götürülmesi için aynı koordinat listesine Şimdi sonunda bittiğimizi düşünüyorsun, ama aslında bir şey daha var, ayırıcı. Bu bir fonksiyon olarak geçerlidir, çünkü 1) Bunu kullanarak çağırabilirsiniz <integer>Ŀ
2) Diğer fonksiyonları da tanımlamanıza izin verilir (alma modülleri gibi). Şimdi bitti. Tam bir program olarak, bunun bir ayırıcıya sahip değildir, ancak bir fonksiyon olarak çalıştığından sorun değil.
Bağlantılı kod kodu açıklaması :
¢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.