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; }); }
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); }
public LawnMowerModel MoveForward(LawnMowerModel lawnmower) { CreateLawnmowerMovementStratergy(lawnmower); var action = LawnmowerMovementStratergy.ContainsKey(lawnmower.Direction) ? LawnmowerMovementStratergy[lawnmower.Direction] : null; if (action != null) { action.Invoke(); } return(lawnmower); }
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); }
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; } } }