2014 TCO Marathon Round 12014 TCO Marathon Round 1
SquareRemoverSquareRemover
- 2x2- 2x2の四角を作って消そうの四角を作って消そう --
参加メモ参加メモ
@yowa
どんな問題?
● 隣接するマスを入れ替えることができる
どんな問題?
● 隣接するマスを入れ替えることができる
●
2x2の四角を作ると消える (スコア+1)
どんな問題?
● 隣接するマスを入れ替えることができる
●
2x2の四角を作ると消える (スコア+1)
● 消えた場所は Next(既知)で置き換えられる
どんな問題?
● 隣接するマスを入れ替えることができる
●
2x2の四角を作ると消える (スコア+1)
● 消えた場所は Next(既知)で置き換えられる
●
1万ターンで多くスコアを稼ごう!
– 消した数=スコア
– 連鎖や同時消ししてもボーナスは無い
やったこと
● ビームサーチ
– 少ない手数(1手~)で消せるとこを探す
– 消 してみて高得点だったものを残す
少手数で消せるとこ探す?
例)
● この盤面で、4手以内で
消せるパターンを
探してみよう
(例)盤面サイズ N = 6,
     色の数 C = 4
(実際は 8 N 16, 4 C 6≦ ≦ ≦ ≦ )
少手数で消せるとこ探す?
例)
● この盤面で、4手以内で
消せるパターンを
探してみよう
(例)盤面サイズ N = 6,
     色の数 C = 4
(実際は 8 N 16, 4 C 6≦ ≦ ≦ ≦ )
どうやればいいか
 わかんない!
少手数で消せるとこ探す?
● 可能な手を全列挙して、消えるか確かめる?
– 1手 → O(N^2)
– 2手 → O(N^4)
– 3手 → O(N^6) ... キリがない!
●
(見落としがあってもいいので)決まった時間で
探せるとありがたい
こうやった
● 目標の場所と色を決める(図では、中央に青)
こうやった
● 目標の場所と色を決める(図では、中央に青)
● 目標を中心に盤を四分割して
領域内での移動だけ考える
– 各領域内の最短距離は
O(N^2)の前処理DPで
求めておける
こうやった
● 目標の場所と色を決める(図では、中央に青)
● 目標を中心に盤を四分割して
領域内での移動だけ考える
– 各領域内の最短距離は
O(N^2)の前処理DPで
求めておける
●
O(N^2 C) の処理で
(N-1)^2 C 個の消せるパターンを列挙できた!
● 別領域から動かしたほうが近いケースを
見落とすけどね……。
評価関数
● 単純に 「(現在のスコア)÷(現在の手数) が大きい
盤面ほど良い」で、それなりに動く
● もう一声!
L字型はエラい
L字型はエラい
● ヘコみの隣接マスに同色があれば
1手で消せる形!
L字型はエラい
● ヘコみの隣接マスに同色があれば
1手で消せる形!
● ヘコみに合わせて他の色を
消すと、Next 次第で
連鎖が起きる!
L字型はエラい
● ヘコみの隣接マスに同色があれば
1手で消せる形!
● ヘコみに合わせて他の色を
消すと、Next 次第で
連鎖が起きる!
⇒ L字型1個につき、評価値を +1/C した
やらなかったこと
●
Next を先読みして、それに合わせた盤面操作
● 兄弟ノードでの情報共有
– 1回の消去では局所的にしか変化しない
– 兄弟ノードは盤面の大部分が共通
– ある盤面で大連鎖できたら、その兄弟ノードでも同じ
場所で大連鎖できるかも!
– ……みたいなこと
おしまい      
――――――――――  
製作・著作 @yowa   

2014 TCO Marathon Round 1 (yowa)