Готовый перевод HW 1: Ruby calisthenics / ДЗ1: Ruby тренировка: Part 2: Rock-Paper-Scissors

В игре камень-ножницы-бумага каждый игрок выбирает, будет ли он играть Камнем (R), Бумагой (P), или ножницами (S). Правила: Камень побеждает Ножницы, Ножницы побеждают Бумагу, но Бумага побеждает Камень.
Игра камень-ножницы-бумага закодирована как список двухэлементный списков, кодирующих имя игрока и его стратегию.
[ [ "Armando", "P" ], [ "Dave", "S" ] ]
# => возвращает список ["Dave", "S"] побеждает так как S>P

(a) Напишите метод rps_game_winner, который принимает двухэлементный список и ведет себя следующим образом:
- Если количество игроков не равно 2, выбрасывает WrongNumberOfPlayersError
- Если стратегия хотя бы одного из игроков не является одним из "R", "P" или "S" (без учета регистра), выбрасывает NoSuchStrategyError
- Иначе, возвращает имя и стратегию выигравшего игрока. Если оба игрока использовали одинаковую стратегию, побеждает первый игрок.
Мы начнем работу за вас:
class WrongNumberOfPlayersError < StandardError ; end
class NoSuchStrategyError < StandardError ; end
def rps_game_winner(game)
raise WrongNumberOfPlayersError unless game.length == 2
# ваш код
end
(b) Турнир по игре камень-ножницы-бумага закодирован как список в квадратных скобках из игр, то есть, каждый элемент может рассматриваться как его собственный турнир.
[
[
[ ["Armando", "P"], ["Dave", "S"] ],
[ ["Richard", "R"], ["Michael", "S"] ],
],
[
[ ["Allen", "S"], ["Omer", "P"] ],
[ ["David E.", "R"], ["Richard X.", "P"] ]
]
]
В рамках этого сценария, Dave победит Armando (S>P), Richard победит Michael (R>S), и затем Dave и Richard будут играть (Richard побеждает так как R>S); аналогично, Allen победит Omer, David E. победит Richard X., и Allen и Richard X. будут играть (Allen побеждает, так как S>P); наконец, Richard победит Allen, так как R>P, то есть, продолжается, пока не останется только одного победителя.
Напишите метод rps_tournament_winner, который принимает турнир, закодированный как массив в квадратных скобках, и возвращает победителя (для примера, приведенного выше, он должен вернуть [“Richard”, “R”]). Вы можете считать, что массив правильно оформлен (то есть, в нем 2^n игроков, и каждый из них участвует в ровно одной паре за раунд).

Переведено на Нотабеноиде
http://notabenoid.org/book/26991/90168

Переводчики: starius

Настройки

Готово:

100.00% КП = 1.0