Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
В игре камень-ножницы-бумага каждый игрок выбирает, будет ли он играть Камнем (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 игроков, и каждый из них участвует в ровно одной паре за раунд).
starius
05.03.12 в 11:01
|
+1
|