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 } }); }
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 } }); }