折って切る 〜 横へな 2014.1.10 問題

問題

入力文字列の指示通りに紙を折り、折った紙の角を切り落として、元のように開いた場合、穴が何個できるか計算せよ。

折り方は四通り。

記号 折り目の方向 折り方
R 右半分を手前に折って、左半分に重ねる
L 左半分を手前に折って、右半分に重ねる
T 上半分を手前に折って、下半分に重ねる
B 下半分を手前に折って、上半分に重ねる

切る場所は四隅のいずれか。
つまり、右上、左上、右下、左下のどれかになる。
一箇所しか切らない。

例えば。
上記の記号で RRTRB と表されるような折り方をしてから左下を切り落とした場合、下図のようになるので、穴の数は 6 個となる。

入力と出力

入力は
RRTRB-bl
こんな感じ。
ハイフンの前にある大文字の文字列は、折り方を示す。
ハイフンの後が、切る場所。切る場所の記号と位置の対応関係は、下表の通り:

記号 tl tr bl br
切る場所 左上 右上 左下 右下

出力は、できる穴の数を 10 進数の文字列で。
上記の例だと穴の数は 6 なので、
6
を出力ればよい。

補足

サンプルデータ

# 入力 期待
0 RRTRB-bl 6
1 R-tr 0
2 L-br 0
3 T-tl 0
4 B-tl 0
5 BL-br 0
6 LB-tl 0
7 RL-tl 0
8 BL-tl 0
9 TL-bl 0
10 RT-tr 1
11 TRB-tl 0
12 TRL-bl 0
13 TRB-br 2
14 LLB-bl 2
15 RTL-tr 1
16 LBB-tr 0
17 TLL-tl 2
18 RLRR-tr 0
19 BBTL-tl 4
20 TBBT-tr 0
21 LLBR-tl 0
22 LBRT-tl 2
23 RLBL-bl 4
24 BRRL-br 3
25 TBBTL-tl 8
26 TLBBT-br 0
27 LRBLL-br 7
28 TRRTT-br 6
29 BBBLB-br 0
30 RTTTR-tl 4
31 BBLLL-br 6
32 RRLLTR-tr 16
33 TTRBLB-br 8
34 LRBRBR-bl 14
35 RBBLRL-tl 8
36 RTRLTB-tl 12
37 LBLRTR-tl 14
38 RRLTRL-tl 16
39 TBLTRR-br 12
40 TTTRLTT-bl 30
41 TBBRTBL-tr 15
42 TRTRTLL-tr 28
43 TLLRTRB-tr 24
44 RLLBRLB-tr 15
45 LTLRRBT-tr 32
46 RBBRBLT-br 21
47 LLRLRLR-tr 0

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