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

糸電話式のアレ

プログラミングのこと。毎日のこと。書いています。

お題の回答(力技偏)

scala プログラミング

前回の日記( http://d.hatena.ne.jp/aya_eiya/20110329/1301406161 )のお題の解答です。

とりあえず、迷路をつくるところまでをScalaで実装しました。

迷路つくる部分は果てしなく力技です。
(2011/04/02)少しだけ考えるようにしました。
実際の構造と少し違いますが、下のようなことをやっています。


:スタート
全部のセルでランダムに選んだ隣接セルへ一箇所だけ移動できるようにする
全部のセルへランダムに選んだ隣接セルの一つから移動できるようにする
While(全てのセルから、全てのセルへ移動できない){
 セルへ行く経路が最も少ないセルのうち一つをランダムに選んで、
 そのセルに隣り合うセルを一つ選んで、そこからの移動を許可する
 If(全てのセルから、全てのセルへ移動できる)
  移動を不許可にしても、
   全てのセルから、全てのセルへ移動できる
   ことに影響がない移動を不許可にする
  移動できる確率かdoorOpenProbabilityを超えていたら
  :スタートからやりなおし
}

まぁ、ドアと壁の実装は戦略ミスですね。
無駄が多いです。
あとでリファクタリングを試みましょう。
(2011/04/02)Doorクラスを削除しました。

先に判定機能を実装したいと思います。
判定機能は別の言語で実装しようかな。

(2011/4/2 追記 )
  • 視覚的にわかるようにSVG出力機能を追加。
  • (1,1)の位置にあるCellが出力されない不具合の修正。
  • 縦横の出力順序を交換。
  • reset関数が役立たずだった不具合を修正。
  • Doorクラスを削除。
  • Diggerクラスがヘマやらかしていた不具合を修正。
  • reset関数を頭良くした。

55%位なら待っている間に終わるようになった。で、多分正しい。
早く証明機能作らなきゃ、、、

うーん、XMLの処理っていつもダサくなるな。
なんかかっこ良くなる方法ないかな。

(2011/4/3 追記 )

ちょっと工夫したら40%を切りました。