Thạch , 37 34 byte
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Hãy thử trực tuyến!
Đưa đầu vào chữ thường.
-2 cảm ơn Jonathan Allan .
-1 vì hóa ra đây là hợp lệ như một hàm :)
Nhờ Jonathan Allan (và Dennis), bây giờ bạn có thể xóa €
. Thật không may, điều đó sẽ không cạnh tranh ở đây.
Giải thích thuật toán chi tiết :
Chúng tôi thường bắt đầu giải thích từ liên kết dưới cùng (chính), đi xuống, nhưng ở đây tôi cảm thấy như nó thích hợp hơn để giải thích từ đầu.
Đầu tiên, chúng tôi chỉ cần tải lên danh sách [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Cái này trông giống số ngẫu nhiên nhỉ? Chà, đây thực sự là một danh sách các số được nén 5 cơ sở, vì vậy chúng tôi đã giải nén nó. Bây giờ nó trông như thế [[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]]
. Vẫn là những thứ có vẻ ngẫu nhiên, nhưng đây thực sự là một NESW
danh sách gồm mười sáu tọa độ, vì vậy chúng ta không còn xa để hoàn thành danh sách (Jelly là 1 chỉ mục). Thực hiện ánh xạ cuối cùng, chúng tôi nhận được [['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']]
, đó là danh sách đầy đủ mà chúng tôi muốn (chuỗi Jelly có dạng [char1, char2, char3, ...]
.)
Vì hiện tại chúng tôi đã xây dựng danh sách tọa độ, chúng tôi làm việc với nó. Các liên kết chính đi vào chơi. Đầu tiên, chúng tôi tải lên danh sách mà chúng tôi đã tạo và sau đó lấy chỉ mục mà tọa độ đầu vào (dưới dạng đối số dòng lệnh) nằm trong. Sau đó, chúng tôi ghép nối người tiền nhiệm và người kế nhiệm của nó vào danh sách và chúng tôi sử dụng chúng làm mô-đun các chỉ số vào cùng một danh sách tọa độ để lấy tọa độ ở bên trái và bên phải của đầu vào tương ứng. Bây giờ bạn nghĩ rằng cuối cùng chúng ta đã hoàn thành, nhưng thực tế có một điều nữa, đó là dải phân cách. Đây là một hàm hợp lệ, vì 1) Bạn có thể gọi nó bằng <integer>Ŀ
2) Bạn cũng được phép xác định các hàm khác (như nhập mô-đun). Bây giờ, chúng ta đã hoàn thành. Là một chương trình đầy đủ, điều này không có dấu phân cách, nhưng không sao, vì nó hoạt động như một chức năng.
Giải thích mã liên kết :
¢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.