コード例 #1
0
        public IReadOnlyList <Tuple <string, int?> > GenerateMeanPredictionsAndWinners(int tourId)
        {
            var fetchStrategies = new IFetchStrategy <Tour>[]
            {
                new FetchMatchesWithPredictions()
            };
            var tour             = _context.GetTours(fetchStrategies).AsNoTracking().Single(t => t.TourId == tourId);
            var matches          = tour.Matches;
            var scoresAndWinners = new List <Tuple <string, int?> >();

            foreach (var match in matches)
            {
                var predictionValues = match.Predictions.Select(p => p.Value);
                var winners          = match.Predictions.Select(p => p.PlayoffWinner);

                var meanScore  = CalculateMeanScore(predictionValues);
                var meanWinner = CalculateMeanPlayoffWinner(winners);

                if (PredictionEvaluator.GetDifference(meanScore) != 0)
                {
                    meanWinner = null;
                }
                else if (meanWinner == null)
                {
                    meanWinner = 1;
                }

                scoresAndWinners.Add(new Tuple <string, int?>(meanScore, meanWinner));
            }

            return(scoresAndWinners);
        }
コード例 #2
0
        //mb needs IPredictionEvaluator
        private void SubmitPrediction(Prediction prediction, bool isPlayoff)
        {
            var guessedWinner     = prediction.PlayoffWinner;
            var actualWinner      = prediction.Match.PlayoffWinner;
            var predictionResults = PredictionEvaluator.GetPredictionResults(prediction.Value, prediction.Match.Score, isPlayoff, guessedWinner, actualWinner);

            prediction.Sum        = predictionResults.Sum;
            prediction.Score      = predictionResults.Score;
            prediction.Difference = predictionResults.Difference;
            prediction.Outcome    = predictionResults.Outcome;

            prediction.Expert.Sum += predictionResults.Sum;
            if (predictionResults.Score)
            {
                prediction.Expert.Scores++;
            }
            else if (predictionResults.Difference)
            {
                prediction.Expert.Differences++;
            }
            else if (predictionResults.Outcome)
            {
                prediction.Expert.Outcomes++;
            }

            prediction.IsClosed = true;
        }
コード例 #3
0
        public IReadOnlyList <string> GenerateMeanPredictions(int tourId)
        {
            var fetchStrategies = new IFetchStrategy <Tour>[]
            {
                new FetchMatchesWithPredictions()
            };
            var tour    = _context.GetTours(fetchStrategies).AsNoTracking().Single(t => t.TourId == tourId);
            var matches = tour.Matches;
            var scores  = new List <string>();


            foreach (var match in matches)
            {
                var homeSum     = 0;
                var awaySum     = 0;
                var matchNumber = matches.Count;
                foreach (var prediction in match.Predictions)
                {
                    homeSum += PredictionEvaluator.GetHomeGoals(prediction.Value);
                    awaySum += PredictionEvaluator.GetAwayGoals(prediction.Value);
                }

                var homeMean = homeSum / matchNumber;
                var awayMean = awaySum / matchNumber;
                scores.Add(homeMean + ":" + awayMean);
            }

            return(scores);
        }
コード例 #4
0
        public IReadOnlyList <Tuple <string, int?> > GenerateRandomizerPredictionsAndWinners(int matchNumber)
        {
            var scoresWithWinners = new List <Tuple <string, int?> >();
            var r = new Random();

            for (var i = 1; i <= matchNumber; i++)
            {
                var score = r.Next(0, 4).ToString() + ":" + r.Next(0, 4).ToString();

                int?winner = null;
                if (PredictionEvaluator.GetDifference(score) == 0)
                {
                    winner = r.Next(1, 3);
                }

                scoresWithWinners.Add(new Tuple <string, int?>(score, winner));
            }

            return(scoresWithWinners);
        }
コード例 #5
0
        public string CalculateMeanScore(IEnumerable <string> scores)
        {
            var homeSum   = 0;
            var awaySum   = 0;
            var scoreList = scores.ToList();

            foreach (var score in scoreList)
            {
                if (!PredictionEvaluator.IsValidScore(score))
                {
                    throw new ArgumentException("Not a valid score");
                }
                homeSum += PredictionEvaluator.GetHomeGoals(score);
                awaySum += PredictionEvaluator.GetAwayGoals(score);
            }

            var homeMean = homeSum / scoreList.Count;
            var awayMean = awaySum / scoreList.Count;

            return(homeMean + ":" + awayMean);
        }
コード例 #6
0
        public static string GetMeanScore(this IEnumerable <string> scores)
        {
            var homeSum   = 0;
            var awaySum   = 0;
            var scoreList = scores.ToList();

            foreach (var score in scoreList)
            {
                if (!PredictionEvaluator.IsValidScore(score))
                {
                    throw new ArgumentException("Not a valid score");
                }
                homeSum += PredictionEvaluator.GetHomeGoals(score);
                awaySum += PredictionEvaluator.GetAwayGoals(score);
            }

            var homeMean = (double)homeSum / scoreList.Count;
            var awayMean = (double)awaySum / scoreList.Count;

            return(Math.Round(homeMean) + ":" + Math.Round(awayMean));
        }