Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Generating all 5-card hands

by TedPride (Priest)
on May 18, 2005 at 18:37 UTC ( #458380=note: print w/ replies, xml ) Need Help??


in reply to Generating all 5-card hands

use strict; use warnings; @_ = (2..10,'J','Q','K','A'); comb('', 4, 2..4,6..10,'J','Q','K','A',@_,@_,@_); sub comb { my ($str, $depth, @items) = @_; if (!$depth--) { interpret($str); return; } comb("$str $items[$_]", $depth, @items[($_+1)..$#items]) for (0..$ +#items) } sub interpret { my @cards = split / /, "5$_[0]"; # Do whatever with @cards; }
Actually though, the possible set can't contain any 5's except the original 5, nor can it contain any 10, J, Q, K - since all hands involving those will have at least 2 points. This cuts the number of combinations significantly.
@_ = (2..4,6..9,'A'); comb('', 4, @_,@_,@_,@_);
Nor can you have more than one of any card.
comb('', 4, 2..4,6..9,'A');
It should be fairly easy to figure out whether there are straights or 15's in the permutations? of this set. Code to follow...
use strict; use warnings; comb('', 4, 1..4,6..9); sub comb { my ($str, $depth, @items) = @_; if (!$depth--) { interpret($str); return; } comb("$str $items[$_]", $depth, @items[($_+1)..$#items]) for (0..$ +#items) } sub interpret { my @cards = split / /, "5$_[0]"; @cards = sort {$b <=> $a} @cards; my $flag = 1; for (0..3) { $flag = 0 if $cards[$_+1] != ($cards[$_]-1); } return if $flag; for (perm(@cards)) { return if sum(split //) == 15; } print join " ", @cards; } BEGIN { my @c_out; sub perm { @c_out = (); permute('', $_, @_) for (0..$#_); return @c_out; } sub permute { my ($str, $depth, @chars) = @_; if (!$depth--) { push @c_out, $str.$_ for @chars; } else { permute($str.$chars[$_], $depth, @chars[($_+1)..($#chars)] +) for (0..$#chars); } } } sub sum { my $n; $n += $_ for @_; return $n; }
Very rough code, but upshot is that there are no hands with a 5 that don't have at least 2 points. I could actually have done this whole thing on paper, since there's very few sets of cards that have to be tested for 15's and straights.


Comment on Re: Generating all 5-card hands
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (6)
As of 2015-07-05 14:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (67 votes), past polls