息抜きコーディング
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); } }
母さんルールとか,イヌルールは全部共通化してルールをパラメータ化することはできるんだけど,各ルールは,別ルールクラスにしたほうがステップ数稼げるんだよねえ.
こういうのって個人のセンスによっちゃうんだろな.
# っていうか,こういう処理のテストケース作るのは大変だ.まず試験項目作るのが大変だし,その検証対象となる仕様がそもそも正しいのかわからん.