ゼリー、37 34バイト
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
オンラインでお試しください!
小文字の入力を取ります。
-2 Jonathan Allanに感謝します。
-1これは関数として有効であることが判明しているため:)
Jonathan Allan(およびDennis)のおかげで、を削除できるようになりました€
。残念ながら、それはここでは競合しません。
詳細なアルゴリズムの説明:
通常、下の(メイン)リンクから説明を開始しますが、ここでは上から説明する方が適切だと感じています。
まず、単純にリストをロードします[1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
。これは乱数のように見えますか?さて、これは実際にはbase-5で圧縮された数字のリストなので、base-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
には16の座標のマップされたリストなので、リストを完成するのにそれほど遠くありません(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つセパレーターがあります。これは関数として有効です。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.