発端
codingameに新しいカードゲームが追加されたので
ポーカーのテキサスホールデムのAIを作成中
ポーカーの役を判定するルーチンをいくつか作ってみる
カードのデータ
4,5行目が場のカードとプレイヤーのカード
場のカードとプレイヤーのカードを合わせてポーカーの役をつくるらしい
この文字列をそのまま活用して役判定をしてみる
汎用変数名
s カードの文字列
c 一枚のカード(数値のみとマークあり)
sc 得点 カードの最高数値を入れるAは14とする
m マーク SDHC スペード ダイヤ ハート クラブ
汎用関数
all_in カードの文字列の中に指定されたカード群がすべて入っていたらカードの最高数値を返す
score カードの文字列内の最高数値を返す
pair_card 各数値が複数ある場合、その数と数値をタプルとしたリストを返す
ろくに設計もせず妄想で作って、まだ動作確認もしていないしろものです
あと4カード、フルハウス、ツーペア、ワンペアはpair_cardを活用して作成予定
今後の未定
相手のカードをランダムでできるだけ多く作成して
(さすがに全パターン計算を50msでは無理と判断)
その平均点との差で続けるかやめるか判定ぐらいでしょうか?
テキサスホールデムはやったことないです
追記
scoreにバグがあったので修正
あと全役をスコアとして返す関数を追加
全体の判定
場からのスコアと場と自分のカードとのスコア差によって
FOLDかCALL強気にBETさせてみる
挑戦
できたので投入 あっ強気の判定逆にしていた修正して再投入
結果
世界7位
世界七人中
正確なバグ取りは...してない
さらに追記
テスト
テストは開発において最重要な項目なので0はいかんということで
テスト関数を追加
あとストレート判定で上からしないと場と手札が6枚以上あるときに
万が一6枚ストレート時に低い点にしてしまうことに気がついて修正
テスト結果
想定結果になっていそう
カードのデータにミスがあったので2,3度見直してます
新しいアイデア降ってきていないので様子見