示例#1
0
        public Solved Solve(State state)
        {
            var solution = new List <ActionBase>();

            if (usePalka)
            {
                BoosterMaster.CreatePalka(state, solution);
            }

            while (state.UnwrappedLeft > 0)
            {
                if (useWheels && state.FastWheelsCount > 0)
                {
                    var useFastWheels = new UseFastWheels();
                    solution.Add(useFastWheels);
                    state.Apply(useFastWheels);
                }
                var part = SolvePart(state);
                solution.AddRange(part);
                state.ApplyRange(part);
            }

            return(new Solved {
                Actions = new List <List <ActionBase> > {
                    solution
                }
            });
        }
示例#2
0
        public Solved Solve(State state)
        {
            var solution = new List <List <ActionBase> > {
                new List <ActionBase>()
            };

            state.BuyBoosters(buy);

            if (usePalka)
            {
                BoosterMaster.CreatePalka(state, solution[0]);
            }
            //BoosterMaster.CloneAttack(state, solution);

            while (state.UnwrappedLeft > 0)
            {
                //Console.Out.WriteLine($"--BEFORE {state.Time}:\n{state.Print()}");

                var partialSolution = new List <List <ActionBase> >();

                while (partialSolution.Count < solution.Count)
                {
                    var part = SolvePart(state, partialSolution);
                    partialSolution.Add(part);
                    //Console.Out.WriteLine($"  PART:\n{part.Format()}");
                }

                for (int i = 0; i < partialSolution[0].Count; i++)
                {
                    var l = new List <(Worker, ActionBase)>();
                    for (int j = 0; j < partialSolution.Count; j++)
                    {
                        solution[j].Add(partialSolution[j][i]);
                        l.Add((state.Workers[j], partialSolution[j][i]));
                    }

                    while (l.Count < state.Workers.Count)
                    {
                        var wait = new Wait();
                        solution.Add(new List <ActionBase> {
                            wait
                        });
                        l.Add((state.Workers[l.Count], wait));
                    }
                    state.Apply(l);
                }

                /*if (state.Time > 1000)
                 *  break;*/
            }

            return(new Solved {
                Actions = solution, Buy = buy.ToList()
            });
        }
        public Solved Solve(State state)
        {
            var solution = new List <ActionBase>();

            if (usePalka)
            {
                BoosterMaster.CreatePalka(state, solution);
            }

            //var tick = 0;

            var used = new HashSet <(V position, int unwrappedLeft)>();

            while (state.UnwrappedLeft > 0)
            {
                if (useWheels && state.FastWheelsCount > 0)
                {
                    var useFastWheels = new UseFastWheels();
                    solution.Add(useFastWheels);
                    state.Apply(useFastWheels);
                }
                if (useDrill && state.DrillCount > 0)
                {
                    var drill = new UseDrill();
                    solution.Add(drill);
                    state.Apply(drill);
                }
                //Console.Out.WriteLine($"--BEFORE:\n{state.Print()}");
                var part = SolvePart(state, used);
                if (part == null)
                {
                    part = SolvePart(state, new HashSet <(V position, int unwrappedLeft)>());
                }
                used.Add((state.SingleWorker.Position, state.UnwrappedLeft));
                solution.AddRange(part);
                state.ApplyRange(part);
                // Console.Out.WriteLine($"  PART:\n{part.Format()}");
                //
                // if (tick++ > 1000)
                //     break;
            }

            return(new Solved {
                Actions = new List <List <ActionBase> > {
                    solution
                }
            });
        }
        public Solved Solve(State state)
        {
            var solution = new List <List <ActionBase> > {
                new List <ActionBase>()
            };

            BoosterMaster.CloneAttack(state, solution);

            var offsets = Enumerable.Range(0, state.Workers.Count).Select(i => i * state.ClustersState.Path.Count / state.Workers.Count).ToList();

            while (state.UnwrappedLeft > 0)
            {
                //Console.Out.WriteLine($"--BEFORE:\n{state.Print()}");

                var partialSolution = new List <List <ActionBase> >();

                while (partialSolution.Count < solution.Count)
                {
                    var clusterId = state.ClustersState.Path[offsets[partialSolution.Count]];
                    while (state.ClustersState.Unwrapped[(0, clusterId)] == 0)