Android/myself2011/08/29 17:01
スライドパズル

幅が 3 マスから 6 マスで、高さが 3 マスから 6 マスのボードが与えられます。 各マスは、パネルが置かれているか、壁があるか、空白であるかのいずれかです。 パネルには 1 から 9 あるいは A から Z のいずれかの文字が書かれており、同じ文字の書かれたパネルは存在しません。 壁は 0 個以上存在し、空白のマスはただ 1 つだけ存在します。 例えば、次のようなボードが与えられます。ここで、壁は = で、空白は 0 で表されています。

40=

215

=86


空白は、上下左右のマスのパネルと入れ替えることができます。上のマスのパネルと入れ替えることを U とよび、同様に、下左右のマスのパネルと入れ替えることをそれぞれ D, L, R とよぶものとします。壁を空白やパネルと入れ替えることはできません。

パズルを解くというのは、与えられたボードの各マスを操作して、ゴール状態に持っていくことです。

ゴール状態とは、上の行から各行順番に、左から右に 1, 2, 3, 4, ..., 9, A, ..., Z という順にパネルが並び、最も右下のマスに空白が配置された状態のことです。壁のあるマスに対応するパネルは存在しません。例えば、左上のマスが壁であれば、ボード上に 1 のパネルは存在しません。

例えば、上で与えられたボードのパズルを解くと以下のようになります。

4 0 =                      1 2 =
2 1 5         ->          4 5 6
= 8 6                      = 8 0

いま、使うことができる L, R, U, D それぞれの総数があたえられます。 この総数は全パズルで共有されています。 例えばあるパズルを解くために L を使い切ってしまった場合、 他のパズルでは L を使うことはできません。 この総数を超えないようにしながら、なるべくたくさんのパズルを解いてください。

得点
パズルをひとつ解くごとに 0.01 点が加算されます。全問解くと 50 点になります。 あるパズルが不正解だった場合、またはスキップした場合は、そのパズルに関する得点は加算されません。L, R, U, D いずれか一つでも使うことができる総数を超えていた場合は、各パズルの正解不正解にかかわらず 0 点となります。

入力と解答
入力フォーマット

LX RX UX DX
N
w1,h1,b1
w2,h2,b2
...
wN,hN,bN


LX, RX, UX, DX: 使うことができる L, R, U, D それぞれの総数
N: 総ボード数 (整数)
wi: ボードの幅 [3-6]
hi: ボードの高さ [3-6]
bi: ボード初期状態 [0-9A-Z=] からなる文字列

ボードは
0: 空白
=: 壁
1-9 A-Z: それぞれのパネル。
ボードは行を上から下の順に一列に並べた文字列として与えられます。すなわち、

40=
215
=86


は、文字列 40=215=86 として与えられます。

ゴールは左上隅が 1。空白は右下隅。壁になっているところに対応するパネルは存在しません。

ゴール例:

1234
5678
9ABC
DEF0

123=
5=78
9=BC
DEF0


こちら から入力データをダウンロードできます

解答フォーマット
各行はそれぞれの問題に対応する LRUD の列。

解答例:

URRD
DDRRRRULLULLDDDRRRR

RRUULLD


- 特定の問題の解答を飛ばしたい場合は、対応する行に空行を出力してください。

Google 번역


저작자 표시 비영리 동일 조건 변경 허락
Posted by mirwing