● | ● | ● | ● | ● | ● |
● | ● | ● | ● | ● | ● |
● | ● | ● | ● | ● | ● |
● | ● | ● | ● | ● | ● |
● | ● | ● | ● | ● | ● |
以下、この盤面を簡単に数字で、
1 4 3 5 4 6 1 3 5 1 1 1 1 2 2 2 5 4 4 2 4 5 5 3 3 2 5 6 6 6のように表記する。
消え方は以下の通り。
3 5 4 6 4 4 4 5 5 4 3 3 5 5 5 3のようになる。(実際のパズドラでは、ここで上からランダムに石が降ってきて 盤面の空白を埋めるが、ここではそれは考えない。) 更に3つ以上縦または横に繋がった石があれば、それも消え、重力で落ちる。 このプロセスを消える石がなくなるまで繰り返す。
この例だと、更に4と5が消えて、
6 3 4 4 3 3 5 5 5 3となり、5が消えて
6 4 3 3 3 4 3となり、3が消えて
6 4 4 3となって終了。合計8コンボということになる。
1 4 3 5 4 6 1 3 5 1 1 1 1 2 2 2 5 4 4 2 4 5 5 3 3 2 5 6 6 6のようなデータをファイルから入力し、このデータのコンボ数 (この場合なら8) を 表示するプログラムを作って欲しい。
(以下はデバッグ用にどうぞ)
4 4 3 3 4 1 4 5 3 2 4 5 1 4 4 6 5 6 1 2 5 1 1 2 5 3 5 3 6 5は 0 コンボ、
5 4 5 3 5 1 1 4 6 1 1 4 5 6 1 3 4 6 5 5 1 5 6 3 5 6 1 3 3 5は 3 コンボ、
1 1 1 3 4 1 1 5 1 2 4 5 1 4 1 6 5 6 1 1 1 2 3 2 5 3 5 3 6 5は 1 コンボである。
更に余力があるなら、実際のゲームのように、与えられた盤面の石配置に対して、 それを並べ替えてなるべくコンボ数が大きくなるようにするプログラムを 考えると面白い。例えば例に挙げた8コンボの盤面は、ランダムに生成した盤面
0 1 2 3 4 5 0 1 4 5 3 5 4 1 1 2 2 1 1 6 2 2 5 4 5 1 4 3 1 4 5 3 5 3 4 3 2 6 2 6 6に対して、
(3 3)(3 4)(4 4)(4 3)(4 4)(3 4)(2 4)(3 4)(3 3)(2 3)(1 3)(1 2)(0 2)(0 3)(0 4)(0 5) (1 5)(2 5)(1 5)(0 5)(1 5)(0 5)(1 5)(1 4)(1 3)(2 3)(2 2)(2 1)(2 2)(3 2)(4 2)(4 1) (4 2)(3 2)(3 1)(3 0)(3 1)(3 2)(4 2)(4 3)(3 3)(2 3)(3 3)(3 2)(4 2)(4 3)(3 3)(2 3) (2 2)(2 3)(2 2)(2 1)(1 1)(2 1)(2 0)(3 0)(3 1)(3 0)(2 0)(2 1)(2 0)(1 0)(0 0)(1 0) (2 0)(1 0)(0 0)(1 0)(1 1)(1 0)(0 0)(1 0)(2 0)(3 0)(4 0)(3 0)(3 1)(3 2)(3 3)(2 3) (2 4)(2 3)(2 4)(2 3)(2 2)(2 1)(1 1)(1 2)(1 3)(1 4)(2 4)(2 3)(1 3)(1 2)(1 1)のように「なぞって」生成したものである。