ビットボンバーマン 〜 横へな 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
となるので、これを出力すればよい。

補足

サンプルデータ

サンプルデータの「状況」項目の図は下表通りの意味である:

記号 茶色のマス 青い点 橙のマス
意味 爆弾 爆風

# 入力 期待 状況
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 用のテストデータ