Только ответ на этот вопрос, чтобы закрыть вопрос, надеюсь, мой ответ поможет кому-то еще = D
После того, как я смотрел на него около трех часов, мой разум на самом деле прекратил дремать, и я придумал это:
def rps_tournament_winner(tournament)
return rps_game_winner(tournament) if tournament.flatten.length == 4
if tournament.flatten.length == 16
players = tournament.flatten(2)
else
players = tournament.flatten(4)
end
while players.length > 1
players = players.each_slice(2).map { |x| rps_game_winner(x) }
end
players[0]
end
Оператор if позволяет мне проверить, если в турнире участвуют 8 или более игроков (тестирование проводилось только для 8, 16 и 32 игроков, поэтому я сомневаюсь, что это подойдет для больших сетов) было то, что я бы только flatten (2) , который для большого турнира не будет работать.