XP is just a number 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.

Create A New User
Node Status?
node history
Node Type: note [id://458380]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (2)
As of 2017-06-25 02:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How many monitors do you use while coding?

Results (564 votes). Check out past polls.