public static void CreatePalka2(State state, List <ActionBase> result) { var k = 1; while (true) { var boosters = state.Boosters.Where(b => b.Type == BoosterType.Extension).ToList(); if (!boosters.Any()) { return; } var map = state.Map; var me = state.SingleWorker; var pathBuilder = new PathBuilder(map, me.Position, false); var best = boosters.OrderBy(b => pathBuilder.Distance(b.Position)).First(); var actions = pathBuilder.GetActions(best.Position); var y = k / 2 + 1; y = k % 2 == 0 ? -y : y; var add = new UseExtension(new V(0, y)); k += 2; actions.Add(add); state.ApplyRange(actions); result.AddRange(actions); } }
public static void CloneAttack(State state, List <List <ActionBase> > result) { if (state.Boosters.All(b => b.Type != BoosterType.MysteriousPoint)) { return; } while (true) { var boosters = state.Boosters.Where(b => b.Type == BoosterType.Cloning).ToList(); if (!boosters.Any()) { break; } var map = state.Map; var me = state.SingleWorker; var pathBuilder = new PathBuilder(map, me.Position, false); var best = boosters.OrderBy(b => pathBuilder.Distance(b.Position)).First(); var actions = pathBuilder.GetActions(best.Position); state.ApplyRange(actions); result[0].AddRange(actions); } if (state.CloningCount == 0) { return; } var mboosters = state.Boosters.Where(b => b.Type == BoosterType.MysteriousPoint).ToList(); var mpathBuilder = new PathBuilder(state.Map, state.SingleWorker.Position, false); var mbest = mboosters.OrderBy(b => mpathBuilder.Distance(b.Position)).First(); var mactions = mpathBuilder.GetActions(mbest.Position); state.ApplyRange(mactions); result[0].AddRange(mactions); while (state.CloningCount > 0) { var cactions = new List <(Worker w, ActionBase action)>(); for (var i = 0; i < state.Workers.Count; i++) { var w = state.Workers[i]; if (cactions.Count < state.CloningCount) { var useCloning = new UseCloning(); cactions.Add((w, useCloning)); result[i].Add(useCloning); result.Add(new List <ActionBase>()); } else { var wait = new Wait(); cactions.Add((w, wait)); result[i].Add(wait); } } state.Apply(cactions); } }