Beispiel #1
0
        public void Part2StepTest()
        {
            // Given
            var ship = new Ship();

            ship.Move(RouteInstruction.Parse("F10"));
            Assert.Equal(100, ship.X);
            Assert.Equal(10, ship.Y);
            Assert.Equal(10, ship.WaypointX);
            Assert.Equal(1, ship.WaypointY);

            ship.Move(RouteInstruction.Parse("N3"));
            Assert.Equal(100, ship.X);
            Assert.Equal(10, ship.Y);
            Assert.Equal(10, ship.WaypointX);
            Assert.Equal(4, ship.WaypointY);

            ship.Move(RouteInstruction.Parse("F7"));
            Assert.Equal(170, ship.X);
            Assert.Equal(38, ship.Y);
            Assert.Equal(10, ship.WaypointX);
            Assert.Equal(4, ship.WaypointY);

            ship.Move(RouteInstruction.Parse("R90"));
            Assert.Equal(170, ship.X);
            Assert.Equal(38, ship.Y);
            Assert.Equal(4, ship.WaypointX);
            Assert.Equal(-10, ship.WaypointY);

            ship.Move(RouteInstruction.Parse("F11"));
            Assert.Equal(214, ship.X);
            Assert.Equal(-72, ship.Y);
            Assert.Equal(4, ship.WaypointX);
            Assert.Equal(-10, ship.WaypointY);
        }
Beispiel #2
0
        public void ProcessInstruction()
        {
            Instruction instruction = new Instruction(this);

            if (!string.IsNullOrEmpty(XYInstruction) && !string.IsNullOrWhiteSpace(XYInstruction))
            {
                double x   = double.Parse(XYInstruction[0].ToString());
                double y   = double.Parse(XYInstruction[2].ToString());
                string dir = XYInstruction.Length < 5 ? "n" : XYInstruction[4].ToString();
                instruction.Position = new System.Windows.Point(x, y);
                switch (dir.ToLower())
                {
                case "n": { instruction.InitialDirection = DirectionTypes.North; } break;

                case "s": { instruction.InitialDirection = DirectionTypes.South; } break;

                case "e": { instruction.InitialDirection = DirectionTypes.East; } break;

                case "w": { instruction.InitialDirection = DirectionTypes.West; } break;
                }
            }
            else
            {
                string dir = DirectionString;
                instruction.Position         = new System.Windows.Point(Left, Top);
                instruction.InitialDirection = Direction;
            }
            instruction.Moves = string.IsNullOrWhiteSpace(RouteInstruction) || string.IsNullOrEmpty(RouteInstruction) ? new string[0] :
                                RouteInstruction.Where(c => !char.IsWhiteSpace(c) && char.IsLetter(c) && new string[] { "m", "l", "r" }.Contains(c.ToString().ToLower())).Select(c => c.ToString()).ToArray();

            Instruction = instruction;
        }
Beispiel #3
0
        public void Part1StepTest()
        {
            // Given
            var ship = new Ship();

            ship.MoveAbsolute(RouteInstruction.Parse("F10"));
            Assert.Equal(10, ship.X);
            Assert.Equal(0, ship.Y);

            ship.MoveAbsolute(RouteInstruction.Parse("N3"));
            Assert.Equal(10, ship.X);
            Assert.Equal(3, ship.Y);

            ship.MoveAbsolute(RouteInstruction.Parse("F7"));
            Assert.Equal(17, ship.X);
            Assert.Equal(3, ship.Y);

            ship.MoveAbsolute(RouteInstruction.Parse("R90"));
            Assert.Equal(17, ship.X);
            Assert.Equal(3, ship.Y);
            Assert.Equal(270, ship.Orientation);

            ship.MoveAbsolute(RouteInstruction.Parse("F11"));
            Assert.Equal(17, ship.X);
            Assert.Equal(-8, ship.Y);
        }