예제 #1
0
        public void Post(string contestID, string key)
        {
            if (ConfigurationManager.AppSettings["ApiKey"] != key)
            {
                return;
            }
            APerfsDB db = new APerfsDB();

            APerfs aPerfs = db.GetAPerfs(contestID);

            bool isContainContest = aPerfs != null;

            if (!isContainContest)
            {
                aPerfs = new APerfs(contestID);
            }

            double defaultValue = contestID.Substring(0, 3) == "abc" ? 800 : 1600;

            Standings standings = Standings.GetStandings(contestID);

            StandingData[] datas             = standings.StandingsData;
            Dictionary <string, double> dict = aPerfs.APerfDic;
            int count = 0;

            foreach (var standing in datas)
            {
                if (!standing.IsRated)
                {
                    continue;
                }
                if (dict.ContainsKey(standing.UserScreenName))
                {
                    continue;
                }
                CompetitionResult[] results = CompetitionResult.GetFromJson(standing.UserScreenName);
                double aperf = CompetitionResult.CalcAPerf(results, defaultValue);
                dict.Add(standing.UserScreenName, aperf);
                count++;
                if (count >= 100)
                {
                    Update();
                    count = 0;
                }
            }

            Update();
            void Update()
            {
                aPerfs.APerfDic = dict;
                if (!isContainContest)
                {
                    db.CreateAPerfs(aPerfs);
                }
                else
                {
                    db.UpdateAPerfs(aPerfs);
                }
            }
        }
 protected CompetitionResult GetCompetitionResult()
 {
     if (_competitionResult == null)
     {
         var repository = new Repository();
         _competitionResult = repository.GetCompetitionResult();
     }
     return(_competitionResult);
 }
        protected void InvokeAction(Action <CompetitionResult> action, CompetitionResult competitionResult, string logMessage)
        {
            var watch = Stopwatch.StartNew();

            action(competitionResult);

            watch.Stop();

            WriteToLog(logMessage, watch.Elapsed);
        }
예제 #4
0
        public static CompetitorResult FromResult(CompetitionResult result)
        {
            var score = 0;

            if (result == CompetitionResult.Winner)
            {
                score++;
            }

            return(new CompetitorResult(result, score));
        }
예제 #5
0
        public void addPoints(CompetitionResult result, int duration, int rank)
        {
            if (rank < 100)
            {
                result.pointsBalance = (100 - rank) * duration;
            }
            ApplicationUser serviceProvider = db.Users.Find(result.ServiceProviderId);

            serviceProvider.ServiceProviderPoints += result.pointsBalance;
            db.Entry(serviceProvider).State        = System.Data.Entity.EntityState.Modified;
        }
예제 #6
0
        public void DifferentDepths()
        {
            IDeterministicState startState = Utils.GetEmptyTicTacToeState();
            int          minSearchDepth    = 2;
            int          maxSearchDepth    = 5;
            SearchEngine engine            = new SearchEngine();

            CompetitionResult competitionResult = engine.Compete(startState, maxSearchDepth, minSearchDepth);

            // Print some of the results
            Console.WriteLine("Max Search Time " + competitionResult.MaxTotalTime);
            Console.WriteLine("Min Search Time " + competitionResult.MinTotalTime);
            Console.WriteLine("Final Score " + competitionResult.FinalState.Evaluate(0, new List <IState>()));
        }
예제 #7
0
        public CompetitionResult pushPayment(CompetitionResult result)
        {
            CompetitionBalance item = new CompetitionBalance();

            item.Method               = "Competition";
            item.CreationDate         = DateTime.Now;
            item.LastModificationDate = DateTime.Now;
            item.Amount               = result.TotalBalance;
            item.ServiceProviderId    = result.ServiceProviderId;
            item.Status               = "Active";
            item.Currency             = "$";
            db.CompetitionBalances.Add(item);
            return(result);
        }
예제 #8
0
        public void DifferentEngines()
        {
            IDeterministicState startState = Utils.GetEmptyTicTacToeState();
            int          searchDepth       = 5;
            int          playDepth         = 100;
            SearchEngine engine1           = new SearchEngine();
            SearchEngine engine2           = new SearchEngine();

            CompetitionResult competitionResult = CompetitionManager.Compete(engine1, engine2, startState, searchDepth, searchDepth, playDepth);

            // Print some of the results
            Console.WriteLine("Max Search Time " + competitionResult.MaxTotalTime);
            Console.WriteLine("Min Search Time " + competitionResult.MinTotalTime);
            Console.WriteLine("Final Score " + competitionResult.FinalState.Evaluate(0, new List <IState>()));
        }
예제 #9
0
        public void MinAlternateEvaluation()
        {
            IDeterministicState startState = Utils.GetEmptyTicTacToeState();
            int          searchDepth       = 6;
            SearchEngine engine            = new SearchEngine();

            CompetitionResult competitionResult = engine.Compete(startState, searchDepth, minAlternateEvaluation: (s, d, l) => {
                // Some alternate evaluation goes here - you probably don't really want to return 0
                return(0);
            });

            // Print some of the results
            Console.WriteLine("Max Search Time " + competitionResult.MaxTotalTime);
            Console.WriteLine("Min Search Time " + competitionResult.MinTotalTime);
            Console.WriteLine("Final Score " + competitionResult.FinalState.Evaluate(0, new List <IState>()));
        }
