2012-07-29 3 views
1

Ruby를 처음 사용하면서 언어로 바위 종이 가위 토너먼트를 구현하려고합니다.Ruby에서 바위, 종이, 가위 토너먼트 구현

아래 코드에서 호출되는 rps_game_winner 메서드는 한 쌍의 경쟁자에서 승자를 반환합니다. 내가 할 곳

David 
S 
Richard 
R 

이것은 :

puts rps_tournament_winner([ 
[ 
    [ ["Armando", "P"], ["David", "S"] ], 
    [ ["Richard", "R"], ["Michael", "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) 
     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 

이 내가 제공하는 입력은 다음과 같습니다

지금까지 내 시도 붙어있어. 나는이 두 사람이 서로 경쟁 할 수 없으며 최종 우승자를 선포합니다.

위의 코드에서 알 수 있듯이 for 루프의 종료 조건이주의해야합니다.

어떤 도움이 필요합니까?

+1

조언 : 더 많은 표현 맵/select/... 및 /에 대한 less 명령문을 사용하십시오. – tokland

+0

재귀 적 솔루션이 더 쉽습니다. 특히 임의의 깊은 대괄호를 처리해야하는 경우 특히 그렇습니다. 나는 이것이 "숙제"라는 태그가 붙어 있기 때문에 지금 당장 떠날 것이다. –

답변

2

코드에서 일부 수정을했습니다.

참고 : 내 rps_game_winner() 기능에 대한 입력으로 [ ["Armando", "P"], ["David", "S"] ]을주는 경우에 그것이 ["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"] 같은 결과를 반환합니다.

관련 문제