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(", "));
        }
Example #2
0
        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);
        }