大貧民 〜 横へな 2012.11.9

問題

大貧民(大富豪ともいう)の、場の札と手札が与えられる。
その手札から出せる手として可能なものをすべて出力せよ。
※ 出せる手がひとつもない場合は - を出力すること。
※ 一般的な大貧民については 大富豪 - Wikipedia を参照のこと。
※ 解答へのリンクを Qiita のコメントに書いてくださると探しやすくて助かります。

ルールの詳細

使うデッキは、joker 1枚を含む 53枚のカード。
カードの強さは下表の通りの順序になっている:

弱い← 3 4 5 6 7 8 9 10 J Q K A 2 単独のJoker →強い
出せるカードは の3つの条件をすべて満たす必要がある。また、場に出ているカードも同一ランクの複数枚または一枚である。

カードの表現

Joker 以外のカードはスートを表す文字+ランクを表す文字 の二文字で表現される。
スートを表す文字は、 S,D,H,C のいずれか。
ランクを表す文字は、 2,3,4,5,6,7,8,9,T,J,Q,K,A のいずれか。(10はTで表現される)
Joker はスートもランクも持たず、 Jo

入力と出力

場のカードと手札をコンマ区切りでつなげた文字列が入力である。
場のカードと手札は、区切り文字なしで繋げられている。手札も場のカードもソートされていない。
出力は、出せる可能性のある手を全て、コンマ区切りで。手の中のカードには区切り文字を入れない。
例えば、場に♥7とjokerがあり、手札が♠3, ♥9, ♦9, ♣9, ♣10, ♥J, ♦2, ♣2 である場合

入力 H7Jo,S3H9D9C9CTHJD2C2
出力例1 H9D9,H9C9,D9C9,D2C2
出力例2 C9H9,H9D9,C2D2,D9C9

となる。
出力については、可能な手の順序も、可能な手の中のカードの順序も問わない。

部分問題

制限時間内は全然解けそうにない場合は、場のカードの枚数を1枚に制限した問題にチャレンジするのが良いと思う。

補足

サンプルデータ

# 入力 期待
#1 DJ, -
#2 H7,HK HK
#3 S3,D4D2 D4,D2
#4 S9,C8H4 -
#5 S6,S7STCK CK,ST,S7
#6 H4,SAS8CKH6S4 S8,CK,H6,SA
#7 ST,D6S8JoC7HQHAC2CK Jo,C2,CK,HA,HQ
#8 SA,HAD6S8S6D3C4H2C5D4CKHQS7D5 H2
#9 S2,D8C9D6HQS7H4C6DTS5S6C7HAD4SQ -
#10 Jo,HAC8DJSJDTH2 -
#11 S4Jo,CQS6C9DQH9S2D6S3 DQCQ,D6S6,H9C9
#12 CTDT,S9C2D9D3JoC6DASJS4 JoC2,SJJo,DAJo
#13 H3D3,DQS2D6H9HAHTD7S6S7Jo JoHA,JoD6,JoH9,D6S6,D7S7,JoS6,HTJo,JoDQ,S2Jo,JoD7,JoS7
#14 D5Jo,CQDAH8C6C9DQH7S2SJCKH5 CQDQ
#15 C7H7,S7CTH8D5HACQS8JoD6SJS5H4 HAJo,JoSJ,H8S8,H8Jo,CQJo,CTJo,JoS8
#16 SAHA,S7SKCTS3H9DJHJH7S5H2DKDQS4 -
#17 JoC8,H6D7C5S9CQH9STDTCAD9S5DAS2CT CTDT,H9D9,S9D9,DACA,CTST,H9S9,DTST
#18 HTST,SJHJDJCJJoS3D2 DJCJ,SJDJ,JoHJ,CJHJ,SJJo,HJSJ,DJJo,JoCJ,JoD2,SJCJ,DJHJ
#19 C7D7,S8D8JoCTDTD4CJ D8S8,JoS8,CTJo,DTJo,JoCJ,CTDT,D8Jo
#20 DJSJ,DTDKDQHQJoC2 JoDK,HQDQ,DQJo,C2Jo,JoHQ
#21 C3H3D3,CKH2DTD5H6S4CJS5C6H5S9CA S5H5D5
#22 D8H8S8,CQHJCJJoHQ JoCQHQ,JoHJCJ
#23 H6D6S6,H8S8D8C8JoD2H2 D2H2Jo,D8JoS8,D8S8C8,C8D8H8,JoC8S8,H8JoC8,S8H8C8,JoS8H8,C8JoD8,D8H8S8,D8JoH8
#24 JoD4H4,D3H3S3C3CADASAD2 DACASA
#25 DJHJSJ,SQDQJoHQCQC2CA SQJoCQ,DQCQJo,JoSQHQ,SQCQHQ,DQHQSQ,HQDQCQ,HQDQJo,SQDQCQ,CQJoHQ,SQJoDQ
#26 H3D3Jo,D4SKH6CTS8SAS2CQH4HAC5DADKD9 HASADA
#27 C3JoH3D3,S2S3H7HQCACTC2CKC6S7H5C7 -
#28 H5C5S5D5,C7S6D6C3H7HAH6H4C6HQC9 C6D6S6H6
#29 H7S7C7D7,S5SAH5HAD5DAC5CA SADACAHA
#30 D4H4S4C4,S6SAH6HAD6DAC6CAJo C6H6S6D6,SAJoDACA,S6H6C6Jo,SACAJoHA,HADASAJo,HADAJoCA,CADAHASA,D6C6JoH6,S6D6C6Jo,H6JoS6D6
#31 DTCTSTHT,S3SQH3HQD3DQC3CQJo HQSQJoDQ,SQCQDQJo,DQCQHQJo,SQHQJoCQ,CQDQHQSQ
#32 JoS8D8H8,S9DTH9CTD9STC9CAC2 H9C9D9S9

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