読者です 読者をやめる 読者になる 読者になる

mazeコマンド作った 〜 端末で迷路で遊ぼう

C unix

どうしても迷路で遊びたくなったので, 自分で作りました. リポジトリ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 に移動しました。本文訂正済みです。