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(); }
public double RunAndTime(Action action) { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); action(); stopWatch.Stop(); var elapsed = stopWatch.ElapsedMilliseconds; sv.Add(elapsed); return(elapsed); }
//[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()); }
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()); }