Курс Raku / Додаток 🆕 / Порядок виконання та функції / Порядок виконання та логіка / Вправи / Камінь, ножиці, папір
Розв’язання: Камінь, ножиці, папір
Ось одне з можливих розв’язань задачі.
Код
my %beats = rock => 'scissors', scissors => 'paper', paper => 'rock';
sub winner($a, $b) {
return 'tie' if $a eq $b;
return %beats{$a} eq $b ?? "$a wins" !! "$b wins";
}
for <rock scissors>, <paper rock>, <paper paper> -> ($a, $b) {
say "$a vs $b: { winner($a, $b) }";
}🦋 Знайдіть програму у файлі rock-paper-scissors.raku.
Вивід
rock vs scissors: rock wins
paper vs rock: paper wins
paper vs paper: tieКоментарі
Хеш
%beatsкодує правила: кожен хід відображається на той хід, який він перемагає. Це перетворює судійство на єдиний пошук замість довгого ланцюжка умов.Якщо
%beats{$a}є ходом суперника, то перемагає$a; інакше (однакові ходи вже оброблено) перемагає$b.