public void RunInstructions_Move_faceNorth() { var instructions = new LawnmowerInstructions { BoundaryWidth = 5, BoundaryHeight = 5, StartX = 3, StartY = 3, StartDirection = "E", Instructions = new List<char> { 'M', 'M', 'R', 'M', 'M', 'R', 'M', 'R', 'R', 'M' } }; var result = lawnmowerCommaner.RunInstructions(instructions); Assert.AreEqual(5, result.X); Assert.AreEqual(1, result.Y); Assert.AreEqual("E", result.Facing); }
public void RunInstructions_Move_MoveNorthOnce() { var instructions = new LawnmowerInstructions { BoundaryWidth = 5, BoundaryHeight = 5, StartX = 1, StartY = 2, StartDirection = "N", Instructions = new List<char> { 'L', 'M', 'L', 'M', 'L', 'M', 'L', 'M', 'M' } }; var result = lawnmowerCommaner.RunInstructions(instructions); Assert.AreEqual(1, result.X); Assert.AreEqual(3, result.Y); Assert.AreEqual("N", result.Facing); }
public LawnmowerPosition RunInstructions(LawnmowerInstructions lawnmowerInstructions) { var lawnmower = new LawnmowerPosition { Facing = lawnmowerInstructions.StartDirection, X = lawnmowerInstructions.StartX, Y = lawnmowerInstructions.StartY }; foreach(var instruction in lawnmowerInstructions.Instructions) { lawnmower.Facing = GetNewPosition(lawnmower.Facing, instruction); lawnmower.X = getXPosition(lawnmower.X, lawnmowerInstructions.BoundaryWidth,lawnmower.Facing, instruction); lawnmower.Y = getYPosition(lawnmower.Y, lawnmowerInstructions.BoundaryHeight, lawnmower.Facing, instruction); } return lawnmower; }
private List<LawnmowerInstructions> CreateInstructions(string rawInstructions) { int countLines = 0; var output = new List<LawnmowerInstructions>(); var lawnmowerInstructionBoundary = (lawnmowerBoundaries) null; var tempLawnmowerInstruction = new LawnmowerInstructions(); using (var reader = new StringReader(rawInstructions)) { string line; while ((line = reader.ReadLine()) != null) { countLines++; var commands = line.Split(' '); if (countLines == 1) { lawnmowerInstructionBoundary = GetBoundaries(commands); if(lawnmowerInstructionBoundary == null) { return new List<LawnmowerInstructions>(); } continue; } if (lineIsAboutLawnmowerPoistion(countLines)) { tempLawnmowerInstruction = GetLawnmowerPosition(commands); if(tempLawnmowerInstruction == null) { return new List<LawnmowerInstructions>(); } continue; } AddMovementCommandsAndAddToOutputList(line, lawnmowerInstructionBoundary, tempLawnmowerInstruction, output); } } return output; }
private void AddMovementCommandsAndAddToOutputList(string commands, lawnmowerBoundaries lawnmowerInstructionBoundary, LawnmowerInstructions tempLawnmowerInstruction, List<LawnmowerInstructions> output) { tempLawnmowerInstruction.BoundaryWidth = lawnmowerInstructionBoundary.X; tempLawnmowerInstruction.BoundaryHeight = lawnmowerInstructionBoundary.Y; tempLawnmowerInstruction.Instructions = commands.ToCharArray(); output.Add(tempLawnmowerInstruction); }