เยลลี่ , 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-decompress [[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
รายการที่แมปของพิกัดที่สิบหกดังนั้นเราจึงไม่ไกลจากการทำรายการให้เสร็จสมบูรณ์ (วุ้นคือดัชนี 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.