息抜きコーディング

matobaaさんのページを見て
フィジカル練習問題をプログラムを作って解いてみた.

確かに,我がeMachinesは「17手だ」と言った. さて,どういう手順かと見ようと思ったら,あれ,俺のプログラムって17手でゴール状態に到達することは示しているが,途中の手順を保存してないじゃん.ダメだこりゃ.要件を最初にちゃんと確認しろよ<=俺

# おおよそ,食べられ状態にならない状態を計算-> 移動可能な状態遷移を計算->グラフ化->初期状態からゴール状態への到達可能性をダイクストラ法で計算.
結構王様プログラミングな方法かもなあ.

# 共通化できるコードは,共通化すべきか
・ 共通化って面倒だね.
・ さらに,共通化するとステップ数減っちゃうし.

たとえば,父さんが娘を食べちゃうルールのインナクラス

class FatherRule extends Rule {
  boolean isValidState(BitSet stateBits) {
    boolean notValid = false;
    notValid = (stateBits.get(0) && (!stateBits.get(1)) &&
   (stateBits.get(4) || stateBits.get(5)))|| ((!stateBits.get(0)) 
   && stateBits.get(1) && 
   ((!stateBits.get(4)) || (!stateBits.get(5))));
return (!notValid);
  }
}

母さんルールとか,イヌルールは全部共通化してルールをパラメータ化することはできるんだけど,各ルールは,別ルールクラスにしたほうがステップ数稼げるんだよねえ.
こういうのって個人のセンスによっちゃうんだろな.


# っていうか,こういう処理のテストケース作るのは大変だ.まず試験項目作るのが大変だし,その検証対象となる仕様がそもそも正しいのかわからん.