Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: Pattern Matching Query

by Lexicon (Chaplain)
on Sep 17, 2002 at 17:14 UTC ( #198560=note: print w/ replies, xml ) Need Help??


in reply to Pattern Matching Query

Yay, another poker module!

I wrote a fairly efficient Classify_Hand subroutine in my Poker Probability Processor. It works on arbitrarily large hands and returns a string indicating the rank of the hand. It, and the rest of the module, might be worth looking at. I had originally intended to extend it to calculate odds of winnning various types of poker, including Texas Holdem', but after all the time writing the Combinator module, I was done. ;)


Comment on Re: Pattern Matching Query
Re: Re: Pattern Matching Query
by Elgon (Curate) on Sep 17, 2002 at 19:02 UTC

    Hi Lexicon,

    Interesting stuff - I wish I'd searched PM before I started in on this! Although I probably would have written my version anyway as I have really improved my Perl over the past week or so.

    One of the things that I noticed was that you can use a lot of cheats rather than look for the exact hand (mine only work for five cards though) - for example, if a unique list of the card values has only two elements then it must be either a full house or a four-of-a-kind. This reduces by a long way the amount of work to be done. I've also realised that I can rank the hand using the standard gt, lt and eq operators because of the way I set out how the hand's score is formatted.

    The version I'm working on at the moment uses an object oriented (something I'm trying to get a handle on) interface to handle the card-related functions: Shuffling, dealing, flopping, turn, river and who wins. I've also added a sethand function so that it can be used for basic statistical analyses. The next thing for me to write is an overlying game & betting manager so that it can be used as the basis for some kind of AI Poker competition or game.

    Thanks, Elgon

    "What this book tells me is that goose-stepping morons, such as yourself, should read books instead of burning them."
           - Dr. Jones Snr, Indiana Jones and the Last Crusade

      Tis very try, but we played some three card games like Pineapple and some seven card games like Anaconda and 7 Card Stud. Plus, since I wasn't prepared to write an AI, it gives some indication of hand frequency when playing optimal 5 card draw.

      I originally was writing the module to be object oriented, but do to the sheer speed requirements, I went this direction. As I recall, method calls are an order of magnatude slower than mere subroutine calls. Can anyone verify that? Unless you're planning an exhaustive search of the hand space, there's not much need for that kind of speed though. And a poker AI isn't going to be a branching tree search like Go or Chess, I'd imagine it would be mostly statistics based, also not so speed dependent.

      The poker project drastically improved my Perl and general programming skills and math skills as well, especially the Math::Combinatorics::Combinator module, which required a heafty amount of analysis and then a heafty amount of optimization, and led to a couple of researching side projects like Fundamental Benchmarks.

      So yeah, I love this kind of useless project (well, mine was useless :).

        Lexicon wrote...

        I originally was writing the module to be object oriented, but do to the sheer speed requirements, I went this direction. As I recall, method calls are an order of magnatude slower than mere subroutine calls. Can anyone verify that? Unless you're planning an exhaustive search of the hand space, there's not much need for that kind of speed though.

        Funnily enough, I find that to run 1 hand takes about a second - on a P120 laptop with 24 Meg of RAM running Debian - for either my original implementation or the OO version. The OO version runs at about the same speed as far as I can tell, but probably because the code has been improved significantly over the past few weeks. I imagine that if I stole the routines from my class into the old program's code, it would run faster...but then you can write programs like this:

        my $object = Texas -> gameon('8'); $object -> testhand('qh','ts'); # queen hearts, ten spades $object -> shuffle; $object -> deal; $object -> flop; $object -> turn; $object -> river; my @winners = ($object -> whowins);

        Elgon

        "What this book tells me is that goose-stepping morons, such as yourself, should read books instead of burning them."
               - Dr. Jones Snr, Indiana Jones and the Last Crusade

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://198560]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2014-12-25 07:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (159 votes), past polls