問題 手牌が、国士無双と七対子と普通の手の3種類であがっているか判断する。
https://www.codingame.com/ide/puzzle/completed-mahjong-hands
入力のサンプル(4つ)とルール
222888m444p2277z 7z
333999m555p1133z 1z
122223567m3555p 4p
19m199p19s123467z 5z
m まんず、p ピンズ、s そうず、z じはい (麻雀ほぼ知りません)
zはシーケンスにはならない東南西北白發中を1から7まで数字をふっています。
入力が あがっていればTRUEそうでなければFALSEを表示。
データ検討
辞書型で萬子 1, 2, 3, 4, 5, 6を持っていれば
j["m"] = [1, 2, 3, 4, 5, 6]
こんなデータ型にする。
データ読み込み
30行から40行まで 入力文字列をひっくり返して、スペースを取って、
各種類ごとに追加していき、最後に数値の配列を昇順でソート。
判定
作成順は国士無双、七対子、3牌同じもの4つと頭(同じ牌2つ)
残った、3牌並びと3牌同じものの判定
3牌が並びの時それを取っていき、3牌同じものと頭になったとき勝ちという判定を再帰で全パターン行う
関数でいうと 19行 cut_seqで並びを取っていき、10行 p_headで残り牌が3牌同じものと頭、もしくは頭のみのときTRUEとしました。
最後に国士無双の想定が足りなかったので修正(テストケースから頭は字牌のみと勘違い)
CodinGameで、SUBMIT時のテストケースでエラーが発生して、どうしようもない時の対応
COMMUNITYのcontributions から Accepted Puzzlesで検索して、探すことが出来ます。(一般投稿問題だけかも)