コード例 #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 <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
                }
            });
        }