どうしても迷路で遊びたくなったので, 自分で作りました. リポジトリは itchyny / maze-c - GitHub です.
インストール
git clone https://github.com/itchyny/maze-c cd ./maze-c autoreconf -i ./configure make sudo make install
autotoolsを使ってみたので, 知ってる人にとっては良い感じに使えると思います.
遊び方
以下のコマンドは, 迷路を生成して出力します.
$ maze
大きさを変えたい時は, -w, -hで変えて下さい.
$ maze -w 18 -h 8
vimshellのように, エスケープシーケンスの処理がきつい環境では, -aオプションを使用して下さい.
$ maze -a
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
S XX XX XX XX XX
XXXXXX XXXXXXXXXX XX XX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XX XX XXXXXX
XX XX XX XX XX XX XX XX XX XX XX
XX XXXXXX XX XX XX XXXXXX XX XXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XXXXXXXXXXXXXX XX XX XXXXXX XX XX XX XX XXXXXXXXXX
XX XX XX XX XX XX XX XX XX XX XX
XXXXXXXXXXXXXXXXXX XX XX XX XXXXXX XXXXXX XX XXXXXXXXXXXXXXXXXXXXXX XX
XX XX XX XX XX XX XX XX XX XX
XX XXXXXX XX XXXXXXXXXX XXXXXX XX XXXXXXXXXXXXXX XXXXXX XX XX XXXXXX
XX XX XX XX XX XX XX XX XX XX
XX XX XX XXXXXXXXXX XXXXXXXXXXXXXXXXXX XX XXXXXXXXXX XX XX XXXXXX XX
XX XX XX XX XX XX XX XX XX XX
XX XXXXXXXXXX XX XXXXXX XX XXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XX
XX XX XX XX XX XX XX XX XX
XXXXXXXXXX XX XXXXXXXXXXXXXXXXXX XXXXXX XXXXXX XXXXXXXXXXXXXXXXXX XX XX
XX XX XX XX XX XX XX XX XX XX XX
XXXXXX XX XXXXXXXXXX XX XX XXXXXX XXXXXX XX XXXXXXXXXX XX XX XX XX
XX XX XX XX XX XX G
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$
引数は, man maze を参照して下さい.
アルゴリズム
迷路の生成方法は, 穴掘り法です.
最初に周りに道を作っておき, スタート位置からランダムに道を掘って行きます.
難しい迷路は作るのは大変です.
もしかしたら, このコマンドが生成する迷路は簡単だと思われるかもしれません.
まぁ文字を小さくしたら, それなりに難しいでしょう.
僕はちょっとこれは解きたくありません.
暇つぶしにはなるでしょう.
圧縮, 解凍
迷路をメールで送りたい時, 迷路をキャプチャーして送ることができます.
mazeコマンドが生成する迷路は, テキストです.
よって, メール本文に貼って送ればいいですね.
しかし, もっとメールのサイズを小さくしたいと思ったとします.
そういう場合のために, mazeコマンドはメールを圧縮して解凍する機能があります.
$ maze -c
hoLyXEX6xWN1xX0X0x1xX1WO0xWL1yyyzwVyYX3VRRdVXh8CDDE2X5QJcHTXTB444EBXKTPJNGOXV27F4EFMUOOQJH91A678XBPUPJGIXiC8F1FEXERTHVIPXS43DB9EXKRPGGUKXV6CFC13KQNGfPF10F4DXCaksXP54E145XFjRMVLXR361F1CXJSPUHdXb721DC3NPTUMNVyYX3zwWO7
解凍します.
$ maze -u hoLyXEX6xWN1xX0X0x1xX1WO0xWL1yyyzwVyYX3VRRdVXh8CDDE2X5QJcHTXTB444EBXKTPJNGOXV27F4EFMUOOQJH91A678XBPUPJGIXiC8F1FEXERTHVIPXS43DB9EXKRPGGUKXV6CFC13KQNGfPF10F4DXCaksXP54E145XFjRMVLXR361F1CXJSPUHdXb721DC3NPTUMNVyYX3zwWO7
二次元のデータを一列の文字列にしているので, あまり圧縮という感じがしないかもしれません.
何度もテストして統計を取って, 隣接する数字を調べました.
圧縮率は, さほど悪くなく, アルゴリズムも簡単な落とし所にしました.
迷路のためにzipのdeflateとか勉強したんですが, あんま役に立てられませんでしたね.
何よりも, 圧縮の仕様を書くのが難しいし, 今後の互換性を保っていくのが大変な気がします:;(∩´﹏`∩);:
分布はまだかなり偏っているので, 圧縮率は最適ではないんですけどね.
まとめ
迷路は楽しいです∩(>◡<*)∩♡
autotoolsは, とても良く出来てるなぁと思いました.
ヘッダーファイルのportablityとか全然知らないので, 教えてください.
あとがき (2016/3/17記)
諸事情により、リポジトリを https://github.com/itchyny/maze-c に移動しました。本文訂正済みです。