public void TestConvertStepsToAscii()
        {
            ScaffoldPathBuilder spb    = new ScaffoldPathBuilder();
            List <long>         result = spb.ConvertStepsToAscii(123);

            Assert.That(result[0], Is.EqualTo('0' + 1));
            Assert.That(result[1], Is.EqualTo('0' + 2));
            Assert.That(result[2], Is.EqualTo('0' + 3));
        }
        public void TestIsDownPositionScaffolding()
        {
            Dictionary <Point, long> scaffolding = new Dictionary <Point, long>();
            ScaffoldPathBuilder      spb         = new ScaffoldPathBuilder();
            Point pos = new Point(0, 0);

            bool isScaffolding = spb.IsDownPositionScaffolding(scaffolding, pos);

            Assert.That(isScaffolding, Is.EqualTo(false));

            scaffolding[new Point(0, 1)] = 35;
            isScaffolding = spb.IsDownPositionScaffolding(scaffolding, pos);
            Assert.That(isScaffolding, Is.EqualTo(true));
        }
Ejemplo n.º 3
0
        public string SolvePartTwo(string[] input)
        {
            long[] cameraFeedProgram = string.Join(",", input)
                                       .Split(",").Select(x => Int64.Parse(x)).ToArray();
            long[] wakeupProgram = string.Join(",", input)
                                   .Split(",").Select(x => Int64.Parse(x)).ToArray();

            VacuumRobot vr = new VacuumRobot(cameraFeedProgram, false, true);
            Dictionary <Point, long> scaffolding = GetCameraFeed(vr)
                                                   .Where(x => x.Value != 46 && x.Value != 10)
                                                   .ToDictionary(x => x.Key, x => x.Value);

            ScaffoldPathBuilder spb = new ScaffoldPathBuilder();

            StringBuilder sb = new StringBuilder();

            spb.GetScaffoldInstructions(scaffolding)
            .Select(x => Convert.ToChar(x))
            .ToList().ForEach(c => sb.Append(c));

            string mainMovRoutine = sb.ToString();
            string movFunctionA   = ReduceInstructions(ref mainMovRoutine, "A", 18, "ABC");
            string movFunctionB   = ReduceInstructions(ref mainMovRoutine, "B", 20, "ABC");
            string movFunctionC   = ReduceInstructions(ref mainMovRoutine, "C", 6, "ABC");

            wakeupProgram[0] = 2;
            vr = new VacuumRobot(wakeupProgram, true, false);
            vr.Run();
            EnterInput(vr, mainMovRoutine);
            EnterInput(vr, movFunctionA);
            EnterInput(vr, movFunctionB);
            EnterInput(vr, movFunctionC);
            EnterInput(vr, "n");

            while (vr.CurrentState != IntcodeComputer.State.Halted)
            {
                vr.Run();
            }

            Console.WriteLine();

            return(vr.Output.ToString());
        }
        public void TestTurnRight()
        {
            Dictionary <Point, long> scaffolding = new Dictionary <Point, long>();
            ScaffoldPathBuilder      spb         = new ScaffoldPathBuilder();

            ScaffoldPathBuilder.Direction dir = ScaffoldPathBuilder.Direction.Up;

            dir = spb.TurnRight(dir);
            Assert.That(dir, Is.EqualTo(ScaffoldPathBuilder.Direction.Right));

            dir = spb.TurnRight(dir);
            Assert.That(dir, Is.EqualTo(ScaffoldPathBuilder.Direction.Down));

            dir = spb.TurnRight(dir);
            Assert.That(dir, Is.EqualTo(ScaffoldPathBuilder.Direction.Left));

            dir = spb.TurnRight(dir);
            Assert.That(dir, Is.EqualTo(ScaffoldPathBuilder.Direction.Up));
        }
        public void TestMove()
        {
            Dictionary <Point, long> scaffolding = new Dictionary <Point, long>();
            ScaffoldPathBuilder      spb         = new ScaffoldPathBuilder();

            Point pos = new Point(0, 0);

            pos = spb.Move(pos, ScaffoldPathBuilder.Direction.Up);
            Assert.That(pos.Y, Is.EqualTo(-1));

            pos = spb.Move(pos, ScaffoldPathBuilder.Direction.Down);
            Assert.That(pos.Y, Is.EqualTo(0));

            pos = spb.Move(pos, ScaffoldPathBuilder.Direction.Left);
            Assert.That(pos.X, Is.EqualTo(-1));

            pos = spb.Move(pos, ScaffoldPathBuilder.Direction.Right);
            Assert.That(pos.X, Is.EqualTo(0));
        }
        public void TestMoveForward()
        {
            Dictionary <Point, long> scaffolding = new Dictionary <Point, long>();
            ScaffoldPathBuilder      spb         = new ScaffoldPathBuilder();

            Point pos = new Point(0, 0);

            ScaffoldPathBuilder.Direction dir = ScaffoldPathBuilder.Direction.Up;

            scaffolding[new Point(0, -1)] = 35;
            scaffolding[new Point(0, -2)] = 35;
            scaffolding[new Point(0, -3)] = 35;
            scaffolding[new Point(0, -4)] = 35;

            long steps = spb.MoveForward(scaffolding, ref pos, dir);

            Assert.That(steps, Is.EqualTo(4));
            Assert.That(pos.X, Is.EqualTo(0));
            Assert.That(pos.Y, Is.EqualTo(-4));
        }
        public void TestGetInitialDirection()
        {
            Dictionary <Point, long> scaffolding = new Dictionary <Point, long>();
            ScaffoldPathBuilder      spb         = new ScaffoldPathBuilder();

            scaffolding[new Point(1, 1)] = 94;
            Assert.That(spb.GetInitialDirection(scaffolding),
                        Is.EqualTo(ScaffoldPathBuilder.Direction.Up));

            scaffolding[new Point(1, 1)] = 118;
            Assert.That(spb.GetInitialDirection(scaffolding),
                        Is.EqualTo(ScaffoldPathBuilder.Direction.Down));

            scaffolding[new Point(1, 1)] = 60;
            Assert.That(spb.GetInitialDirection(scaffolding),
                        Is.EqualTo(ScaffoldPathBuilder.Direction.Left));

            scaffolding[new Point(1, 1)] = 62;
            Assert.That(spb.GetInitialDirection(scaffolding),
                        Is.EqualTo(ScaffoldPathBuilder.Direction.Right));
        }
        public void TestCanTurnLeft()
        {
            Dictionary <Point, long> scaffolding = new Dictionary <Point, long>();
            ScaffoldPathBuilder      spb         = new ScaffoldPathBuilder();

            Point pos = new Point(0, 0);

            scaffolding[new Point(-1, 0)] = 35;

            bool canTurn = spb.CanTurnLeft(scaffolding, pos, ScaffoldPathBuilder.Direction.Up);

            Assert.That(canTurn, Is.EqualTo(true));

            canTurn = spb.CanTurnLeft(scaffolding, pos, ScaffoldPathBuilder.Direction.Left);
            Assert.That(canTurn, Is.EqualTo(false));

            canTurn = spb.CanTurnLeft(scaffolding, pos, ScaffoldPathBuilder.Direction.Down);
            Assert.That(canTurn, Is.EqualTo(false));

            canTurn = spb.CanTurnLeft(scaffolding, pos, ScaffoldPathBuilder.Direction.Right);
            Assert.That(canTurn, Is.EqualTo(false));
        }