Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
59
Task/Mastermind/Raku/mastermind.raku
Normal file
59
Task/Mastermind/Raku/mastermind.raku
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
sub MAIN (
|
||||
Int :$colors where 1 < * < 21 = 6, Int :$length where 3 < * < 11 = 4,
|
||||
Int :$guesses where 7 < * < 21 = 10, Bool :$repeat = False
|
||||
) {
|
||||
my @valid = ('A' .. 'T')[^$colors];
|
||||
my $puzzle = $repeat ?? @valid.roll($length) !! @valid.pick($length);
|
||||
my @guesses;
|
||||
|
||||
my $black = '●';
|
||||
my $white = '○';
|
||||
|
||||
loop {
|
||||
clearscr();
|
||||
say header();
|
||||
printf " %{$length * 2}s :: %s\n", @guesses[$_][0], @guesses[$_][1] for ^@guesses;
|
||||
say '';
|
||||
lose() if @guesses == $guesses;
|
||||
my $guess = get-guess();
|
||||
next unless $guess.&is-valid;
|
||||
my $score = score($puzzle, $guess);
|
||||
win() if $score eq ($black xx $length).join: ' ';
|
||||
@guesses.push: [$guess, $score];
|
||||
}
|
||||
|
||||
sub header {
|
||||
my $num = $guesses - @guesses;
|
||||
qq:to/END/;
|
||||
Valid letter, but wrong position: ○ - Correct letter and position: ●
|
||||
Guess the {$length} element sequence containing the letters {@valid}
|
||||
Repeats are {$repeat ?? '' !! 'not '}allowed. You have $num guess{ $num == 1 ?? '' !! 'es'} remaining.
|
||||
END
|
||||
}
|
||||
|
||||
sub score ($puzzle, $guess) {
|
||||
my @score;
|
||||
for ^$length {
|
||||
if $puzzle[$_] eq $guess[$_] {
|
||||
@score.push: $black;
|
||||
}
|
||||
elsif $puzzle[$_] eq any(@$guess) {
|
||||
@score.push: $white;
|
||||
}
|
||||
else {
|
||||
@score.push('-');
|
||||
}
|
||||
}
|
||||
@score.sort.reverse.join: ' ';
|
||||
}
|
||||
|
||||
sub clearscr { $*KERNEL ~~ /'win32'/ ?? run('cls') !! run('clear') }
|
||||
|
||||
sub get-guess { (uc prompt 'Your guess?: ').comb(/@valid/) }
|
||||
|
||||
sub is-valid (@guess) { so $length == @guess }
|
||||
|
||||
sub win { say 'You Win! The correct answer is: ', $puzzle; exit }
|
||||
|
||||
sub lose { say 'Too bad, you ran out of guesses. The solution was: ', $puzzle; exit }
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue