#!perl
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Sortkeys = 1;
my $PURIFY = 1;
my $SILENCE = 2;
my $WATCHER = 3;
my $STATUE = 4;
my $TURNS = 4;
my $HAND_SIZE = 3;
my %results = ();
for(1 .. 1_000) {
$results{ sim() } ++;
}
print Dumper
( \%results );
sub sim {
my @deck = (
( 0 ) x 22,
( $PURIFY ) x 2,
( $SILENCE ) x 2,
( $WATCHER ) x 2,
( $STATUE ) x 2,
);
shuffle( \@deck );
my @hand = draw( $HAND_SIZE, \@deck );
# mulligan
my @mulligan = ();
my @keep = ();
my $spell = 0;
my $target = 0;
while(@hand) {
if(not $card) {
}
elsif($card == $PURIFY
or $card == $SILENCE
) {
if($spell) {
}
else {
$spell ++;
}
}
elsif($card == $WATCHER
or $card == $STATUE
) {
if($target) {
}
else {
$target ++;
}
}
}
@hand = ( @keep, draw
( scalar @mulligan, \@deck ) ); shuffle( \@deck );
return 0 if checkHand
( @hand );
for( 1 .. $TURNS ) {
push @hand, draw
( 1, \@deck ); return $_ if checkHand
( @hand ); }
}
sub shuffle {
my ($deck) = @_;
my $i = @{ $deck };
while(-- $i) {
@{ $deck }[ $i, $j ] = @{ $deck }[ $j, $i ];
}
}
sub draw {
my ($count, $deck) = @_;
my @hand = ();
for(1 .. $count) {
}
}
sub checkHand {
my @hand = @_;
my $spell = 0;
my $target = 0;
for my $card (@hand) {
if($card == $SILENCE
or $card == $PURIFY
) {
$spell ++;
}
elsif($card == $WATCHER
or $card == $STATUE
) {
$target ++;
}
}
}
IyFwZXJsCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRGF0YTo6RHVtcGVyOwokRGF0YTo6RHVtcGVyOjpTb3J0a2V5cyA9IDE7CgpteSAkUFVSSUZZID0gMTsKbXkgJFNJTEVOQ0UgPSAyOwpteSAkV0FUQ0hFUiA9IDM7Cm15ICRTVEFUVUUgPSA0OwoKbXkgJFRVUk5TID0gNDsKbXkgJEhBTkRfU0laRSA9IDM7CgpteSAlcmVzdWx0cyA9ICgpOwpmb3IoMSAuLiAxXzAwMCkgewogICAgJHJlc3VsdHN7IHNpbSgpIH0gKys7Cn0KCnByaW50IER1bXBlciggXCVyZXN1bHRzICk7CgpleGl0OwoKc3ViIHNpbSB7CiAgICBteSBAZGVjayA9ICgKICAgICAgICAoIDAgKSAgICAgICAgeCAyMiwKICAgICAgICAoICRQVVJJRlkgKSAgeCAyLAogICAgICAgICggJFNJTEVOQ0UgKSB4IDIsCiAgICAgICAgKCAkV0FUQ0hFUiApIHggMiwKICAgICAgICAoICRTVEFUVUUgKSAgeCAyLAogICAgKTsKICAgIHNodWZmbGUoIFxAZGVjayApOwogICAgbXkgQGhhbmQgPSBkcmF3KCAkSEFORF9TSVpFLCBcQGRlY2sgKTsKIAogICAgIyBtdWxsaWdhbgogICAgbXkgQG11bGxpZ2FuID0gKCk7CiAgICBteSBAa2VlcCA9ICgpOwogICAgbXkgJHNwZWxsID0gMDsKICAgIG15ICR0YXJnZXQgPSAwOwogICAgd2hpbGUoQGhhbmQpIHsKICAgICAgICBteSAkY2FyZCA9IHNoaWZ0IEBoYW5kOwogICAgICAgIGlmKG5vdCAkY2FyZCkgewogICAgICAgICAgICBwdXNoIEBtdWxsaWdhbiwgJGNhcmQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmKCRjYXJkID09ICRQVVJJRlkKICAgICAgICAgICAgb3IgJGNhcmQgPT0gJFNJTEVOQ0UKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgIGlmKCRzcGVsbCkgewogICAgICAgICAgICAgICAgcHVzaCBAbXVsbGlnYW4sICRjYXJkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHVzaCBAa2VlcCwgJGNhcmQ7CiAgICAgICAgICAgICAgICAkc3BlbGwgKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYoJGNhcmQgPT0gJFdBVENIRVIKICAgICAgICAgICAgb3IgJGNhcmQgPT0gJFNUQVRVRQogICAgICAgICAgICApIHsKICAgICAgICAgICAgaWYoJHRhcmdldCkgewogICAgICAgICAgICAgICAgcHVzaCBAbXVsbGlnYW4sICRjYXJkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHVzaCBAa2VlcCwgJGNhcmQ7CiAgICAgICAgICAgICAgICAkdGFyZ2V0ICsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBAaGFuZCA9ICggQGtlZXAsIGRyYXcoIHNjYWxhciBAbXVsbGlnYW4sIFxAZGVjayApICk7CiAgICBwdXNoIEBkZWNrLCBAbXVsbGlnYW47CiAgICBzaHVmZmxlKCBcQGRlY2sgKTsKICAgIAogICAgcmV0dXJuIDAgaWYgY2hlY2tIYW5kKCBAaGFuZCApOwogICAgCiAgICBmb3IoIDEgLi4gJFRVUk5TICkgewogICAgICAgIHB1c2ggQGhhbmQsIGRyYXcoIDEsIFxAZGVjayApOwogICAgICAgIHJldHVybiAkXyBpZiBjaGVja0hhbmQoIEBoYW5kICk7CiAgICB9CiAgICAKICAgIHJldHVybiAtMTsKfQoKc3ViIHNodWZmbGUgewogICAgbXkgKCRkZWNrKSA9IEBfOwogICAgCiAgICBteSAkaSA9IEB7ICRkZWNrIH07CiAgICB3aGlsZSgtLSAkaSkgewogICAgICAgIG15ICRqID0gaW50IHJhbmQoICRpICsgMSApOwogICAgICAgIEB7ICRkZWNrIH1bICRpLCAkaiBdID0gQHsgJGRlY2sgfVsgJGosICRpIF07CiAgICB9CiAgICAKICAgIHJldHVybjsKfQoKc3ViIGRyYXcgewogICAgbXkgKCRjb3VudCwgJGRlY2spID0gQF87CiAgICAKICAgIG15IEBoYW5kID0gKCk7CiAgICBmb3IoMSAuLiAkY291bnQpIHsKICAgICAgICBwdXNoIEBoYW5kLCBzaGlmdCBAeyAkZGVjayB9OwogICAgfQogICAgCiAgICByZXR1cm4gQGhhbmQ7Cn0KCnN1YiBjaGVja0hhbmQgewogICAgbXkgQGhhbmQgPSBAXzsKICAgIAogICAgbXkgJHNwZWxsID0gMDsKICAgIG15ICR0YXJnZXQgPSAwOwogICAgZm9yIG15ICRjYXJkIChAaGFuZCkgewogICAgICAgIGlmKCRjYXJkID09ICRTSUxFTkNFCiAgICAgICAgICAgIG9yICRjYXJkID09ICRQVVJJRlkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICRzcGVsbCArKzsKICAgICAgICB9CiAgICAgICAgZWxzaWYoJGNhcmQgPT0gJFdBVENIRVIKICAgICAgICAgICAgb3IgJGNhcmQgPT0gJFNUQVRVRQogICAgICAgICAgICApIHsKICAgICAgICAgICAgJHRhcmdldCArKzsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHJldHVybiAoJHNwZWxsIGFuZCAkdGFyZ2V0KTsKfQo=