public void Test() { var commands = new Queue <ICommand>(new ICommand[] { new Fission(new NearDifference(new Vec(1, 0, 0)), 1), new Wait(), new Fission(new NearDifference(new Vec(0, 1, 0)), 0), new Wait(), new Wait(), new SMove(new LongLinearDifference(new Vec(-1, 0, 0))), new FusionP(new NearDifference(new Vec(0, 1, 0))), new Wait(), new FusionS(new NearDifference(new Vec(0, -1, 0))), new FusionP(new NearDifference(new Vec(1, 0, 0))), new FusionS(new NearDifference(new Vec(-1, 0, 0))), new Halt() }); var delimitedCommands = commands.ToDelimitedString(", "); Console.WriteLine(delimitedCommands); var reversed = InvertorDisassembler.ReverseCommands(commands, new Matrix(5), new Matrix(5)).ToList(); Console.WriteLine(reversed.ToDelimitedString(", ")); var reversedTwice = InvertorDisassembler.ReverseCommands(new Queue <ICommand>(reversed), new Matrix(5), new Matrix(5)).ToList(); Console.WriteLine(reversedTwice.ToDelimitedString(", ")); Assert.AreEqual(delimitedCommands, reversedTwice.ToDelimitedString(", ")); }
public void Disassemble() { var problem = ProblemSolutionFactory.LoadProblem("FD120"); //var solver = new InvertorDisassembler(new DivideAndConquer(problem.SourceMatrix, true), problem.SourceMatrix); //var solver = new InvertorDisassembler(new GreedyPartialSolver(problem.SourceMatrix, new Matrix(problem.R), new ThrowableHelperFast(problem.SourceMatrix)), problem.SourceMatrix); var solver = new InvertorDisassembler(new HorizontalSlicer(problem.SourceMatrix, 6, 6, true), problem.SourceMatrix); //var solver = new HorizontalSlicer(problem.SourceMatrix, 6, 6, true); List <ICommand> commands = new List <ICommand>(); try { commands.AddRange(solver.Solve()); } catch (Exception e) { Log.For(this).Error($"Unhandled exception in solver for {problem.Name}", e); throw; } finally { var bytes = CommandSerializer.Save(commands.ToArray()); File.WriteAllBytes(GetSolutionPath(FileHelper.SolutionsDir, problem.Name), bytes); } var state = new DeluxeState(problem.SourceMatrix, problem.TargetMatrix); new Interpreter(state).Run(commands); }