Beispiel #1
0
def _navigate_with_heading(navigation: NavigationWithHeading,
                           nav: NavigationInstruction) -> None:
    if nav.action == RIGHT:
        navigation.right(nav.value)
    elif nav.action == LEFT:
        navigation.left(nav.value)
    elif nav.action == FORWARD:
        navigation.forward(nav.value)
    elif nav.action in {NORTH, EAST, SOUTH, WEST}:
        navigation.drift(heading=Headings[nav.action].value, amount=nav.value)
    else:
        raise ValueError("invalid input")
Beispiel #2
0
def _add_navigation_instruction(navigation: NavigationWithHeading, c: str):
    if c == ">":
        navigation.drift(EAST, 1)
    elif c == "v":
        navigation.drift(SOUTH, 1)
    elif c == "<":
        navigation.drift(WEST, 1)
    elif c == "^":
        navigation.drift(NORTH, 1)
    else:
        raise ValueError("Invalid input")
Beispiel #3
0
def _navigate(ins: str, start: Position, in_bounds) -> NavigationWithHeading:
    navigation = NavigationWithHeading(start, Headings["N"].value, in_bounds)
    for i in range(len(ins)):
        step = ins[i]
        if step == 'R':
            navigation.drift(Headings["E"].value, 1)
        elif step == 'L':
            navigation.drift(Headings["W"].value, 1)
        elif step == 'U':
            navigation.drift(Headings["N"].value, 1)
        elif step == 'D':
            navigation.drift(Headings["S"].value, 1)
        else:
            raise ValueError("Invalid input")
    return navigation
    def test_navigation_with_heading(self):
        navigation = NavigationWithHeading(
            Position(0, 0), Headings["N"].value,
            lambda pos: pos.x <= 4 and pos.y <= 4)
        navigation.drift(Headings["N"].value, 1)
        navigation.left(90)
        navigation.forward(1)
        navigation.right(180)
        navigation.forward(10)

        self.assertEqual(navigation.position, Position(4, 1))
        visited_positions = navigation.get_visited_positions(True)
        self.assertEqual(
            visited_positions,
            [Position(0, 0),
             Position(0, 1),
             Position(-1, 1),
             Position(4, 1)])
        visited_positions = navigation.get_visited_positions(False)
        self.assertEqual(
            visited_positions,
            [Position(0, 1), Position(-1, 1),
             Position(4, 1)])