def test_Parse_RoverPlans(self): parser = Parser() parser.parseLine(" 5 5 ") parser.parseLine(" 1 2 E ") parser.parseLine(" LMlmLMlm") parser.parseLine(" 3 4W ") parser.parseLine(" RM rm RM r m ") plans = parser.compileRoverPlans() self.assertEqual(2, len(plans)) self.assertEqual([1, 2, "E"], plans[0].startPoint) self.assertEqual("LMLMLMLM", plans[0].commands) self.assertEqual([3, 4, "W"], plans[1].startPoint) self.assertEqual("RMRMRMRM", plans[1].commands)
def test_Parse_Empty_Lines(self): lines = [ " 5 5 ", " ", " 1 2 E ", " ", " LMlmLMlm", " 3 4W ", " ", " RM rm RM r m " ] parser = Parser() for line in lines: parser.parseLine(line) plans = parser.compileRoverPlans() self.assertEqual(2, len(plans)) self.assertEqual([1, 2, "E"], plans[0].startPoint) self.assertEqual("LMLMLMLM", plans[0].commands) self.assertEqual([3, 4, "W"], plans[1].startPoint) self.assertEqual("RMRMRMRM", plans[1].commands)
def main (): parser = Parser() # read input from piped data for line in sys.stdin: line = line.rstrip() parser.parseLine(line) # throw error if something is wrong with input if not parser.boundary or not parser.allStartPoints or not parser.allCommands: raise ValueError("Error: {}\n. Something went wrong with the input") if len(parser.allStartPoints) != len(parser.allCommands): raise ValueError("Error: {}\n. Missing some data!") # setup plateau object and pass along the surface boundary and list of roverPlans plateau = Plateau(parser.boundary, parser.compileRoverPlans()) # plot the rover paths along the plateau and compile the final rover positions plateau.plotRoverCourses() # output the final results for point in plateau.finalPositions: print("{} {} {}".format(point[0], point[1], point[2]))