Ejemplo n.º 1
0
        public List <Espelho> ObterMelhoresEspelhos(string[] alunos, List <string[]> historicoDeEspelhos, Func <string[], bool> filtroCasosEspeciais)
        {
            var historico = new Historico(alunos, historicoDeEspelhos);

            var espelhosEmbaralhados = GeraEspelhosRandomicamenteEmbaralhados(alunos, QuantidadeEmbaralhamentos);

            var espelhosQueAtendemFiltro        = EliminaEspelhosQueNaoAtendemCasosEspeciais(espelhosEmbaralhados, filtroCasosEspeciais);
            var espelhosOrdenadosPorMelhorScore = OrdenarEspelhosPorScoreDeRepeticao(historico, espelhosQueAtendemFiltro);

            return(espelhosOrdenadosPorMelhorScore);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Esse é o método que ordena quais são os melhores espelhos.
        /// O score é calculado com base nas repetições dos mesmos colegas. Quanto menos repetições,
        /// melhor o score.
        /// </summary>
        /// <param name="historico"></param>
        /// <param name="arraysEmbaralhados"></param>
        /// <returns></returns>
        private List <Espelho> OrdenarEspelhosPorScoreDeRepeticao(Historico historico, List <string[]> arraysEmbaralhados)
        {
            List <Espelho> espelhos = new List <Espelho>();

            foreach (var arrayEmbaralhado in arraysEmbaralhados)
            {
                var projecao = historico.ObterHistoricoProjetadoComNovoEmbaralhamento(arrayEmbaralhado);
                var score    = new Espelho(projecao, arrayEmbaralhado);
                espelhos.Add(score);
            }

            var espelhosOrdenadosPorScore = espelhos.OrderBy(x => x.ValorScore);

            return(espelhosOrdenadosPorScore.ToList());
        }