my $player_is_human
= 1;my @values
= ( ace
=> 1|11, two
=> 2, three
=> 3, four
=> 4, five
=> 5, six
=> 6, seven
=> 7, eight
=> 8, nine
=> 9, ten
=> 10, jack
=> 10, queen
=> 10, king
=> 10,);my @suites
= < spades clubs diamonds hearts
>;my @deck
= ( @values X @suites
).
map: { my
($name
, $value
) = $
^a.
kv; $name ~
= " of $^b"; $name
=> $value
};my @cards
= @deck.
pick( @deck.
elems );my @dealer
;my @player
;@dealer.
push( @cards.
shift );@player.
push( @cards.
shift );@dealer.
push( @cards.
shift );say
"DEALER:";say @dealer
[0].
key;say
"";say
"PLAYER:";.
key.
say for @player
;my $player_value
= [+] @player.
map: { .
value };loop
{ my $card
= @cards.
shift; @player.
push( $card
); say $card.
key; $player_value
+= $card.
value; say
"current value is { $player_value.perl }"; if $player_value
== 21 { say
"congradulations, you win!"; exit 0; } elsif $player_value
< 21 { say
"hit (h) or stay (s)"; my $choice
; if ($player_is_human
) { loop
{ $choice
= lc $
*IN.
get; last
if $choice eq
"h" | "s"; #last if $choice ~~ /h|s/; say "invalid entry: 'h' or 's'"; } } else { $choice = "stay" unless $player_value < 16; } say $choice; last if $choice ~~ /s/; } else { say "Sorry, you bust!"; exit 0; }}say "";$player_value = [max] (4 .. 21).grep: { $_ == $player_value };say "DEALER:";.key.say for @dealer;my $dealer_value = [+] @dealer.map: { .value };loop { say "dealer value: {$dealer_value.perl}"; if $dealer_value == any( $player_value ^.. 21) { say "you loose!"; exit 0; } elsif $dealer_value < 21 { my $card = @cards.shift; @dealer.push( $card ); say $card.key; $dealer_value += $card.value; } else { say "dealer bust: you win!"; exit 0; }}
bXkgJHBsYXllcl9pc19odW1hbiA9IDE7bXkgQHZhbHVlcyA9ICggICAgYWNlID0+IDF8MTEsICAgIHR3byA9PiAyLCAgICB0aHJlZSA9PiAzLCAgICBmb3VyID0+IDQsICAgIGZpdmUgPT4gNSwgICAgc2l4ID0+IDYsICAgIHNldmVuID0+IDcsICAgIGVpZ2h0ID0+IDgsICAgIG5pbmUgPT4gOSwgICAgdGVuID0+IDEwLCAgICBqYWNrID0+IDEwLCAgICBxdWVlbiA9PiAxMCwgICAga2luZyA9PiAxMCwpO215IEBzdWl0ZXMgPSA8IHNwYWRlcyBjbHVicyBkaWFtb25kcyBoZWFydHMgPjtteSBAZGVjayA9ICggQHZhbHVlcyBYIEBzdWl0ZXMgKS5tYXA6IHsgbXkgKCRuYW1lLCAkdmFsdWUpID0gJF5hLmt2OyAkbmFtZSB+PSAiIG9mICReYiI7ICRuYW1lID0+ICR2YWx1ZSB9O215IEBjYXJkcyA9IEBkZWNrLnBpY2soIEBkZWNrLmVsZW1zICk7bXkgQGRlYWxlcjtteSBAcGxheWVyO0BkZWFsZXIucHVzaCggQGNhcmRzLnNoaWZ0ICk7QHBsYXllci5wdXNoKCBAY2FyZHMuc2hpZnQgKTtAZGVhbGVyLnB1c2goIEBjYXJkcy5zaGlmdCApO3NheSAiREVBTEVSOiI7c2F5IEBkZWFsZXJbMF0ua2V5O3NheSAiIjtzYXkgIlBMQVlFUjoiOy5rZXkuc2F5IGZvciBAcGxheWVyO215ICRwbGF5ZXJfdmFsdWUgPSBbK10gQHBsYXllci5tYXA6IHsgLnZhbHVlIH07bG9vcCB7ICAgIG15ICRjYXJkID0gQGNhcmRzLnNoaWZ0OyAgICBAcGxheWVyLnB1c2goICRjYXJkICk7ICAgIHNheSAkY2FyZC5rZXk7ICAgICRwbGF5ZXJfdmFsdWUgKz0gJGNhcmQudmFsdWU7ICAgIHNheSAiY3VycmVudCB2YWx1ZSBpcyB7ICRwbGF5ZXJfdmFsdWUucGVybCB9IjsgICAgaWYgJHBsYXllcl92YWx1ZSA9PSAyMSB7ICAgICAgICBzYXkgImNvbmdyYWR1bGF0aW9ucywgeW91IHdpbiEiOyAgICAgICAgZXhpdCAwOyAgICB9ICAgIGVsc2lmICRwbGF5ZXJfdmFsdWUgPCAyMSB7ICAgICAgICBzYXkgImhpdCAoaCkgb3Igc3RheSAocykiOyAgICAgICAgbXkgJGNob2ljZTsgICAgICAgIGlmICgkcGxheWVyX2lzX2h1bWFuKSB7ICAgICAgICAgICAgbG9vcCB7ICAgICAgICAgICAgICAgICRjaG9pY2UgPSBsYyAkKklOLmdldDsgICAgICAgICAgICAgICAgbGFzdCBpZiAkY2hvaWNlIGVxICJoIiB8ICJzIjsgICAgICAgICAgICAgICAgI2xhc3QgaWYgJGNob2ljZSB+fiAvaHxzLzsgICAgICAgICAgICAgICAgc2F5ICJpbnZhbGlkIGVudHJ5OiAnaCcgb3IgJ3MnIjsgICAgICAgICAgICB9ICAgICAgICB9ICAgICAgICBlbHNlIHsgICAgICAgICAgICAkY2hvaWNlID0gInN0YXkiIHVubGVzcyAkcGxheWVyX3ZhbHVlIDwgMTY7ICAgICAgICB9ICAgICAgICBzYXkgJGNob2ljZTsgICAgICAgIGxhc3QgaWYgJGNob2ljZSB+fiAvcy87ICAgIH0gICAgZWxzZSB7ICAgICAgICBzYXkgIlNvcnJ5LCB5b3UgYnVzdCEiOyAgICAgICAgZXhpdCAwOyAgICB9fXNheSAiIjskcGxheWVyX3ZhbHVlID0gW21heF0gKDQgLi4gMjEpLmdyZXA6IHsgJF8gPT0gJHBsYXllcl92YWx1ZSB9O3NheSAiREVBTEVSOiI7LmtleS5zYXkgZm9yIEBkZWFsZXI7bXkgJGRlYWxlcl92YWx1ZSA9IFsrXSBAZGVhbGVyLm1hcDogeyAudmFsdWUgfTtsb29wIHsgICAgc2F5ICJkZWFsZXIgdmFsdWU6IHskZGVhbGVyX3ZhbHVlLnBlcmx9IjsgICAgaWYgJGRlYWxlcl92YWx1ZSA9PSBhbnkoICRwbGF5ZXJfdmFsdWUgXi4uIDIxKSB7ICAgICAgICBzYXkgInlvdSBsb29zZSEiOyAgICAgICAgZXhpdCAwOyAgICB9ICAgIGVsc2lmICRkZWFsZXJfdmFsdWUgPCAyMSB7ICAgICAgICBteSAkY2FyZCA9IEBjYXJkcy5zaGlmdDsgICAgICAgIEBkZWFsZXIucHVzaCggJGNhcmQgKTsgICAgICAgIHNheSAkY2FyZC5rZXk7ICAgICAgICAkZGVhbGVyX3ZhbHVlICs9ICRjYXJkLnZhbHVlOyAgICB9ICAgIGVsc2UgeyAgICAgICAgc2F5ICJkZWFsZXIgYnVzdDogeW91IHdpbiEiOyAgICAgICAgZXhpdCAwOyAgICB9fSAK