1

私はRubyを初めて使用し、演習として言語を使用してじゃんけんトーナメントを実装しようとしています。

以下のコード内で呼び出されるrps_game_winnerメソッドは、競合他社のペアの勝者を返します。

これまでの私の試みは次のとおりです。

def rps_tournament_winner(tournament)
  qualifying_round_winners = []
  for i in 0..0
  tournament.each_with_index do |x, xi|
    x.each_with_index do |y, yi|
      winner = rps_game_winner(y)
      qualifying_round_winners.push(winner) 
      qualifying_round_winners = qualifying_round_winners.each_slice(2).to_a
    end
  end
  tournament = qualifying_round_winners.each_slice(2).to_a
  end
  return tournament 
end

これは私が提供する入力です:

puts rps_tournament_winner([
 [
   [ ["Armando", "P"], ["David", "S"] ],
   [ ["Richard", "R"],  ["Michael", "S"] ]
 ]

])

私が得る出力は次のとおりです。

David
S
Richard
R

これは私が立ち往生しているところです。この2つを互いに競わせて、最終的な勝者を宣言することはできません。

上記のコードでわかるように、forループの終了条件には注意が必要です。

何か助けはありますか?

4

1 に答える 1

2

私はあなたのコードにいくつかの変更を加えました。

注:関数[ ["Armando", "P"], ["David", "S"] ]への入力として与えると、のような結果が得られます。rps_game_winner()["David", "S"]

def rps_tournament_winner(tournament)
  qualifying_round_winners = []
  for i in 0..0
  tournament.each_with_index do |x, xi|
    x.each_with_index do |y, yi|
      winner = rps_game_winner(y)
      qualifying_round_winners.push(winner) 
    end
  end
  tournament = rps_game_winner(qualifying_round_winners)
  end
  return tournament 
end

だからあなたの入力のために

[[ [["Armando", "P"], ["David", "S"]], [["Richard", "R"], ["Michael", "S"]] ]]

のような結果も返し["Richard", "R"]ます。

于 2012-10-10T20:05:09.540 に答える