Курс по Raku / Приложение 🆕 / Поток и функции / Управление на потока и логика / Exercises / Камък, ножица, хартия

Решение: Камък, ножица, хартия

Ето едно възможно решение на задачата.

Код

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

Коментари

  1. Хешът %beats кодира правилата: всеки ход се съпоставя с хода, който побеждава. Това превръща отсъждането в едно-единствено търсене вместо в дълга верига от условия.

  2. Ако %beats{$a} е ходът на противника, печели $a; иначе (еднаквите ходове вече са обработени) печели $b.

Навигация в курса

Камък, ножица, хартия   |   Сума, докато надхвърли сто