七並べではパスは3回まで。すでに3回パスをしているのにカードが出せない場合は失格です。

失格になったら手持ちのカードをテーブルの上に並べるなければなりません。この処理自体は簡単ですが、その他のプレイヤーが出せるカードがどれになるのか取得する方法を考える必要があります。

これまでは出されているカードの最大値や最小値の次の番号としていましたが、これを使うことはできません。GetCanTakeoutメソッドを作り直す必要があります。

テーブルの上に置かれているカードではなく欠けているカードに着目することができれば簡単でした。これに気づかず、この記事を書き直す前は長いコードを書いていました。(失敗)

カードが1~13まで全部そろっているのであれば出せるカードはない

トンネルが成立していない場合は

1.1~7で欠けているもののうち最大のもの
2.8~13で欠けているもののうち最小のもの

このふたつが出せるカードです。

トンネルが成立している場合、方向を考える必要があるのですが、

1.1~7に欠けているものはあるか
2.8~13に欠けているものはあるか

これを調べればわかります。

あとは

1 ⇒ 13 のトンネルが成立している
13以下で欠けているもののうち最大のものを探す

13 ⇒ 1 のトンネルが成立している
1以上で欠けているもののうち最小のものを探す

これで簡単に答えが出せてしまうのです。