暗号式ジェネレータの仕組み

昨日の日記で紹介した電脳コイルの「暗号式ジェネレータ」の仕掛けは、次のようになっています。

生成された暗号式をじっと見てみると分かりますが、○の部分はいくつかのパターンになっています。多少、ランダムに部品構成を変えられる仕組みになっています。これを画面内に並べていきます。アルゴリズムは以下の通り。
まず画面中心から始めて、ランダムにパターンを配置していきます。既に配置したパターンに衝突しないようなら次に、衝突したら同じ位置からn回までパターンを再生成。うまくパターンを配置できたら、そのパターンごとに定義されている「接続ポイント」から、さらに次のパターン配置を試みる、というアルゴリズムです。画面端に重なったのも衝突と見なすようになっているため、そのうち画面がパターンで埋まって、リトライが全ての「接続ポイント」で失敗したところでアルゴリズムが終了します。

perlで図形を書く方法としては、GD.pm というライブラリを使っています。GDライブラリさえインストールできれば、CPANでインストール可能なのでお手軽です。グラフを書く GD::Graph とか、ImageMagickとか、GDを利用するパッケージもたくさんあるようです。

ちなみにスクリプトはかなり汚い。。いくつかのパターンを用意するためにクラスを作れば良かったんですが、サボったので関数べた書き。クラスの代わりに関数リファレンスをハッシュに登録した配列を持っているという変な仕掛けを使ってみました。
なお、上記CGIがそのままサーバで動いている訳ではないです。