Exemple #1
0
class TestPointMethods(unittest.TestCase):
    def setUp(self):
        self.p1 = Point(1, 1)
        self.p2 = Point(1, -5)
        self.p3 = Point(0, 2)
        self.p4 = Point(-3, 5)

    def test_copy(self):
        test_point = self.p1.copy()
        self.assertEqual(test_point, self.p1)
        test_point.x = 0
        self.assertNotEqual(test_point, self.p1)

    def test_manhattan_distance(self):
        self.assertEqual(self.p1.manhattan_distance(self.p2), 6)
        self.assertEqual(self.p2.manhattan_distance(self.p3), 8)
        self.assertEqual(self.p3.manhattan_distance(self.p4), 6)
        self.assertEqual(self.p4.manhattan_distance(self.p1), 8)

    def test_euclidean_distance(self):
        self.assertEqual(self.p1.euclidean_distance(self.p2), 6)
        self.assertEqual(self.p2.euclidean_distance(self.p3), 50**0.5)
        self.assertEqual(self.p3.euclidean_distance(self.p4), 18**0.5)
        self.assertEqual(self.p4.euclidean_distance(self.p1), 32**0.5)

    def test_midpoint(self):
        self.assertEqual(self.p1.midpoint(self.p2), Point(1, -2))
        self.assertEqual(self.p2.midpoint(self.p3), Point(0.5, -1.5))
        self.assertEqual(self.p3.midpoint(self.p4), Point(-1.5, 3.5))
        self.assertEqual(self.p4.midpoint(self.p1), Point(-1, 3))

    def test_bounded_filter(self):
        pass

    def test_in_bounds(self):
        self.assertTrue(
            self.p1.in_bounds(lower_bound=Point(0, 0), upper_bound=Point(5,
                                                                         5)))
        self.assertTrue(
            self.p2.in_bounds(lower_bound=Point(-1, -5),
                              upper_bound=Point(10, 10)))
        self.assertFalse(
            self.p3.in_bounds(lower_bound=Point(-10, -10),
                              upper_bound=Point(0, 0)))
        self.assertFalse(
            self.p4.in_bounds(lower_bound=Point(-5, -10), upper_bound=self.p4))

    def test_as_tuple(self):
        self.assertSequenceEqual(self.p1.as_tuple(), (1, 1))
        self.assertSequenceEqual(self.p2.as_tuple(), (1, -5))
        self.assertSequenceEqual(self.p3.as_tuple(), (0, 2))
        self.assertSequenceEqual(self.p4.as_tuple(), (-3, 5))
Exemple #2
0
            value -= 90
    elif action == 'L':
        while value != 0:
            dir = Point(-dir.y,dir.x)
            value -= 90
    elif action == 'F':
        pos += dir*value
    elif action == 'N':
        pos += Point(0,1) * value
    elif action == 'S':
        pos += Point(0,-1) * value
    elif action == 'E':
        pos += Point(1,0) * value
    elif action == 'W':
        pos += Point(-1,0) * value
print('Result 1:',pos.manhattan_distance(Point(0,0)))


ship = Point(0,0)
waypoint = Point(10,1)
for step in steps:
    action = step[0]
    value = int(step[1:])
    diff = waypoint - ship
    if action == 'R':
        while value != 0:
            diff = Point(diff.y,-diff.x)
            value -= 90
        waypoint = ship + diff
    elif action == 'L':
        while value != 0:
Exemple #3
0
def turn_left(pt):
    return Point(-pt.y, pt.x)


def turn_right(pt):
    return Point(pt.y, -pt.x)


with open('2016/01/input.txt') as in_file:
    directions = in_file.readline().strip().split(', ')
    cur = Point(0, 0)
    seen = {cur}
    facing = Point(0, 1)
    for dir in directions:
        if dir[0] == 'L':
            facing = turn_left(facing)
        elif dir[0] == 'R':
            facing = turn_right(facing)
        found = False
        for i in range(int(dir[1:])):
            cur = cur + facing
            if cur in seen:
                found = True
                break
            seen.add(cur)
        if found:
            break
    print('The Easter Bunny Headquarters are {} blocks away.'.format(
        cur.manhattan_distance(Point(0, 0))))