ほぼ静的な計画法

競技プログラミングで解いた問題の解法とコードを晒していくページ。ややマイナーなC♯。

AOJ 0038 (Poker Hand : ポーカー)

【問題】

https://onlinejudge.u-aizu.ac.jp/problems/0038

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0038

【解説】

ポーカーの役判定を行う問題。以下の優先順位に従って判定していけばよい。

  1. 同一のカードが4枚あればフォーカード
  2. 同一のカードが3枚がある、かつ同一のカードが2枚あればフルハウス
  3. "ストレート判定"結果がtrueならストレート
  4. 同一のカードが3枚あればスリーカード
  5. 同一のカードが2枚ある数字が2組あればツーペア
  6. 同一のカードが2枚あればワンペア
  7. それ以外はノーペア

ストレート判定については、カードを昇順にソートし、組み合わせが{1,10,11,12,13}、または各カードの差が1であれば、trueを返すようにすればよい。

上記の判定のため、カードのナンバーをインデックスとしたコレクションを用意して起き、度数表のようにカードの数を格納しておくと、Linqを使用して簡単に判定できる。

【コード】