private void ForwardInstructionProcess(IPositionFinal positionFinal, IGridCoordinate gridCoordinate) { switch (positionFinal.FinalOrientation) { case 'N': if (positionFinal.FinalYPosition + 1 > gridCoordinate.MaxYCoordinate) { positionFinal.Lost = true; } else { positionFinal.FinalYPosition += 1; } break; case 'S': if (positionFinal.FinalYPosition - 1 < 0) { positionFinal.Lost = true; } else { positionFinal.FinalYPosition -= 1; } break; case 'E': if (positionFinal.FinalXPosition + 1 > gridCoordinate.MaxXCoordinate) { positionFinal.Lost = true; } else { positionFinal.FinalXPosition += 1; } break; case 'W': if (positionFinal.FinalXPosition - 1 < 0) { positionFinal.Lost = true; } else { positionFinal.FinalXPosition -= 1; } break; default: break; } }
public bool IsOffPosition(int gridId, IPositionFinal offPositionFinal) { bool result = false; if (offDictionary.ContainsKey(gridId)) { var offPosition = offDictionary[gridId].FirstOrDefault( item => item.FinalXPosition == offPositionFinal.FinalXPosition && item.FinalYPosition == offPositionFinal.FinalYPosition && item.FinalOrientation == offPositionFinal.FinalOrientation && item.Lost ); result = offPosition != null; } return(result); }
public void Test_RobotPositionService_GetFinalPostion() { IDataService dataService = new DataService(); IRobotPositionService service = new RobotPositionService(dataService); IPositionStarting positionStarting1 = new PositionStarting { StartingXPosition = 1, StartingYPosition = 1, Orientation = 'E', Instructions = "RFRFRFRF" }; IPositionFinal positionFinal1 = service.GetFinalPostion(1, positionStarting1); Assert.AreEqual(1, positionFinal1.FinalXPosition); Assert.AreEqual(1, positionFinal1.FinalYPosition); Assert.AreEqual('E', positionFinal1.FinalOrientation); Assert.AreEqual(false, positionFinal1.Lost); IPositionStarting positionStarting2 = new PositionStarting { StartingXPosition = 3, StartingYPosition = 2, Orientation = 'N', Instructions = "FRRFLLFFRRFLL" }; IPositionFinal positionFinal2 = service.GetFinalPostion(1, positionStarting2); Assert.AreEqual(3, positionFinal2.FinalXPosition); Assert.AreEqual(3, positionFinal2.FinalYPosition); Assert.AreEqual('N', positionFinal2.FinalOrientation); Assert.AreEqual(true, positionFinal2.Lost); IPositionStarting positionStarting3 = new PositionStarting { StartingXPosition = 0, StartingYPosition = 3, Orientation = 'W', Instructions = "LLFFFLFLFL" }; IPositionFinal positionFinal3 = service.GetFinalPostion(1, positionStarting3); Assert.AreEqual(2, positionFinal3.FinalXPosition); Assert.AreEqual(3, positionFinal3.FinalYPosition); Assert.AreEqual('S', positionFinal3.FinalOrientation); Assert.AreEqual(false, positionFinal3.Lost); }
public bool SaveOffPosition(int gridId, IPositionFinal offPositionFinal) { bool result = false; if (offPositionFinal.Lost) { if (!offDictionary.ContainsKey(gridId)) { IList <IPositionFinal> list = new List <IPositionFinal>(); list.Add(offPositionFinal); offDictionary.Add(gridId, list); result = true; } else { if (!IsOffPosition(gridId, offPositionFinal)) { offDictionary[gridId].Add(offPositionFinal); result = true; } } } return(result); }
public void Test_RobotPositionWebAPI_EndPoint2_Grid_Id_Rover() { IGridCoordinate gridCoordinate = new GridCoordinate { MaxXCoordinate = 5, MaxYCoordinate = 3 }; IPositionStarting positionStarting1 = new PositionStarting { StartingXPosition = 1, StartingYPosition = 1, Orientation = 'E', Instructions = "RFRFRFRF" }; IPositionStarting positionStarting2 = new PositionStarting { StartingXPosition = 3, StartingYPosition = 2, Orientation = 'N', Instructions = "FRRFLLFFRRFLL" }; IPositionStarting positionStarting3 = new PositionStarting { StartingXPosition = 0, StartingYPosition = 3, Orientation = 'W', Instructions = "LLFFFLFLFL" }; string endPointURI = (new Uri(baseUri, "grid/1/rover")).ToString(); using (var client = new HttpClient()) { var response = client.PostAsync(endPointURI, GetStringContent(positionStarting1)).Result; Assert.IsTrue(response.IsSuccessStatusCode); if (response.IsSuccessStatusCode) { IPositionFinal positionFinal = JsonConvert.DeserializeObject <PositionFinal>(response.Content.ReadAsStringAsync().Result); Assert.AreEqual(1, positionFinal.FinalXPosition); Assert.AreEqual(1, positionFinal.FinalYPosition); Assert.AreEqual('E', positionFinal.FinalOrientation); Assert.AreEqual(false, positionFinal.Lost); } response = client.PostAsync(endPointURI, GetStringContent(positionStarting2)).Result; Assert.IsTrue(response.IsSuccessStatusCode); if (response.IsSuccessStatusCode) { IPositionFinal positionFinal = JsonConvert.DeserializeObject <PositionFinal>(response.Content.ReadAsStringAsync().Result); Assert.AreEqual(3, positionFinal.FinalXPosition); Assert.AreEqual(3, positionFinal.FinalYPosition); Assert.AreEqual('N', positionFinal.FinalOrientation); Assert.AreEqual(true, positionFinal.Lost); } response = client.PostAsync(endPointURI, GetStringContent(positionStarting3)).Result; Assert.IsTrue(response.IsSuccessStatusCode); if (response.IsSuccessStatusCode) { IPositionFinal positionFinal = JsonConvert.DeserializeObject <PositionFinal>(response.Content.ReadAsStringAsync().Result); Assert.AreEqual(2, positionFinal.FinalXPosition); Assert.AreEqual(3, positionFinal.FinalYPosition); Assert.AreEqual('S', positionFinal.FinalOrientation); Assert.AreEqual(false, positionFinal.Lost); } } }
private void LeftInstructionProcess(IPositionFinal positionFinal) { string leftDirections = "NWSE"; positionFinal.FinalOrientation = (leftDirections[(leftDirections.IndexOf(positionFinal.FinalOrientation) + 1) % 4]); }
private void RightInstructionProcess(IPositionFinal positionFinal) { string rightDirections = "NESW"; positionFinal.FinalOrientation = (rightDirections[(rightDirections.IndexOf(positionFinal.FinalOrientation) + 1) % 4]); }
public async Task <bool> SaveOffPositionIAsync(int gridId, IPositionFinal offPositionFinal) { return(await Task.FromResult(SaveOffPosition(gridId, offPositionFinal))); }