Texas Holdem Online
Free Holdem Online
PokerStrategy
BankrollMob
Your Poker Cash
888 Poker Online
PokerSource
Gratis poker bonus Texas Holdem poker bonus
Play texas holdem
Play Online Poker with Titan Poker
Poker ohne einzahlung
Gutshot Straight(2014) - Steven Seagal - 5/10
Rounders (1998) - Matt Damon, Edward Norton, John Malkovich - 8/10
The Cincinnati Kid (1965) - Steve McQueen - 8/10
All In: The Poker Movie (2009) - Matt Damon - 7/10
Maverick (1994) - Mel Gibson, Jodie Foster, Graham Greene - 7/10
Casino Royale (2006) - Daniel Craig, Eva Green - 8/10
High Roller: The Stu Ungar Story (2003) - 6/10
Lucky You (2007) - Eric Bana, Drew Barrymore - 6/10
Runner Runner (2013) - Justin Timberlake, Ben Affleck, Gemma Arterton - 6/10
The Grand (2007) - Dennis Farina - 6/10
Shade (2003) - Melanie Griffith, Sylvester Stallone - 7/10
Deal (2008) - Burt Reynolds - 7/10
Bet Raise Fold (2013) - 7/10
Players (2012) - Movie - 6/10
Freeze Out (2005) - 8/10
Luckytown (2000) - Kirsten Dunst - 7/10
Casino (1995) - Robert De Niro, Sharon Stone - 8/10
Ocean's Eleven (2001) - George Clooney, Brad Pitt, Matt Damon, Julia Roberts - 8/10
Ocean's Twelve (2004) - George Clooney, Brad Pitt, Catherine Zeta-Jones, Matt Damon - 7/10
Ocean's Thirteen (2007) - George Clooney, Brad Pitt, Al Pacino - 7/10
21 (2008) - Kevin Spacey, Laurence Fishburne - 8/10
Owning Mahowny (2003) - Philip Seymour Hoffman - 7/10
Lock Stock and Two Smoking Barrels (1998) - Jason Flemyng, Jason Statham - 8/10
Revolver (2005) - Jason Statham, Ray Liotta - 7/10
The Color of Money (1986) - Tom Cruise - 7/10
Bugsy (1991) - Warren Beatty, Annette Bening - 7/10
The Hangover (2009) - Bradley Cooper - 8/10
The Hangover Part II (2011) - Bradley Cooper - 7/10
The Hangover Part III (2013) - Bradley Cooper - 7/10
Las Vegas Parano (1998) - Johnny Depp, Benicio Del Toro - 8/10
Rat Race (2001) - Rowan Atkinson, Cuba Gooding Jr. - 7/10
California Split (1974) - 7/10
The Cooler (2003) - William H. Macy, Alec Baldwin - 7/10
Vegas Vacation (1997) - Chevy Chase - 7/10
The Gambler (2014) - Mark Wahlberg - 7/10
Lesser Prophets (1997) - Scott Glenn, John Turturro - 6/10
Croupier (1998) - Clive Owen - 7/10
Two for the Money (2005) - Al Pacino, Matthew McConaughey, Rene Russo - 7/10
Atlantic City (1980) - Burt Lancaster - 8/10
Havana (1990) - Robert Redford - 7/10
Bad Lieutenant (1992) - Harvey Keitel - 7/10
House of Games (1987) - Joe Mantegna - 7/10
Sydney (1996) - Philip Seymour Hoffman, Samuel L. Jackson, Gwyneth Paltrow - 7/10
Eight Men Out (1988) - John Cusack, Charlie Sheen - 7/10
Very Bad Things (1998) - Cameron Diaz, Christian Slater - 7/10
The Good Thief (2002) - Nick Nolte, Ralph Fiennes - 6/10
Phoenix (1998) - Ray Liotta, Anthony LaPaglia - 7/10
The Big Town (1987) - Matt Dillon, Tommy Lee Jones - 6/10
Factotum (2005) - Matt Dillon, Fisher Stevens - 7/10
The Music of Chance (1993) - Mandy Patinkin, M. Emmet Walsh - 8/10
Dinner Rush (2000) - Danny Aiello - 7/10
Intacto (2001) - Leonardo Sbaraglia - 7/10
All or Nothing (2013) - 7/10
Even Money (2006) - Kim Basinger, Danny DeVito, Forest Whitaker - 7/10
Winged Creatures (2008) - Kate Beckinsale, Guy Pearce - 6/10
Guns, Girls and Gambling (2012) - Gary Oldman, Christian Slater - 5/10
Killing Them Softly (2012) - Brad Pitt - 6/10
Leaving Las Vegas (1995) - Nicolas Cage, Elisabeth Shue - 8/10
The Game (1997) - Michael Douglas, Sean Penn, Deborah Kara Unger - 8/10
In Time (2011) - Justin Timberlake, Amanda Seyfried, Olivia Wilde - 8/10
Rain Man (1988) - Dustin Hoffman, Tom Cruise - 8/10
What Happens in Vegas (2008) - Cameron Diaz, Ashton Kutcher - 7/10
Waking Ned (1998) - 8/10
Casino Jack (2010) - Kevin Spacey - 6/10
no deposit poker new poker bankroll gratis bonus
Poker ohne einzahlung
Lieder über Poker und Glücksspiel - Die beste Poker-Song
ABC Poker - ABC-Spieler
Roulette-spielen system
Wie kann man im Roulette gewinnen?
Martingale roulette system
Shaun roulette system
Straßen roulette system
Das Fibonacci System – Roulettestrategie
Systeme für Roulette - Parlay-System
Systeme für Roulette - System-63
Online Roulette - Das Labouchere System
D'Alembert Roulette System
Die Psychologie des Pokerspiels
Poker Witze und Sprüche
Kartenspiele
Poker und casino anmeldung bonus
Downswing poker
Poker Forum - die besten der Welt
Poker als das Werk - eine zusätzliche Einnahmequelle
Bonus ohne Einzahlung
Poker geld und startgeld ohne einzahlung
Vorhersehbare Sportdisziplin
Sportwetten Glossar
Sportwetten für Anfänger - Wetten Regeln
Der größte Sieg bei der sportwetten - größten Gewinn machen
Algorithmus Poker in PHP
Interviews mit den Poker-Stars
Poker-Kleidung - Weltweite Poker Geschäften
no deposit poker new poker bankroll gratis bonus
Poker ohne einzahlung
Spielregeln - Texas Holdem Regeln - Flop - Turn - River
Der Händler im Poker und blind
Poker Begriffe und Glossar
Um echtes Geld spielen (Poker im Internet)
Kostenlos poker turniere spielen
Geschichte der World Series of Poker
2-7 Lowball Draw Poker - die Regeln
888 Poker Network - Seiten gehören
BOSS International Poker Network - Seiten gehören
Entraction - Websites im Netzwerk
iPoker Network - rooms im netzwerk
Merge Poker Network Seiten
Ongame Network - seiten im netzwerk
Beste Verkaufs Poker Bücher
Wie Twitter Gestaltung der Welt von Poker
Interview mit Viktor Blom - Isildur1 spricht
no deposit poker new poker bankroll gratis bonus
Texas hold em poker Texas Holdem Online
Spanish
Belarusian
Estonian
Bulgarian
Greek
Croatian
Finnish
Swedish
Portuguese
Taiwanese
Hungarian
Turkish
Ukrainian
Russian
Arabic
Poland
Japanese
Switzerland
Austria
Italian
Dutch
Belgium
Czech
Slovak
Brazil
German
French
Danish
Filipino
Georgian
Indonesian
Kannada
Latvian
Lithuanian
Romanian
Serbian
Slovenian
Vietnamese
Hebrew
Gratis startkapital Texas Holdem poker bonus
Texas Holdem Poker

