Example #1
0
 private void CreateLawnmowerMovementStratergy(LawnMowerModel lawnmower)
 {
     LawnmowerMovementStratergy = new Dictionary <Directions, Action>();
     LawnmowerMovementStratergy.Add(Directions.North, () => { lawnmower.Position.Longitude += 1; });
     LawnmowerMovementStratergy.Add(Directions.West, () => { lawnmower.Position.Latitude -= 1; });
     LawnmowerMovementStratergy.Add(Directions.South, () => { lawnmower.Position.Longitude -= 1; });
     LawnmowerMovementStratergy.Add(Directions.East, () => { lawnmower.Position.Latitude += 1; });
 }
Example #2
0
        public GeoCoordinate ExecuteInstructions(LawnMowerModel lawnmower)
        {
            foreach (var movement in lawnmower.Instructions)
            {
                ExecuteInstruction(lawnmower, movement);
            }

            return(lawnmower.Position);
        }
        public void Ensure_Lawnmower_ChangeDirection_R_Returns_West_For_Current_Direction_South()
        {
            var lawnMower = new LawnMowerModel()
            {
                Position  = new GeoCoordinate(1, 2),
                Direction = Directions.South
            };

            lawnMower.Direction = new LawnmowerInstructions().ChangeDirection("R", lawnMower.Direction);

            Assert.AreEqual(lawnMower.Direction, Directions.West);
        }
        public void Ensure_Lawnmower_ChangeDirection_L_Returns_North_For_Current_Direction_East()
        {
            var lawnMower = new LawnMowerModel()
            {
                Position  = new GeoCoordinate(1, 2),
                Direction = Directions.East
            };

            lawnMower.Direction = new LawnmowerInstructions().ChangeDirection("L", lawnMower.Direction);

            Assert.AreEqual(lawnMower.Direction, Directions.North);
        }
        public void Ensure_Latitude_Decrements_By_One_When_Moving_West()
        {
            var latitude  = 5;
            var lawnMower = new LawnMowerModel()
            {
                Direction = Directions.West,
                Position  = new GeoCoordinate(latitude, 5)
            };

            lawnMower = new LawnmowerInstructions().MoveForward(lawnMower);

            Assert.AreEqual(lawnMower.Position.Latitude, latitude -= 1);
        }
        public void Ensure_Longitude_Decrements_By_One_When_Moving_South()
        {
            var longitude = 5;
            var lawnMower = new LawnMowerModel()
            {
                Direction = Directions.South,
                Position  = new GeoCoordinate(2, longitude)
            };

            lawnMower = new LawnmowerInstructions().MoveForward(lawnMower);

            Assert.AreEqual(lawnMower.Position.Longitude, longitude -= 1);
        }
Example #7
0
        public LawnMowerModel MoveForward(LawnMowerModel lawnmower)
        {
            CreateLawnmowerMovementStratergy(lawnmower);

            var action = LawnmowerMovementStratergy.ContainsKey(lawnmower.Direction) ? LawnmowerMovementStratergy[lawnmower.Direction] : null;

            if (action != null)
            {
                action.Invoke();
            }

            return(lawnmower);
        }
Example #8
0
        public void AddLawnmowerToGrid(string lawnMowerPosition, string lawnmowerMovements)
        {
            //TODO: validate input.for both arguments.
            var positions = lawnMowerPosition.Split(' ');
            var latitude  = int.Parse(positions[0]); //Fragile with more time would do differently
            var longitude = int.Parse(positions[1]); //Fragile with more time would do differently
            var direction = positions[2];            //Fragile with more time would do differently

            var lawnmower = new LawnMowerModel()
            {
                Position     = new GeoCoordinate(latitude, longitude),
                Direction    = GetDirection(direction),
                Instructions = lawnmowerMovements.ToCharArray()
            };

            lawnmowers.Add(lawnmower);
        }
Example #9
0
        private void ExecuteInstruction(LawnMowerModel lawnmower, char movement)
        {
            //TODO:  given more time I would have done this differently.
            switch (movement)
            {
            case 'L':
            {
                lawnmower.Direction = ChangeDirection("L", lawnmower.Direction);
                break;
            }

            case 'R':
            {
                lawnmower.Direction = ChangeDirection("R", lawnmower.Direction);
                break;
            }

            default:
            {
                MoveForward(lawnmower);
                break;
            }
            }
        }