Bulls and cows: Difference between revisions
Content added Content deleted
(Undoing my Perl script -- there was already one on the page, only with a typo in the markup) |
|||
Line 1,844: | Line 1,844: | ||
return uniq(split //, $g) == $size && $g =~ /^[1-9]{$size}$/; |
return uniq(split //, $g) == $size && $g =~ /^[1-9]{$size}$/; |
||
}</lang> |
}</lang> |
||
=={{header|Perl}}== |
|||
<lang perl> |
|||
use 5.10.0; |
|||
use strict; |
|||
use List::Util qw/ shuffle sum /; |
|||
use List::MoreUtils qw/ any uniq pairwise /; |
|||
my $size = 4; |
|||
# pick the secret number |
|||
my @secret = (shuffle 1..9)[0..$size-1]; |
|||
say 'I have chosen a number of ', $size, |
|||
' unique digits from 1 to 9 arranged in a random order.'; |
|||
say 'You need to input a ', $size, |
|||
' digit, unique digit number as a guess at what I have chosen'; |
|||
my $nbr_attempts = 1; |
|||
GUESS: |
|||
while ( 1 ) { |
|||
print "Next guess [$nbr_attempts]: "; |
|||
chomp ( my $guess = <> ); |
|||
my @guess = split '', $guess; |
|||
say 'you need to enter ', $size, ' unique digits, from 1 to 9. Try again' |
|||
and redo GUESS |
|||
if $guess !~ /^[1-9]{$size}$/ or @guess > uniq @guess; |
|||
my $bulls = sum pairwise { $a == $b } @guess, @secret; |
|||
last GUESS if $bulls == $size; |
|||
my $cows = sum( map { $_ ~~ @secret } @guess ) - $bulls; |
|||
say " $bulls Bulls"; |
|||
say " $cows Cows"; |
|||
$nbr_attempts++; |
|||
} |
|||
say "Congratulations, you guessed correctly in $nbr_attempts attempts"; |
|||
</lang> |
|||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |