いう言語(esolang)へのコンバータについてお話を書きます。独自コンバータを作りたいと言いました。書くのはとても大変で、さらに最短を目指すとなるとかなり労力が必要ですが、自動化できそうなところが多数ありました。コーディングを目指します。(この記事に(1)とついているのはまだ一部しか自動化できていないためです。ゴルフ大会までには全て完成させます。2次元六角形のマス上を6方向に動くインストラクションポインタの指す命令に従って、これまた六角形(の辺)状のメモリを操作していく難解プログラミング言語です。さんとの激戦の末最短を勝ち取りました。いう(そこまで使い物にならない)ツールを作ったりしました。コーディングではメモリ上の変数や配列の配置を考えて、それらを指すポインタ(メモリポインタ)の移動を実装していきます。この移動が結構厄介で機械的に扱いづらいので、今回生成するプログラムはレジスタ3つと配列1つのみを扱えるようにしました。2つの配列がほしい場合は偶数番目と奇数番目で分けるなどします。向けに最適化された)アセンブラみたいな言語です。苦しみ(agony)に比べると圧倒的に楽ができるのでこの名前がついています。プログラムと同一ですが、「ブロック」の機能があって各ブロックの末尾から他ブロックの先頭にジャンプすることができます。「プログラムを2次元に敷き詰める難しさ」を取り除いた言語になっています。敷き詰めは厄介で、インストラクションポインタの移動方向が6つあるにもかかわらず単純な方向転換命令が4つしかなく、行きたい方向に行くのに2命令必要なことがあります。変換を自動化できれば、敷き詰めで悩むことは減るはずです。コンバータを書くところまでは終わりました。部分は残念ながら未完成です。今度またブログ書きます。