def rps_tournament_winner(tournament)
for i in 0..1 do
if tournament[i][1].is_a? Array then
rps_tournament_winner(tournament[i])
else
tournament=rps_game_winner(tournament)
return
end
end
return tournament
end
Это является частью реализации рока-бумага-ножницы в РубинеМанипулирование массивы с рекурсивной функцией
rps_game_winner
принимает массив двух массивов в формате
[ ["Allen", "S"], ["Omer", "P"] ]
, где первый элемент имя игрока, вторым элементом является их решение и возвращает победителя.
rps_tournament_winner
принимает ввод вложенных массивов с произвольной глубиной, как
[
[
[ ["Armando", "P"], ["Dave", "S"] ],
[ ["Richard", "R"], ["Michael", "S"] ],
],
[
[ ["Allen", "S"], ["Omer", "P"] ],
[ ["David E.", "R"], ["Richard X.", "P"] ]
]
]
То, что я пытаюсь сделать, это изменение оригинального вклада как функция делает прогресс, но вход выходит, как он вошел. Включение глобальных переменных - это решение, но это работа, которая должна быть оценена с помощью автогрейдера, и я подозреваю, что она просто подталкивает некоторый ввод непосредственно к функции и сравнивает вывод, поэтому его не вариант.
@NiklasB. Конечно, поскольку это Ruby, невозможно * не * использовать объекты ';)'. (Я предполагаю, что вы имеете в виду классы, я просто педантичен.) –
@Andrew: О, конечно, я имел в виду объекты с типами, разумными для этой цели;) –