ハニカム歩き 〜 横へな 2013.5.10

問題

下図のような六角形のマス目の上を、入力文字列の指示に従って移動する。

※ 大文字と小文字の区別がしやすいよう、小文字をイタリックにしている。
最初にいるマスは、中心にある A
移動方向にマスがない場合は移動を行わない。
マス目の間の移動は 05 の番号によって示され、番号と移動方向の対応は下表の通り。

番号 0 1 2 3 4 5
方向 右上 右下 左下 左上
A → B A → C A → D A → E A → F A → G

入力と出力

入力文字列は 135004 のように、方向を表す数字が区切り文字なしで並んでいる。

出力する文字列は、 ACDABHS のような、通過したマス目の名前を区切り文字なしでつないだものとする。
最初にいたマスと最後に到達したマスは必ず出力する。例えば、入力が 1 なら、出力は AC となる。
小文字 c のマスから下(3の方向)に行こうとした場合など、移動方向にマスがない場合、移動は行わないが、 ! を出力する。例えば、入力が 33333120 の場合、 AENc!!b!M を出力する。

補足

サンプルデータ

# 入力 期待 イメージ
0 135004 ACDABHS
1 1 AC
2 33333120 AENc!!b!M
3 0 AB
4 2 AD
5 3 AE
6 4 AF
7 5 AG
8 4532120 AFQPOEMD
9 051455 ABSHSj!
10 23334551 ADMb!cdeO
11 22033251 ADLKLa!ML
12 50511302122 AGSjkTHTU!VW
13 000051 ABHT!!!
14 1310105 ACDKJW!V
15 50002103140 AGSk!HU!IVIU
16 3112045 AEDKYXKC
17 02021245535 ABCIJW!JIHBS
18 014204 ABIBCIB
19 255230 ADAGAEA
20 443501 AFPefgQ
21 022321 ABCKLZ!
22 554452 AGRh!!Q
23 051024 ABSHTUH
24 524002 AGAFGSB
25 54002441132 AGQRjSRhRSGA
26 11010554312 ACJV!!UTkSHI
27 23405300554 ADMNEFOFGRi!
28 555353201 AGRih!gPQG
29 22424105 ADLMabaLD
30 11340202125 ACJKDCKJX!!J
31 4524451 AFQFPf!P
32 44434234050 AFPf!!e!!Pgh
33 00554040132 ABHk!j!i!jRG
34 3440403 AEOePfgf
35 111130 ACJW!XW
36 21133343125 ADKXYZ!a!Z!L
37 353511 AEFOPFA
38 22204115220 ADLZYLY!KY!X
39 03013541 ABABICBGB
40 101344 ACIVJCA
41 2432541 ADENbNdN
42 45332242015 AFQPedc!!NME
43 215453 ADKCAGF
44 45540523454 AFQh!i!RQg!!
45 42434302545 AFEOd!!ONOef

C/C++/Java 用のテストデータ