poker hand evaluieren auf straight flush (incl. royal flush)



  • Hi,

    wie kann ich am besten ueberpruefen ob meine poker hand straight flush (incl. royal flush)ist? soll ich die karten mit std::sort aufsteigend sortieren und dann pruefen ob es eine strasse gibt und checken ob ich 5 karten einer farbe habe?



  • kann bitte jemand feeback geben? http://ideone.com/IhsQzH

    bitset duerfte hier besser geeignet sein oder doch std::sort?



  • rafaelo schrieb:

    pruefen ob es eine strasse gibt und checken ob ich 5 karten einer farbe habe?

    Kann man das auch anders prüfen?



  • Wie wärs, dass du mal etwas weniger Stress machst um vor 6 Uhr morgens. Alle Leute, die hier potenziell antworten, machen dies freiwillig und weil sie Spass dran haben. Ein Forum ist nicht dafür da, dass man auf Knopfdruck anderen eine Lösung zaubern muss.



  • ne strasse kann man pruefen ob man 5 karten (sortiert) deren wertigkeit aufsteigend ist... ist sort besser als das bitset hier?


  • Mod

    Das wird dir niemand endgültig beantworten können, ohne es auszuprobieren; und das kannst du selber.

    Allgemein gilt: Sortierung ist eine recht aufwändige Operation, das macht man eigentlich dann und nur dann, wenn man wirklich etwas sortiert haben möchte. Hier ist dir aber nicht wichtig, eine sortierte Folge der Karten zu erhalten, sondern du willst etwas über ihre Rangfolge aussagen. Daher werden andere Methoden wahrscheinlich besser (im Sinne von "schneller") sein.



  • SeppJ schrieb:

    Das wird dir niemand endgültig beantworten können, ohne es auszuprobieren; und das kannst du selber.

    Allgemein gilt: Sortierung ist eine recht aufwändige Operation, das macht man eigentlich dann und nur dann, wenn man wirklich etwas sortiert haben möchte. Hier ist dir aber nicht wichtig, eine sortierte Folge der Karten zu erhalten, sondern du willst etwas über ihre Rangfolge aussagen. Daher werden andere Methoden wahrscheinlich besser (im Sinne von "schneller") sein.

    5 karten sortieren ist näherungsweise kostenlos...

    und dafür reicht dann ein
    `eins < zwei < drei < vier < fuenf und fuenf-eins = 4 -> strasse;

    eins.farbe == zwei.farbe && zwei.farbe == drei.farbe && drei.farbe == vier.farbe && vier.farbe == fuenf.farbe -> flush

    street_flush = strasse && flush;`

    ich denke nicht, dass ein algo ohne sortierung irgendwas bringt. weder leserlichkeit noch performance.

    finde die bitsetlösung absolut nicht hübsch. vermutlich auch deutlich langsamer als der intuitve weg.

    bb


  • Mod

    unskilled schrieb:

    5 karten sortieren ist näherungsweise kostenlos...

    Andere Algorithmen (wobei mir ich erst einmal darüber nachdenken müsste, was das sein könnte) aber gewiss auch. Ich nehme mal an (oder eher: ich hoffe, dass er nicht unsere Zeit verschwendet), dass der TE tatsächlich Millionen von Pokerhände schnellstmöglich auswerten möchte, da lohnt es sich durchaus darüber nachzudenken (und hinterher zu testen!), welche Lösung wohl am besten ist.

    Es gibt beispielsweise nur 40 Straight Flush Kombinationen (bei 5 Karten). Wenn man die Hand sowieso schon als Bitset darstellt, kann man denen alle eine Zahl zuweisen und prüfen, ob die Hand eine dieser 40 ist. Das wären das bei binärer Suche 5-6 Vergleiche, wohingegen das Sortieren von 5 Karten mindestens 9 sind, und das bevor man überhaupt prüft, ob sie auch direkt in einer Reihe sind.

    Dann ist aber wieder die Frage, was der TE erreichen möchte. Die echte Fragestellung wird ja vermutlich eher sein, was für eine Hand man hat, nicht ob die Hand ein Straight Flush ist oder nicht. Dann wiederum könnte etwas anderes besser sein.

    Überhaupt gibt es nur ein paar Millionen 5-Karten Hände, oder wenige hundert Millionen für 7 Karten. Zumindest für ersteres könnte man sogar realistisch ein komplettes Wörterbuch vorberechnen, ohne sich groß Gedanken über optimale Laufzeit zu machen. Vielleicht ist es ja das, was der TE will?



  • Naja, aber wir reden hier über Vergleiche von normalen Zahlen, und die sind recht flott. D.h. obs nun 5, 6, 9 oder 20 sind macht nix aus. Und wir reden hier noch von Dimensionen wo alles locker in den L1 Cache passt.

    Aber die restlichen Gedanken von wegen Lookup Tabellen sind gut ^^


Log in to reply