Frame anything as a poker problem and I'll probably bite.
YuckCall
#!/usr/bin/perl
use strict;
use Storable qw(dclone);
use Data::Dumper;
my $players = {
big_slicks => {
list => [qw(AsKs AhKh AdKd AcKc)],
},
big_hearts => {
list => [qw(AhKh KhQh QhJh JhTh)],
},
ace_ragman => {
list => [qw(As7c Ah6d Ac8s Ad9h)],
},
};
my $my_hand = 'AcAs';
for (1..10) {
my $hands = iterate($players, $my_hand);
$hands->{my_hand} = $my_hand;
print Dumper $hands;
}
#-----------------------------------------------------------
sub iterate {
my $players = shift;
my $my_hand = shift;
$players = dclone($players);
for my $card ($my_hand =~ /(.{2})/g) {
update($players, $card);
}
my $player_hands = {};
my @player_keys = keys(%$players);
while (@player_keys) {
my $player = splice(@player_keys, rand(@player_keys), 1);
my $hand_list = $players->{$player}{list};
my $pick = splice(@$hand_list, rand(@$hand_list), 1);
for my $card ($pick =~ /(.{2})/g) {
update($players, $card);
}
$player_hands->{$player} = $pick;
}
return $player_hands;
}
#-----------------------------------------------------------
sub update {
my $players = shift;
my $card = shift;
for my $player (keys(%$players)) {
my @new_list = grep { $_ !~ m/$card/ } @{$players->{$player}{list}
+};
$players->{$player}{list} = \@new_list;
}
}