眠れるモンスターを狩る 〜 横へな 2013.9.28

問題

物語

目の前にモンスターがたくさんいるが、誰かの魔法のおかげか、全員寝ている。
モンスターについての情報はしっかり把握しており、どのモンスターを倒すにはどんな武器が必要かなどはちゃんとわかっている。

さて。
あなたは何匹のモンスターを狩ることができるだろうか。

ルール

ダンジョンには以下のモンスターがいる。

モンスター(記号) 倒すのに必要な武器(記号) 倒すと手に入る武器(記号)
BuruBuru ( B ) AssaultRapier ( a ) CoiledSpear ( c )
DainaRex ( D ) CoiledSpear ( c ) EnchantedRod ( e )
FatherConga ( F ) EnchantedRod ( e ) GodAxe ( g )
HiruScura ( H ) GodAxe ( g ) IceSword ( i )
Javaanos ( J ) IceSword ( i ) KingsLance ( k )
LalalaLalala ( L ) KingsLance ( k ) AssaultRapier ( a )

最初の状態ではあなたにモンスターは倒せない。床に落ちている武器を拾い、それで倒す。
武器はいずれも頑丈で、モンスターを何匹倒しても劣化したり壊れたりしない。
武器は、モンスターを倒して手に入れることもできる。
あなたのモンスターへの攻撃は必ず成功する。攻撃の喧騒でほかのモンスターが起きたりもしない。
あなたのじゃまをするものは誰も居ない。落ちている武器とモンスターから手に入る武器を活用して倒せる限りのモンスターを倒そう。

入力と出力

入力は
gLDLBgBgHDaD
のような形式をしている。各文字の意味は下表のとおり。

記号 意味
モンスター B, D, F, H, J, L
武器 a, c, e, g, i, k

したがって、この入力文字列は目の前に

ということを意味している。

この状況では、拾った武器やモンスターを倒して手に入れた武器を駆使すると、 6 体のモンスターを倒すことができる。
したがって、 6 という文字列を出力すればよい

補足

サンプルデータ

# 入力 期待
0 gLDLBgBgHDaD 6
1 DBcDLaLgDBH 6
2 JJca 0
3 FJDLBH 0
4 HJBLFDg 6
5 HBaDLFJ 6
6 DJaHLB 2
7 gDLHJF 3
8 cJFgLHD 5
9 FFBJaJJ 1
10 FJeJFBJ 2
11 iJFFJJB 3
12 JBJiLFJF 5
13 JDiFLFBJJ 8
14 BDFDFFDFFLLFFJFDBFDFFFFDDFaDBFFB 28
15 DDFBFcBDFFFFFFLBFDFFBFLFDFDJDFDF 24
16 FDLBFDDBFFFeFFFFFDFBLDDFDDFBFFJF 16
17 FDBFFLFDFFDBBDFFBJDLFgDFFFDFFDFF 0
18 FDiFLDFFFFBDDJDDBFBFDFFFBFFDFLFF 31
19 FDFDJBLBLBFFDDFFFDFFFFFDDFBkFDFF 30
20 HBkFFFFHBLH 3
21 FBHHFFFHLaB 2
22 LFHFBBcHFHF 0
23 LFBHFFeFHBH 7
24 LgFHHHBFBFF 3
25 FFiFHBHLBFH 0
26 BFHHFFHBeFLk 10
27 FHFaBBHFHLFg 5
28 FFgacaFg 0
29 JHDaDcBJiiHccBHDBDH 9
30 FHJJLckFckFJHDFF 12
31 DeDHJHDFHJBLHDLLDHJLBDD 22
32 gJLLLJgJgJLJL 0
33 DaaaDDD 0
34 HFeJFHiBiiBJeJBBFFB 9
35 FJFFJDBHBHaLJBHJHDLHkLLLFFFgJgHJLHkJkB 32
36 giFLBiBJLLJgHBFJigJJJBLHFLDLL 23
37 cgkLJcLJJJJgJc 2
38 LDFHJHcFBDBLJBLFLcFJcDFBL 22
39 JJHHHkHJkHLJk 1
40 kHHBBaBgHagHgaHBBB 11
41 HDBFFDHHHDFLDcHHLFDcJD 20
42 HFFFHeFFee 7
43 gLLDHgDLgFL 1
44 JJJBBaBBHBBHaLBHJ 7
45 FBFBgJBDBDgF 0
46 LLLLakakLakLL 7
47 HeJHeJe 0
48 LDFLBLLeBLDBBFFBLFBB 4

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