public ChaveamentoPartidas DisputarPartidas(ChaveamentoPartidas chaveamentoAtual) { if (chaveamentoAtual.Count == 1) { return(chaveamentoAtual); } else { var proximoChaveamento = new ChaveamentoPartidas(chaveamentoAtual); for (int i = 0; i < chaveamentoAtual.Count; i += 2) { var vencedorA = _regraVencedor.Ranquear(chaveamentoAtual[i])[0]; var vencedorB = _regraVencedor.Ranquear(chaveamentoAtual[i + 1])[0]; proximoChaveamento.Add(new Partida(vencedorA, vencedorB)); } return(DisputarPartidas(proximoChaveamento)); } }
public ChaveamentoPartidas CriarChaveamento(Filme[] filmes) { if (filmes == null) { throw new NullReferenceException("A coleção de filmes não pode ser nula."); } if (filmes.Length % 2 != 0) { throw new ArgumentOutOfRangeException("É necessário um Nº par de filmes para gerar o chaveamento."); } var filmesOrdenados = filmes .OrderBy(f => f.Titulo) .ToList(); var chaveamento = new ChaveamentoPartidas(); var totalIteracoes = filmesOrdenados.Count / 2; for (int i = 0; i < totalIteracoes; i++) { chaveamento.Add(new Partida(filmesOrdenados[i], filmesOrdenados[filmesOrdenados.Count - 1 - i])); } return(chaveamento); }