star-code.net

グリッド置換器を作った

はじめに

グリッド置換器を作りました.

一言で言うのがとても難しい代物ですが,2 次元グリッド上の文字のパターンをルールに沿って置換することを繰り返してなんらかの動作を行わせることができます. セル・オートマトンというよりはマルコフアルゴリズムの 2 次元版と言った方が近そう.文字列じゃないのでグリッドサイズは固定なのですが.

サンプルの動作の様子

上はサンプルの動作の様子です.

使い方

文字で書くとややこしいので百聞は一見にしかず,かも.

大きく分けて画面上の左側(縦長画面だと上側)と右側(縦長画面だと下側)に分かれます. 左側がメイングリッドで,右側がルール群です.その下側にコントロールパネルがあります.

メイングリッド

このグリッド上に初期状態を書き込みます. それぞれのグリッドには好きな文字列を入力することができます. 空文字列は認めていませんが,スペースは入力可能です.

グリッドの行と列は増やしたり減らしたりすることができます.

ルール群

ルールを書きます.上にあるルールほど優先度が高いです. 矢印左側のグリッド(置換元)に書かれたパターンを,右側のパターン(置換先)に置換します.

置換元のグリッドの空白はワイルドカード(どの文字にもマッチする)です. 対して,置換先の空白は置換元の文字をそのまま維持することを意味します.

置換

置換は,ルールのうち最も上にあるルールから順に,置換が可能か調べられます.

グリッド内で,下の図のように上側から順に走査されます. もしルールとマッチした場合,その場所が置換されます.

グリッド内の優先度

例えば,メイングリッドが以下だったとします.

メイングリッドの例

この時のルールが以下だったとします.

ルールの例

この時の動作は以下のようになります. まず,ルール 1 に当てはまる箇所があり,置換されます.

ステップ 1

次に,ルール 1 に当てはまる場所があり,置換されます.

ステップ 2

次に,ルール 1 に当てはまる場所が無く,ルール 2 に当てはまる場所があり,置換されます.

ステップ 3

ここで,ルール 1 に当てはまる場所が無く,ルール 2 に当てはまる場所もないため,動作を終了します.

以上のように動作を行います.

JSON ファイルで書き出したり読み込んだり,gif 画像を保存したり,特定の文字列に色をつける機能もつけています.

作例

スネーク

外周をぐるぐる回ります.

作例 1 スネーク

JSON ファイル(右クリックして,リンク先を保存)

加算

2026+827=28532026 + 827 = 2853. 繰り上がりにも対応しています.

作例 2 加算

JSON ファイル(右クリックして,リンク先を保存)

パスカルの三角形

パスカルの三角形を 2 で割った余り.

作例 3 パスカルの三角形

JSON ファイル(右クリックして,リンク先を保存)

迷路探索

迷路探索だってできます.閉路があっても解けるよ(最短の保証はないけど).

作例 4 迷路探索

JSON ファイル(右クリックして,リンク先を保存)

なぜ作ったか

アイデアの源泉のひとつは「Markov Algorithm Online」です. かなり昔に遊んだことがあり,楽しいパズルだった記憶.こういう遊んだ経験ってひょんな時に生きてきますね.

もう一つの源泉が「農家は Replace() されました(The Farmer Was Replaced)」です. こちらのゲームを遊んでいる時に今回のグリッド置換器を思いつきました. とっても面白いゲームなのでおすすめです.

ゲームの紹介を簡単にすると,Python もどきでプログラムを書いて農場(グリッド)上でドローンを動かして作物を植えたり育てたり,あとは迷路を解いたりスネークゲームを解いたり. ゲームではあるがやることはプログラムを書く以外ないです. でもパズルみたいですっごく楽しいプログラミングができます. パズルが好きならおすすめと思いつつ,プログラミングの経験がないと大変かも. 自分のやりたいアルゴリズムを表現するのってそれなりに力が必要だなあとも思います.

リーダーボード上で私と勝負!(全部のリーダーボードにのせているわけではないですが)

Web 開発のプログラミングがつまらないわけではないけれど,作るものを決めてそれに合わせて組み上げていくのが主なのでこういうパズル寄りの面白さは感じられなかったり.

終わりに

作ってみたけど自分でも何ができるのかよくわかっていません. 色々できそうではあるが,こいつは一体なんなんだ.