パーソナルブログメモリ

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

Python POKERの役の判定ルーチン からの世界挑戦 からのテスト

2023-08-16 | 新規1000万人ぐらいにプログラムをマスターしてもらいたい

発端

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度見直してます

 

新しいアイデア降ってきていないので様子見

 


最新の画像もっと見る

コメントを投稿

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