如果有超过8的话,我试图拆分子阵列.我已经尝试在玩家身上调用rps_tournament_winner函数,如果它的扁平长度大于16但是我得到了“堆栈太深的错误”.
我是否必须参与球员变量或锦标赛?我正朝着正确的方向努力;不完整的解决方案.
def rps_tournament_winner(tournament) return rps_game_winner(tournament) if tournament.flatten.length == 4 players = tournament.flatten(2) while players.length > 1 players = players.each_slice(2).map { |x| rps_game_winner(x) } end players[0] end
解决方法
我用递归解决了它
class WrongNumberOfPlayersError < StandardError ; end class NoSuchStrategyError < StandardError ; end def rps_game_winner(game) raise WrongNumberOfPlayersError unless game.length == 2 if game[0][0].is_a?(Array) then winner1 = rps_game_winner(game[0]) winner2 = rps_game_winner(game[1]) game = [winner1,winner2] end raise NoSuchStrategyError unless /^(P|R|S){2}$/ =~ game[0][1] + game[1][1] case game[0][1] when "R" if game[1][1] == "P" then game[1] else game[0] end when "P" if game[1][1] == "S" then game[1] else game[0] end when "S" if game[1][1] == "R" then game[1] else game[0] end end end def rps_tournament_winner(tournament) rps_game_winner(tournament) end