DevQuizが終わったので、結果をまとめておこうかと…

 回答数: 5000/5000
 L: 68088/72187
 R: 77650/81749
 U: 67642/72303
 D: 77117/81778

LRUDは、計17520個余っていますが、まだまだ削れるみたいですねぇ。
(5000問のうち、2509問だけは最適解と確認済)

【やったこと】 ※ちなみに、今回は評価関数を全く書いていませんw

1. 初期状態と、ゴール状態の双方から1手づつ展開
 ・パネルの状態を表す文字列がキー、経路が値のマップを作成しながら展開
 ・前方からの展開と、後方からの展開が一致すれば、経路をつないで回答とする
 ・この方法だと、メモリー使用量がネックになって、確実に解けるのは40手どまりでした…
 ・ただ、それでも頑張ってまわせば1500問以上は解けていた気がします

2. 問題を分割(左端、上端偏)
 ・左端あるい上端から1列づつ埋めて、問題を小さくして、総当りできるサイズに削る戦略
 ・ただし、袋小路などが出来ないように、隣接ブロック数が1つ以下の部分は移動対象に追加
 ・移動の対象にならないブロックを「?」に置き換えてパネルの状態を圧縮
 ・ゴールは、「0」がどこにくるかわからないので、可能性がある分準備…
 ・1列全てだと移動できない場合、分割して移動するように処理を追加
 ・部分移動に成功した場合、移動済の部分は変更しない条件付きで経路探索を継続
 ・ここまで書けば4900問ぐらいまで解けた気がします

3. 問題を分割(上下左右端偏)
 ・下側、右側から埋めていくことを許容
 ・下側などから埋めると「0」の位置が問題になるので、予めゴールの「0」を移動させておく必要あり(後で、その移動に使った分を、経路に追加しておく)
 ・ここまで書くと4996問まで解けたと記憶しています

4. 残り4問を個別対応
 ・3問は、初期に移動するブロックを指定すれば解けました。
 ・1問は、ゴール状態を指定(=「0」のずらし方を指定)でなんとか解けました。

5. この時点て3万ぐらいLRUDが足りなかったので…^^;
 ・初期に与える移動ブロックを2行とか3行にするなど、部分移動量を増加(ロングパス狙いw)
 ・初期ブロックの与え方を変えた2PGを実行し終わった時点で、8000ぐらい余裕ができて、無事ゴール♪

#150点獲得後は、総当りのPGを改良して、最適解がいくつあるのか数えていました…
#Java7のFork/Joinをお試しに使ってみたので、性能評価したら公開したいかも…

【結論】
力技でも、満点は取れる!w