Online Poker



Texas Hold em Poker


 
texas holdem poker Algorithmus Poker in PHP
 



Mein einziger Kontakt mit dem Pokerspiel hat ein paar Stunden in den letzten Wochen das Lesen durch die verschiedenen Hand Ranking Regeln. Es scheint, dass die Herausforderung der schnellen Auffinden der Sieger in einem Spiel ist einfach und doch schwer zu fassen. Somit ist die Idee, eine Zuordnung zwischen einem Poker-Hand und eine kleine abgegrenzte Einheit, dachte ich, ist etwas Untersuchung wert. Der Code hinter diesem Artikel ist ein Proof of Concept von diesen trockenen Rechenprozedur.

Hintergrund
Ursprünglich das Code-Snippet Sie als Reaktion auf ein 4-Stunden-Test-Software-Entwickler erstellt. Es umfasst die folgende Aufgabe:

Implementieren

Eine Bibliothek (in der Programmiersprache Ihrer Wahl), wer welche wertet sind die Gewinner (n) unter mehreren 5-Karten-Poker-Hände (http://en.wikipedia.org/wiki/List_of_poker_hands). Hinweis für dieses Projekt, dem Sie benötigen, um nur eine Teilmenge der regulären Pokerhände zu übernehmen:

Bündig
Three of a Kind
Two of a Kind
High Card
Eingangs

Sammlung von Spielern in der Showdown: Der Spieler Name und 5 Karten (jeweils die Anzahl und Farbe der Karte spezifiziert) - zB

Joe, 3H, 4H, 5H, 6H, 8H
Bob, 3C, 3D, 3S, 8C, 10D
Sally AC, 10C 5C, 2S, 2C
Ausgang

Sammlung von Gewinnern (mehr als eine in Falle von Stimmengleichheit) - zB

Joe
Bitte geben Sie keine Annahmen die Sie vorgenommen haben.

Durchführung
Seit der ersten Durchführung der Aufgabe, die Umsetzung Verzeichnis erweitert, dass der volle Satz von Standard-Poker-Hände zu unterstützen.

JavaScript wurde wegen seiner Flexibilität und Leichtigkeit der Verwendung ausgewählt.

Annahmen

Das höchste Blatt (nach dem Standard-Poker-Blatt-Rangsystem [^]) ist die gewinnende Hand. Es gibt immer mindestens einen Gewinner.
Die Anzahl der Blätter ist eine positive ganze Zufallszahl.
Die Anzahl der Karten in der Hand ist eine positive ganze Zufallszahl von weniger als 13. Die Anzahl der Karten in der Hand ist nicht wirklich wichtig, aber es macht Sinn, dass es nicht mehr als 13 wäre.
Die Karten in einer Hand kommen, von einem Deck. Das Verfahren kann modifiziert werden, ist die Unterstützung mehrerer Plattformen, aber es wird einige seiner Transparenz verlieren.
Jede Karte wird von einem 2-Buchstaben-Wort, wo der 1. Buchstabe kennzeichnet den Rang (dh, in der Menge [1..10, J, Q, K, A]) und der 2. Brief Vertreten identifiziert die suite (das heißt, ist in der Menge [H, H, C, S])
Die Eingabe enthält pro Zeile den Namen der Spieler und der Satz von Karten, die die Hand des Spielers bildet, in denen Unternehmen sind durch Kommata getrennt. Mehrere Zeilen Indiziert mehrere Spieler. Keine Schecks werden hinzugefügt, um sicherzustellen, dass die Spieler sind einzigartig, haben die gleiche Anzahl von Karten, und sie die Karten zu verwenden.
Der Spielername keine Leerzeichen enthält; wenn ja, werden sie nicht in der Ausgabe enthalten sein.
Algorithmus

Das Ziel ist, dass einen Wert zuweisen, um eine Hand von Karten, die seine Stärke / Partituren Reflektiert Gemäß der Standard-Poker-Blatt-Rangsystems und vermeiden die Notwendigkeit, zu sortieren, zu vergleichen und Lookup einzelnen Händen. Der Gewinner eines Spiels ist der Spieler mit den höchsten Punktzahlen.

Damit die Punktzahl in jeder Hand Ansicht einer zweidimensionalen Matrix zu berechnen. Die Summen über die Spalten gibt uns genügend Informationen, es folgern, ob wir einen Vierling, Full House, einen Drilling, zwei Paare oder ein Paar. Die Summen, über die Reihen gibt uns genügend Informationen, es folgern, ob wir einen Flush, Straight oder einen Straight Flush. Die letzte Zeile gibt auch weg die hohe Karte und den Kickern.

Zum Beispiel, hier ist, wie 2H, 9D, 3S, sieht 2C QD wie in einem trockenen und Matrix:

Verstecke Code kopieren
 + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - +
 | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
 + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - +
 | D | | | | | | | | | | 1 | | | 1 | | | 0 |
 | H | | | 1 | | | | | | | | | | | | | 0 |
 | C | | | 1 | | | | | | | | | | | | | 0 |> - col => Karten Suiten (spülen [0,5+])
 | S | | | | 1 | | | | | | | | | | | | 0 |
 + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - +
 | | | | 2 | 1 | | | | | | 1 | | | 1 | | | 0 |> - Zeile => Karten vom Rang (N von einer Art, [1..4 +])
 + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - +
                                                   ^ ---- Zell => Karten in einer Reihenfolge (gerade, [0,5+])
In diesem Fall haben wir ein Paar mit 3 Kickern (keine gerade, kein Flush).

Wir berechnen von links nach rechts, die gewährleistet, in den USA, die immer die besten verfügbaren Karten für die Partitur und dass der Algorithmus funktioniert genauso gut für 7-Card Hand, zum Beispiel.

Dieser Ansatz befreit uns von Sortierkarten Vergleicht die Hände oder die Durchführung Lookups. Es nutzt festen Speicher durch die spärliche 15 x 4 Matrix gebunden. Für eine einzelne Hand, läuft es in konstanter Zeit O (1), um Summen über die Reihen und Spalten benötigt. Wenn ein Spiel enthält n Händen, wird es O (n) Zeit, um sie alle zu zählen.

Der Trick ist bei der Zuordnung einer Partitur, die "einzigartig" ist. Betrachten Sie die folgenden Formeln:

Verstecke Code kopieren
 Hand Kategorien | Big Endian | Little Endian
 ---------------- | ------------ + --------------------
 Straight Flush | P & F -> 8 | Kicker
 Four of a Kind | d4 -> 7 | d4
 Full House | p1 & K3 -> 6 | p1 + k 3 * (10 ^ 2)
 Flush | f -> 5 | Kicker
 Straight | p -> 4 | Kicker
 Three of a kind | K3 -> 3 | k3
 Zwei Paare | p2 -> 2 | + p2 p1 * (10 ^ 2)
 Ein Paar | p1 -> 1 | p1
 High Card | -> 0 | Kicker
wobei:

Kicker = Summe (R * (10 ^ (- 15 + i))), wobei r der Rang von der i-ten-Karte mit der Kardinalität 1, spielt
f = Zahl der Karten des gleichen suite wenn 5 oder mehr ist, ansonsten 0
n = die Anzahl von Karten in der Reihenfolge, wenn 5 oder mehr ist, ansonsten 0
d4 = r * (10 ^ -4), wobei r den höchsten Rang einer Karte mit Kardinalität 4
d3 = r * (10 ^ -4), wobei r den höchsten Rang einer Karte mit Kardinalität 3
p2 = r * (10 ^ -4), wobei r ist der zweithöchste Rang einer Karte mit Kardinalität 2
p1 = r * (10 ^ -4), wobei r den höchsten Rang einer Karte mit Kardinalität 2
dann wird die Punktzahl = (Kategorie || 0) * (Big-Endian in der Kategorie + Little-Endian in der Kategorie) + Kicker.

Beispiele:

Here is how 2H, 9D, 3S, 2C, QD (One Pair) score is computed:

Hide   Copy Code
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|  |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| D|  |  |  |  |  |  |  |  |  | 1|  |  | 1|  |  | 0|
| H|  |  | 1|  |  |  |  |  |  |  |  |  |  |  |  | 0|
| C|  |  | 1|  |  |  |  |  |  |  |  |  |  |  |  | 0|
| S|  |  |  | 1|  |  |  |  |  |  |  |  |  |  |  | 0|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  |  |  | 2| 1|  |  |  |  |  | 1|  |  | 1|  |  | 0|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
   
Hand Categories | Big Endian | Little Endian    | Result
----------------|------------+------------------|-------------
Straight Flush  |   s&f -> 8 | kickers          | 0 
Four Of A Kind  |    k4 -> 7 | k4               | 0
Full House      | p1&k3 -> 6 | p1 + k3*(10^2)   | 0
Flush           |     f -> 5 | kickers          | 3*(10^-14) + 9*(10^-13) + 12*(10^-12)
Straight        |     s -> 4 | kickers          | 0
Three Of A Kind |    k3 -> 3 | k3               | 0
Two Pair        |    p2 -> 2 | p2 + p1*(10^2)   | 0
One Pair        |    p1 -> 1 | p1               | 0.0002 = 2*(10^-4)
High Card       |       -> 0 | kickers          | 1.2930000000000001e-11   
   
score = 1.0002000000129 = (p1) * (1 + 0.0002) + 1.2930000000000001e-11   
Here is how 10S, 10C, 10H, 4D, 4C (Full House) score is computed:

Hide   Copy Code
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|  |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| D|  |  |  |  | 1|  |  |  |  |  |  |  |  |  |  | 0|
| H|  |  |  |  |  |  |  |  |  |  | 1|  |  |  |  | 0|
| C|  |  |  |  | 1|  |  |  |  |  | 1|  |  |  |  | 0|
| S|  |  |  |  |  |  |  |  |  |  | 1|  |  |  |  | 0|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|  |  |  |  |  | 2|  |  |  |  |  | 3|  |  |  |  | 0|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Hand Categories | Big Endian | Little Endian    | Result
----------------|------------+------------------|-------------
Straight Flush  |   s&f -> 8 | kickers          | 0 
Four Of A Kind  |    k4 -> 7 | k4               | 0
Full House      | p1&k3 -> 6 | p1 + k3*(10^2)   | 0.1004 = 0.0004 + 0.001(10^2)
Flush           |     f -> 5 | kickers          | 0
Straight        |     s -> 4 | kickers          | 0
Three Of A Kind |    k3 -> 3 | k3               | 0.001 = 10(10^-4)
Two Pair        |    p2 -> 2 | p2 + p1*(10^2)   | 0
One Pair        |    p1 -> 1 | p1               | 0.0004 = 4*(10^-4)
High Card       |       -> 0 | kickers          | 0   

score = 6.1004 = (p1&k3) * (6 + 0.1004) + 0   
Note that it is possible to restore the hand from the score.

Performance

In Chrome (10.0.648.205, AMD Turion, 1.6GHz, 512KB L2, 2GB DDR2), a single hand evaluation takes ~1ms.

Hide   Copy Code
10 ->    ~1 ms
100 ->    ~6 ms
1000 ->   ~60 ms
10000 ->  ~600 ms
100000 -> ~6000 ms   
To run it yourself, open the attached HTML file in a browser with JavaScript enabled.

It is likely that the same implementation in another language will yield better results.

Challenges

Understanding and verifying the various poker hand ranking rules
Ensuring min/max value per category without overlap -> powers of 10, big/little endian
Calculation of kickers vs high card -> powers of 10, cardinality
Applying Ace as 1 or 14 in straights -> manual value reset
Alternative Approaches (cf. See Also)

Use of base 13 computations
Use of prime numbers where the product of two prime numbers is a 'unique' number
Part 2

Add a conclusion
Come up with a way to incorporate probabilities
Implement in another language (Haskell?) to see whether the overall performance is better
Code

Hide   Shrink    Copy Code
var evalHand = function(input){
    if (!input) return;

    input = input.replace(/\s+/g, '').replace(/,[Jj]/g, ',11').replace
    (/,[Qq]/g, ',12').replace(/,[Kk]/g, ',13').replace(/,
    [Aa]/g, ',14').toUpperCase().split(',');

    var hand = {D: [], H: [], C: [], S:[]};
    for (var i = 1, len = input.length; i < len; i++)
    {
        input[i] && (hand[input[i].slice(input[i].length - 1)]
    [input[i].slice(0, input[i].length - 1)] = 1);
    }

    var card = function(suite, rank){return hand[suite][rank] || 0};
    var cards = function(rank){ return card('D', rank) + card('H', rank) +
    card('C', rank) + card('S', rank); };
    var kickers = function(idx){ // http://en.wikipedia.org/wiki/Kicker_(poker)       
        idx = idx || -15;
        var notplayed = Math.max(input.length - 1/*player input*/ - 5, 0);
        return function(all, cardinality, rank) {
            return (all || 0) + (((cardinality == 1) && (notplayed-- <= 0)) ?
        rank * Math.pow(10, ++idx) : 0);
        };
    }();
  
    var tag = function(a, b, always) {a = a || 0; b = Math.min(b || 0, 1);
    return (b || always) ? a + b : 0};
    var reset = function(a) { return (a < 5) ? 0 : a};

    var cardsofrank = [];
    var hc = 0;         // high card
    var k4 = 0;         // four of a kind
    var k3 = 0;         // three of a kind
    var p2 = 0;         // two pair / two one pairs
    var p1 = 0;         // one pair / two of a kind
    var k = 0;          // kickers
    var sd = cards(14); // straight discriminant: count A as 1 or 14
    for (var i = 2; i < 15; i++)
    {
        cardsofrank[i] = cards(i);
        hc = (cardsofrank[i]) ? i * Math.pow(10, -4) : hc;
        k4 = (cardsofrank[i] === 4) ? hc : k4;
        k3 = (cardsofrank[i] === 3) ? hc : k3;
        p2 = (cardsofrank[i] === 2) ? p1 : p2;
        p1 = (cardsofrank[i] === 2) ? hc : p1;
        k = kickers(k, cardsofrank[i], i);
        sd = tag(sd, cardsofrank[i], sd >= 5);
    };
    var s = reset(sd); // straight

    if (s && cards(14) && !cards(13))
    { k = k - 14 * Math.pow(10, sd); } // adjust for A as 1 or 14

    var cardsofsuite = {D: 0, H: 0, C: 0, S: 0};
    for (var i = 2; i < 15; i++)
    {
        cardsofsuite['D'] = tag(cardsofsuite['D'], card('D', i), true);
        cardsofsuite['H'] = tag(cardsofsuite['H'], card('H', i), true);
        cardsofsuite['C'] = tag(cardsofsuite['C'], card('C', i), true);
        cardsofsuite['S'] = tag(cardsofsuite['S'], card('S', i), true);
    }
    var f = reset(cardsofsuite['D']) + reset(cardsofsuite['H']) +
    reset(cardsofsuite['C']) + reset(cardsofsuite['S']);  // flush

    var score = function(cond, bigendian, littleendian)
    { return (cond ? 1 : 0) * (bigendian + littleendian); };

    return {
        player: input[0], 
        score: (score(s && f, 8, k)                              // straightflush
                || score(k4, 7, k4)                              // fourofakind
                || score(p1 && k3, 6, p1 + k3 * Math.pow(10, 2)) // fullhouse
                || score(f, 5, k)                                // flush
                || score(s, 4, k)                                // straight
                || score(k3, 3, k3)                              // threeofakind
                || score(p2, 2, p2 + p1 * Math.pow(10, 2))       // twopair
                || score(p1, 1, p1))                             // onepair
            + score(hc, 0, k)                                    // highcard - tie breaker
    };
};


 
 
Template by Poker Template & USA Online Casino