ビットボンバーマン 〜 横へな 2013.3.1
問題
6✕5マスのフィールドがある。
フィールド内には壁と爆弾がある。
爆弾からは上下左右に爆風が出る。壁があるとそこで爆風が止まる。
爆風が吹き荒れる場所の地図を作成せよ。
計算の例
入力は
802b1200/01400c20
のような文字列で与えられる。
/
の前が壁、後が爆弾を示す。
これらを16進数とみなし、2進数に変換すると
10000000001010110001001000000000
/
00000001010000000000110000100000
となる。
これを、6✕5 のマス目に入れる。
使用するビットの順序は最上位ビット(MSB)から。
マス目の順序は左上から右へ進み、右端に達したら一つ下の行へ、という普通の順序。
ビットが 1 の場所には壁/爆弾 があることを意味し、ビットが 0 の場合にはそれらが無いことを意味する。
※ 入力が 32bit でマス目が30個なので下位(LSB)の 2bit が余るが、ここには必ず 0 が入っているものとする。
すると:
壁 |
爆弾 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
|
となる。
ここで
5
個の爆弾をすべて爆発させる。
爆風は爆弾そのものを含み、爆弾から上下左右にまっすぐしか進まない。
爆風は壁によって遮られる。
すると、
爆風の位置は
爆風 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
|
となる。この爆風の位置を左上から集め、先頭から4桁ずつ16進数に変換する(最後に足りない2bit はさらに 00 が続くものとして 16 進数にする)と
53c40cfc
となるので、これを出力すればよい。
補足
-
不正な入力(爆弾が壁の中にある、下位2bitが 00 ではない、など)に対処する必要はない。
-
実装ができた方は
Qiitaの記事
のコメント欄からリンクを張っていただくと見つけやすくて助かります。
サンプルデータ
サンプルデータの「状況」項目の図は下表通りの意味である:
記号 |
茶色のマス |
青い点 |
橙のマス |
意味 |
壁 |
爆弾 |
爆風 |
# |
入力 |
期待 |
状況 |
0 |
802b1200/01400c20
|
53c40cfc
|
|
1 |
28301068/84080504
|
d64fef94
|
|
2 |
100a4010/80010004
|
e241850c
|
|
3 |
81020400/000000fc
|
0e3cfbfc
|
|
4 |
80225020/7e082080
|
7fdd24d0
|
|
5 |
01201200/40102008
|
fe1861fc
|
|
6 |
00201000/01000200
|
43c48f08
|
|
7 |
00891220/81020408
|
ff060c1c
|
|
8 |
410033c0/0c300000
|
3cf0c000
|
|
9 |
00000000/01400a00
|
7bf7bf78
|
|
10 |
00000000/20000a00
|
fca2bf28
|
|
11 |
00000000/00000000
|
00000000
|
|
12 |
00cafe00/00000000
|
00000000
|
|
13 |
aaabaaaa/50000000
|
51441040
|
|
14 |
a95a95a8/56a56a54
|
56a56a54
|
|
15 |
104fc820/80201010
|
ea30345c
|
|
16 |
4a940214/05000008
|
05000008
|
|
17 |
00908000/05000200
|
ff043f48
|
|
18 |
00c48c00/fe1861fc
|
ff3873fc
|
|
19 |
00000004/81020400
|
fffffff0
|
|
20 |
111028b0/40021100
|
e08fd744
|
|
21 |
6808490c/01959000
|
17f7b650
|
|
22 |
30821004/81014040
|
c75de5f8
|
|
23 |
0004c810/10003100
|
fe4937c4
|
|
24 |
12022020/88200000
|
edf08208
|
|
25 |
2aa92098/01160000
|
45165964
|
|
26 |
00242940/10010004
|
fc43c43c
|
|
27 |
483c2120/11004c00
|
33c3de10
|
|
28 |
10140140/44004a04
|
eda3fe3c
|
|
29 |
0c901d38/72602200
|
f36da280
|
|
C/C++/Java 用のテストデータ