Ejemplo n.º 1
0
        public bool CanFill(Vec cell, List <Vec> bots)
        {
            if (filled[cell] || bots.Any(bot => filled[bot]))
            {
                return(false);
            }
            if (!HasConnectivityChangesInLocalCuboid(cell, 1))
            {
                opt.Add(1);
                return(true);
            }
            else
            {
                opt.Add(0);
            }

            var result = Check(cell, bots);

            if (!result)
            {
                filled[cell] = false;
            }

            return(result);
        }
        public IEnumerable <ICommand> Solve()
        {
            // ! красить можно то, что не покрашено, и после покраски станет граундед
            // строим список того, что можно красить, сортированный по расстоянию до бота (candidates)
            // while !empty (candidates)
            //   для каждой:
            //      перебираем near-позиции с которых красить, сортировано по расстоянию до бота
            //         выбираем ту, с которой оракул разрешает красить
            //   перемещаемся в ту точку, красим, обновляем список (добавляем ноды и сортируем заново)
            // в конце возвращаемся в 0 и HALT
            Commands.Clear();
            HashSet <Vec> candidates = BuildCandidates();

            while (candidates.Any())
            {
                candidatesCount.Add(candidates.Count);
                var candidatesAndPositions = OrderCandidates(candidates);
                var any = false;
                foreach (var(candidate, nearPosition) in candidatesAndPositions)
                {
                    if (Move(nearPosition))
                    {
                        any = true;
                        Fill(candidate);
                        candidates.Remove(candidate);
                        foreach (var n in neighbors)
                        {
                            var neighbor = candidate + n;
                            if (neighbor.IsInCuboid(R) &&
                                whatToFill.Get(neighbor) &&
                                !state.Get(neighbor))
                            {
                                candidates.Add(neighbor);
                            }
                        }
                        break;
                    }
                }
                foreach (var command in Commands)
                {
                    yield return(command);
                }
                Commands.Clear();
                if (!any)
                {
                    throw new Exception("Can't move");
                }
            }
            Move(Vec.Zero);
            Commands.Add(new Halt());
            foreach (var command in Commands)
            {
                yield return(command);
            }
            Commands.Clear();
        }
Ejemplo n.º 3
0
        public double RunAndTime(Action action)
        {
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            action();
            stopWatch.Stop();
            var elapsed = stopWatch.ElapsedMilliseconds;

            sv.Add(elapsed);
            return(elapsed);
        }
Ejemplo n.º 4
0
        //[Test]
        public void PlayOneTestManyTimes(int testNumber, int repetitionCount)
        {
            var tests = RaceProblemsRepo.GetTests();
            var test  = tests.ElementAt(testNumber);
            var stat  = new StatValue();
            var racer = new DoubleRandomRacer();

            for (int i = 0; i < repetitionCount; i++)
            {
                var finalState = RaceController.Play(test, racer, false);
                var testScore  = finalState.FlagsTaken * 100 - finalState.Time;
                stat.Add(testScore);
            }
            var resWith = stat.Mean;

            Console.WriteLine(testNumber.ToString());
            Console.WriteLine("mean " + resWith.ToString());
            Console.WriteLine("conf " + stat.ConfIntervalSize.ToString());
        }
Ejemplo n.º 5
0
        public void TreeSizeMeasurement()
        {
            var totalSize = new StatValue();

            foreach (var stateInput in GetStatesCollection())
            {
                var localSize = new StatValue();
                var state     = StateReader.Read(stateInput);
                var ai        = new AlphabetaAi(evaluator, 3)
                {
                    Logging = false
                };
                for (var i = 0; i < 1; i++)
                {
                    var action = ai.GetAction(state, 250);
                    localSize.Add(ai.LastSearchTreeSize);
                    action.ApplyTo(state);
                }
                Console.WriteLine(localSize.ToDetailedString());
                totalSize.AddAll(localSize);
            }
            Console.WriteLine("Total:");
            Console.WriteLine(totalSize.ToDetailedString());
        }