ポーカーの残り+ 〜 横へな 2013.5.10 の参考問題

問題

ポーカーの役(抜粋)を判定する。
第一回の参考問題 に登場しなかった役を判定する。
それだけではつまらないので、カナディアンスタッド( see Wikipedia )にある「フォーストレートフラッシュ」のたぐいも判定する。
ジョーカーは使わず、52枚のデッキを使う。
対応すべき役は下表の通り(上にある役ほど強い):

名前 記号 説明
ロイヤルフラッシュ RF スートが全て同じ
ランクが 10, J, Q, K, A の5種類
♠10, ♠J, ♠Q, ♠K, ♠A
ストレートフラッシュ SF スートが全て同じ
ランクが連続している(註)
♡8, ♡9, ♡10, ♡J, ♡Q
フラッシュ FL スートが全て同じ ♢3, ♢9, ♢10, ♢J, ♢A
ストレート ST ランクが連続している(註) ♢3, ♢4, ♠5, ♣6, ♢7
フォーストレートフラッシュ 4SF 5枚のうち4枚のスートが同じ
その4枚のランクが連続している(註)
♠4, ♠5, ♡5, ♠6, ♠7
フォーフラッシュ 4F 5枚のうち4枚のスートが同じ ♠A, ♠5, ♡5, ♠6, ♠K
フォーストレート 4S 5枚のうち4枚のランクが連続している。(註) ♠A, ♣2, ♡3, ♠4, ♠K
註) ランクは、A, 2, 3, ..., 10, J, Q, K, A の順になっている。 Aは2の前とKの後のどちらにもなることができるが、Aを挟んでK, A, 2 とつなげることはできない。例えば、A,2,3,4,5 や 10,J,Q,K,A は連続したランクになるが、Q, K, A, 2, 3 は連続したランクにはならない。

入力と出力

入力は Qs9s3dJd10h のような形式。
入力文字列の順序はカードを引いた順であり、整列されていない。
各カードはランクとスートによって表現される。ランクは 2 3 4 5 6 7 8 9 10 J Q K A のいずれか。スートは s h d c のいずれか。
一枚のカードは ランクの文字列とスートの文字を 10s のように並べたもので、手札はカードを5個並べたものである。 カードとカードの区切りには空白はない。

補足

サンプルデータ

# 入力 期待
0 Qs9s3dJd10h 4S
1 KdAdJd10dQd RF
2 QhJhKhAh10h RF
3 10dAdJsQdKd ST
4 Kd10dAdJd3d FL
5 4d3d2dAd5d SF
6 5d5d2d3dAd FL
7 4d2sAd5d3d ST
8 As10dJdQdKd ST
9 10d10dQdAsJd 4F
10 AcJd10dQdKd ST
11 Kd2sJdAdQd 4SF
12 JdAdQcKd2s 4S
13 KdAdKdJd2s 4F
14 As2dKdQdJd 4F
15 AsKdQd2dJh 4S
16 QhAd2s3dKd -
17 Ad4dKh3s2d 4S
18 3d2dAh5d4s ST
19 QcKdAs2dJd 4S
20 2dQcJdAs10d -
21 4d7d5s3c2d 4S
22 7d5s4dAd3c -
23 3s8s10sQs6s FL
24 6hAh3h2h8h FL
25 3h4hJh9hQh FL
26 3s6s5s2sQs FL
27 9d3cKdQc2c -
28 5sKs7hQcKh -
29 Ad6d7h7c9h -
30 10h4cAh6s10c -
31 9sKsJcQs10d ST
32 5d3c2cAs4c ST
33 KcQs9c10sJs ST
34 9d8s10hJdQd ST
35 6c5s10h7d4c 4S
36 QhJcKsAh8c 4S
37 JsQc3h10cKs 4S
38 10c9h7hAd8d 4S
39 3d4dKd8d5c 4F
40 10h3hQh9h2s 4F
41 Qh5h7h9h6c 4F
42 6s8s7s3sKc 4F
43 10h8h9hJhQh SF
44 10h9hQhKhJh SF
45 6d4d7d5d3d SF
46 6h9h7h5h8h SF
47 Ac6s4s3s5s 4SF
48 3c9d2c5c4c 4SF
49 Kh2sQh10hJh 4SF
50 4h5h2h3h4s 4SF
51 Js10sAsQsKs RF
52 10dKdQdAdJd RF

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