예제 #10
0
        public List <CompetitionResult> getFastest(List <ApplicationUser> users, DateTime startDate, bool tempResult)
        {
            List <CompetitionResult> result = new List <CompetitionResult>();

            foreach (var user in users)
            {
                List <Service>    services      = helper.getUserServices(user.Id, startDate);
                List <Service>    activeSerives = helper.getServicesFiltered(services, CoreController.ServiceStatus.Active.ToString());
                List <Service>    doneServices  = helper.getServicesFiltered(services, CoreController.ServiceStatus.Done.ToString());
                double            speed         = UserHelperLibrary.ServiceProviderSpeed(doneServices.Count, startDate);
                CompetitionResult temp          = new CompetitionResult
                {
                    Speed                  = speed < 1 ? 1 : speed,
                    ServiceProviderId      = user.Id,
                    NumberOfActiveServices = activeSerives.Count(),
                    NumberOfDoneServices   = doneServices.Count(),
                    LastModificationDate   = DateTime.Now,
                    CreationDate           = DateTime.Now,
                    TotalBalance           = 0,
                    SuspendedBalance       = 0,
                    AvailableBalance       = 0,
                    Rating                 = 0,
                    AvgServicesInOneDay    = 0
                                             //TotalBalance = balance.TransferedBalance,
                                             //AvailableBalance = balance.DoneBalance,
                                             //SuspendedBalance = balance.SuspendedBalance,
                };
                if (tempResult)
                {
                    temp.ServiceProvider = user;
                }
                result.Add(temp);
                //db.CompetitionResults.Add(temp);
            }
            result = result.OrderByDescending(a => a.Speed).ToList();
            int j = 1;

            foreach (var item in result)
            {
                item.rank = j;
                j++;
            }
            return(result);
            //return InsertionSortNew(result);
        }
예제 #11
0
        public List <CompetitionResult> getMostDoneServices(List <ApplicationUser> users, DateTime startDate, bool tempResult)
        {
            List <CompetitionResult> result = new List <CompetitionResult>();

            foreach (var user in users)
            {
                List <Service>    services      = helper.getUserServices(user.Id, startDate);
                List <Service>    activeSerives = helper.getServicesFiltered(services, CoreController.ServiceStatus.Active.ToString());
                List <Service>    doneServices  = helper.getServicesFiltered(services, CoreController.ServiceStatus.Done.ToString());
                double            Rating        = helper.getUserRating(doneServices);
                CompetitionResult temp          = new CompetitionResult
                {
                    ServiceProviderId      = user.Id,
                    NumberOfActiveServices = activeSerives.Count(),
                    NumberOfDoneServices   = doneServices.Count(),
                    LastModificationDate   = DateTime.Now,
                    CreationDate           = DateTime.Now,
                    //Rating = Rating
                    //TotalBalance = balance.TransferedBalance,
                    //AvailableBalance = balance.DoneBalance,
                    //SuspendedBalance = balance.SuspendedBalance,
                };
                if (tempResult)
                {
                    temp.ServiceProvider = user;
                }
                result.Add(temp);
            }
            result = result.OrderByDescending(a => a.NumberOfDoneServices).ToList();
            int j = 1;

            foreach (var item in result)
            {
                item.rank = j;
                j++;
            }

            return(result);
        }
        public void Build_UsingMainTeamsLostCompetition_IncludesOpponentsTotalsInResults()
        {
            // 1. Arrange
            var mainTeam      = new Team("Loser");
            var opponentsTeam = new Team("Winner");

            // 2. Act
            var mainTeamsCompetitionResult = new CompetitionResult
            {
                ParticipatingTeam         = mainTeam,
                OpponentsTeam             = opponentsTeam,
                TotalGoalsAgainstOpponent = 0,
                TotalGoalsMadeByOpponent  = 1,
            };

            _poolStageTableRowsBuilder.Add(mainTeamsCompetitionResult);
            var someOtherCompetitionResult = new CompetitionResult
            {
                ParticipatingTeam         = new Team(""),
                OpponentsTeam             = new Team(""),
                TotalGoalsAgainstOpponent = 0,
                TotalGoalsMadeByOpponent  = 0,
            };

            _poolStageTableRowsBuilder.Add(someOtherCompetitionResult);
            var poolStageTableRows = _poolStageTableRowsBuilder.Build();

            // 3. Assert
            var opponentsRow = poolStageTableRows.Single(record => record.Team == opponentsTeam);

            Assert.AreEqual(
                _poolStageConfiguration.TotalPointsToIncreaseOnWonRounds,
                opponentsRow.TotalPoints
                );
            Assert.AreEqual(0, opponentsRow.TotalGoalsMadeByOpponents);
            Assert.AreEqual(1, opponentsRow.TotalGoalsAgainstOpponents);
            Assert.AreEqual(1, opponentsRow.GoalDifference);
        }
예제 #13
0
 public CompetitorResult(CompetitionResult result, int score)
 {
     Result = result;
     Score  = score;
 }