問題タブ [poker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
9 に答える
31710 参照

algorithm - 7カードポーカーハンドエバリュエーター

セブンカードポーカーハンドを評価するための高速アルゴリズムを知っている人はいますか?7枚のセットから21枚の5枚のカードの組み合わせごとにブルートフォースチェックを行うよりも効率的な方法です。

乾杯、

ピート

0 投票する
4 に答える
110 参照

c++ - C++ の Table クラスの 2 つのメンバー関数に関するフィードバックが必要です

Texas Hold Em Poker シミュレーション用の Table クラスのこれら 2 つのメンバー関数について、フィードバックをお願いします。情報の構文、効率、または一般的な慣行さえも高く評価されます。

0 投票する
1 に答える
460 参照

user-interface - テキストボックスから情報を取得する-フルティルトポーカー

フルティルトポーカーのGUIには、現在のハンドの状態を報告し続けるテキストボックスがあります。私はそのテキストを解析できるようにしたかったのですが、それにアクセスする方法がわからないので、誰かが私を正しい方向に向けることができれば、私はそれを大いに感謝します。

GUIとテキストボックスを含む画像:http://img143.imageshack.us/img143/6660/ftpbox.jpg

0 投票する
11 に答える
1234 参照

c - 小さな配列の要素をソートするのと乗算するのとでは、どちらが速いでしょうか?

Cactus Kev の Poker Hand Evaluatorを読んで、次の記述に気付きました。

最初は、ハンドをエバリュエーターに渡す前にいつでも簡単にソートできると思っていました。しかし、並べ替えには時間がかかるため、手を並べ替えるために CPU サイクルを無駄にしたくありませんでした。5 枚のカードがどのような順序で与えられたかを気にしない方法が必要でした。
...
よく考えた後、素数を使用するブレインストーミングを行いました。13 のカード ランクのそれぞれに素数の値を割り当てます。このシステムの優れた点は、手札にある各カードのランクの素数を乗算すると、順序に関係なく一意の製品が得られることです。 5枚のカードのうち。
...
乗算はコンピューターが実行できる最速の計算の 1 つであるため、評価の前に各ハンドをソートすることを余儀なくされていた場合、時間を数百ミリ秒短縮できました。

私はこれを信じるのに苦労しています。

Cactus Kev は各カードを 4 バイトの整数として表し、 を呼び出してハンドを評価しeval_5cards( int c1, int c2, int c3, int c4, int c5 )ます。カードを 1 バイトで表し、ポーカー ハンドを 5 バイトの配列で表すことができます。この 5 バイトの配列をソートして一意のハンドを取得するのは、かなり高速に違いありません。彼のアプローチより速いですか?

彼の表現 (4 バイト整数としてのカード) を保持するとどうなるでしょうか? 5 つの整数の配列を並べ替えると、それらを乗算するよりも高速になりますか? そうでない場合、少数の要素のソートを高速化するために、どのような低レベルの最適化を行うことができますか?

ありがとう!

皆さん良い答えです。ハードパフォーマンス統計を取得するために、並べ替えと乗算のパフォーマンスのベンチマークに取り組んでいます。

0 投票する
2 に答える
1999 参照

c# - IComparable と OrderBy。C# でポーカーの手を並べ替えようとしている

ポーカーの手を分析する簡単なプログラムを作成しようとしています。n 人のハンド/プレイヤーとコミュニティ カード (テキサス ホールデム) が与えられた場合、勝者を決定したいと思います。ただし、正確な結果が 2 つある場合、テストは失敗します。勝者は 1 つしか返されません。つまり、ハンドの結果には両方のプレーヤーの JJ 9 9 K が含まれていますが、私の勝者リストには 1 つが含まれています。

ここに投稿する理由はいくつかあります。明らかに、最初の存在は、ここで明らかに間違っていることはありますか? これはソートを実装するための良いアプローチですか (ソートを分離する理由がわかりませんでした)、より良いアプローチがあり、その理由は?

プレイヤーの HandResult で注文を実行する DecisionWinners メソッドがあります。

これが私のハンド結果クラスです:

GetCardResult メソッドは、単純にカードの整数表現、つまり 1 ~ 14 を返します。HandRanking 列挙型は次のとおりです。

これは、HandRanking 列挙型の GetGrouping 拡張機能です。値を比較するときにカードを反復処理するために使用されます。

よろしくお願いいたします。

編集: CompareTo_Equal、CompareTo_LessThan、CompareTo_GreaterThan (演算子のオーバーロードを使用) のテストは、それぞれ 0、-1、1 の結果で成功します。Linq.OrderByDescending の実装に問題があると思われるようになりました。これは CompareTo 実装を使用しているだけだと思いますが、間違っていますか?

0 投票する
2 に答える
2514 参照

regex - ストレートポーカーハンドを計算するための正規表現?

ストレートポーカーハンドを計算するための正規表現はありますか?

次のように、並べ替えられたカードを表すために文字列を使用しています。

Javaでは、次の正規表現を使用しています。

正規表現を使用してストレート(シーケンス)値を計算する方法は?

編集

同じ問題を解決するために別の質問を開きますが、正規表現を短くするためにcharのASCII値を使用します。詳細はこちら

ありがとう!

0 投票する
4 に答える
1082 参照

regex - ストレートポーカーハンドを計算するための正規表現-ASCIIコードの使用

別の質問では、正規表現を使用してストレートポーカーハンドを計算する方法を学びました(ここ)。

さて、好奇心から、質問は次のとおりです。ASCIIコードを使用して、正規表現を使用して同じことを計算できますか?

何かのようなもの:

正規表現:[C] [C + 1] [C + 2] [C + 3] [C + 4]、CはASCIIコード(またはこのように)

一致:4567823456

一致しません:45679または23459(順番になっていない)

0 投票する
3 に答える
2636 参照

c# - より良いC#ポーカーフレームワークデザイン?

私はC#でポーカーフレームワークを書いていますが、現在持っているデザインが好きではありません。私の目標は、バッチモードで複数のAIエージェントを互いに非常に迅速にプレイし、複数のAIエージェントと複数の人間を(おそらくSilverlightクライアントを介して)プレイできるゲームエンジンを用意することです。効率を高く保ちながら柔軟性を維持したいのですが、たとえば、リミットホールデム、ノーリミットホールデム、リミット7カードスタッドなどのゲームをプレイできる必要があります。

私の現在のデザインはかなり不格好で柔軟性がありません:

  • HandHistory:現在のハンドに関するすべての情報が含まれています(プレーヤー、ベットなど)
  • IPlayer:すべてのプレーヤーがGetAction(HandHistory history)メソッドを定義します。
  • GameEngine:HandHistoryオブジェクトを返すPlay(HandInfo info)メソッドを定義します。
  • PotManager:ポットを管理し、各プレイヤーがコールする必要のある金額と勝つことができる金額を決定します(たとえば、スタックが等しくなく、オールインしている場合)。
  • BetManager:賭けを管理し、賭けラウンドがいつ終了するかを決定します。

HandInfoクラスには、ハンドのセットアップ方法に関するすべての情報が含まれています。Playメソッドは次のようになります。

問題が発生するのは、ブラインドを集めるなど、考慮すべき小さなことがたくさんあるためです。ポットマネージャークラスとベットマネージャークラスは悪夢になり、常にバグがたくさんあります。また、私のエンジンデザインは、他のゲームタイプ(Hold'em)とは対照的に1つのゲームタイプ(Hold'em)のみをサポートします。

エンジンは主に数十億のハンドでAIシミュレーターとして使用されているため、私の主なランキングは効率の第一位です。しかし、これを行うにはもっとエレガントな方法があると思います。

0 投票する
3 に答える
977 参照

php - preg_replace 複数のインスタンスを 1 行で置き換えますか?

ポーカー ソフトウェアからこのようなテキストがあります (交換が必要な部分を強調表示しています)。

--- フロップ --- [Jh 9h Ah]
ドライバーシート チェック
darrington の残り 15 秒のアクション
darrington ベット 100
InvisibleEnigma コール 100
ドライバーシート フォールド
--- TURN --- [Jh 9h Ah] [3c]
darrington ベット 200
InvisibleEnigma コール 200
--- 川 --- [Jh 9h Ah 3c] [Td]

Jh = ハートのジャック
9h = ハートの 9
Ah = ハートのエース
3c = クラブの 3

角括弧内のカードをIMAGESに置き換えたい。

したがって、この行: --- TURN --- [Jh 9h Ah] [3c]
になる必要があります: --- TURN --- jh.gif 9h.gif ah.gif 3c.gif

preg_replace を理解できません :( [3c] のように、ブラケット内の 1 つのカードだけを理解することはできますが、1 行の複数のインスタンスと 3 枚のカードを持ついくつかのブラケットを置き換えることに行き詰まっています。 2枚または1枚のカードを持ついくつかのブラケット。

これは私が単一のカードのために持っているものです:

どんな助けでも大歓迎です。

0 投票する
11 に答える
3587 参照

artificial-intelligence - オンラインポーカーチートの検出

最近、大規模なポーカーサイトで、発見されたセキュリティの脆弱性を悪用してプレイしているときに、一部のプレーヤーがすべての対戦相手のカードを見ることができる可能性があることが明らかになりました。

ナイーブなチートは信じられないほど速い速度で勝ちます、そしてこれらのチートは通常非常に速く捕らえられます、そして速く捕まえられないならば、彼らは彼らの手の歴史を通して速いスキャンを通して簡単に見つけることができます。

より難しい問題は、詐欺師が知性を示し、呼び出される場所をブラフし、最悪の手でリバーベットをコールするときに発生します。基本的な前提は、他のプレーヤーのカードを見る能力を偽装するために意図的にポットを失うことです。そして彼らはかなり現実的なレートで勝ちます。

与えられた:

  • 何百万もの検証済みの完全な情報ハンド履歴のデータセット
  • 理論上の無制限のコンピュータパワー
  • オマハやリミットポーカーに関する提案は有益かもしれませんが、ゲームノーリミットホールデムを想定してください。

これらの詐欺師を合理的に正確に分類するにはどうすればよいでしょうか。オリジナルの2+2スレッドはアイデアをアピールし、SOコミュニティにはいくつかの有用な提案があるのではないかと思いました。

これは現在のものであり、誰かが創造的な解決策を見つけた場合に世界を改善するのに実際に適用されるという点でも興味深い問題です。特定された詐欺師が発見されたときに本物のプレーヤーが資金を払い戻す可能性が高いからです。