パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

麻雀のあがったか判定ルーチン VERY HARD問題を解いてみる

2021-06-03 | CodinGame

問題 手牌が、国士無双と七対子と普通の手の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で検索して、探すことが出来ます。(一般投稿問題だけかも)


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。