Exemple #1
0
    def test_step_10(self):
        # arrange
        testInput = [
            '<x=-1, y=0, z=2>', '<x=2, y=-10, z=-7>', '<x=4, y=-8, z=8>',
            '<x=3, y=5, z=-1>'
        ]
        shouldBe10 = [
            'pos=<x= 2, y= 1, z=-3>, vel=<x=-3, y=-2, z= 1>',
            'pos=<x= 1, y=-8, z= 0>, vel=<x=-1, y= 1, z= 3>',
            'pos=<x= 3, y=-6, z= 1>, vel=<x= 3, y= 2, z=-3>',
            'pos=<x= 2, y= 0, z= 4>, vel=<x= 1, y=-1, z=-1>'
        ]

        posShouldBe10 = [(2, 1, -3), (1, -8, 0), (3, -6, 1), (2, 0, 4)]
        velShouldBe10 = [(-3, -2, 1), (-1, 1, 3), (3, 2, -3), (1, -1, -1)]
        pos = []
        vel = []
        m = Moon()
        w = MoonMap(testInput)
        pos = []
        vel = []

        # act
        for i in range(10):
            w.OneStep()

        for m in w.map:
            pos.append(m.GetXYZAsTuple(m.pos))
            vel.append(m.GetXYZAsTuple(m.vel))

        # assert
        self.assertEqual(pos, posShouldBe10)
        self.assertEqual(vel, velShouldBe10)
Exemple #2
0
    def test_step_1(self):
        # arrange
        testInput = [
            '<x=-1, y=0, z=2>', '<x=2, y=-10, z=-7>', '<x=4, y=-8, z=8>',
            '<x=3, y=5, z=-1>'
        ]
        shouldBe1 = [
            'pos=<x= 2, y=-1, z= 1>, vel=<x= 3, y=-1, z=-1>',
            'pos=<x= 3, y=-7, z=-4>, vel=<x= 1, y= 3, z= 3>',
            'pos=<x= 1, y=-7, z= 5>, vel=<x=-3, y= 1, z=-3>',
            'pos=<x= 2, y= 2, z= 0>, vel=<x=-1, y=-3, z= 1>'
        ]

        posShouldBe1 = [(2, -1, 1), (3, -7, -4), (1, -7, 5), (2, 2, 0)]
        velShouldBe1 = [(3, -1, -1), (1, 3, 3), (-3, 1, -3), (-1, -3, 1)]
        pos = []
        vel = []

        w = MoonMap(testInput)

        # act
        w.OneStep()

        for m in w.map:
            pos.append(m.GetXYZAsTuple(m.pos))
            vel.append(m.GetXYZAsTuple(m.vel))

        # assert
        self.assertEqual(vel, velShouldBe1)
        self.assertEqual(pos, posShouldBe1)
Exemple #3
0
    def test_load_moons_string(self):
        # arrange
        infile = open('data/input_12.txt', 'r')
        testInput = infile.readlines()
        w = MoonMap(testInput)
        result = []

        # act
        for p in range(25):
            result.append(w.GetPixelAt(p))

        # assert
        self.assertEqual(result, answer)
Exemple #4
0
    def test_gravitate_moons(self):
        # arrange
        a = Moon(Name='Io', pos='<x=-1, y=  0, z= 2>')
        b = Moon(Name='Europa', pos='<x= 2, y=-10, z=-7>')
        aShouldBe = (1, -1, -1)
        bShouldBe = (-1, 1, 1)
        mm = MoonMap()

        # act
        mm.Gravitate(a, b)

        # assert
        self.assertEqual(a.AsTuple()[1], aShouldBe)
        self.assertEqual(b.AsTuple()[1], bShouldBe)
Exemple #5
0
    def test_total_energy_2(self):
        # arrange
        testInput = [
            '<x=-8, y=-10, z=0>', '<x=5, y=5, z=10>', '<x=2, y=-7, z=3>',
            '<x=9, y=-8, z=-3>'
        ]

        w = MoonMap(testInput)
        # act
        for i in range(100):
            w.OneStep()

        t = w.TotalEnergy()

        # assert
        self.assertEqual(t, 1940)
Exemple #6
0
    def test_total_energy_1(self):
        # arrange
        testInput = [
            '<x=-1, y=0, z=2>', '<x=2, y=-10, z=-7>', '<x=4, y=-8, z=8>',
            '<x=3, y=5, z=-1>'
        ]

        w = MoonMap(testInput)
        # act
        for i in range(10):
            w.OneStep()

        t = w.TotalEnergy()

        # assert
        self.assertEqual(t, 179)
Exemple #7
0
    def test_step_0(self):
        # arrange
        testInput = [
            '<x=-1, y=0, z=2>', '<x=2, y=-10, z=-7>', '<x=4, y=-8, z=8>',
            '<x=3, y=5, z=-1>'
        ]
        shouldBe0 = [
            'pos=<x=-1, y=  0, z= 2>, vel=<x= 0, y= 0, z= 0>',
            'pos=<x= 2, y=-10, z=-7>, vel=<x= 0, y= 0, z= 0>',
            'pos=<x= 4, y= -8, z= 8>, vel=<x= 0, y= 0, z= 0>',
            'pos=<x= 3, y=  5, z=-1>, vel=<x= 0, y= 0, z= 0> '
        ]

        posShouldBe0 = [(-1, 0, 2), (2, -10, -7), (4, -8, 8), (3, 5, -1)]
        velShouldBe0 = [(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)]

        w = MoonMap(testInput)
        pos = []
        vel = []

        # act
        # w.OneStep()

        for m in w.map:
            pos.append(m.GetXYZAsTuple(m.pos))
            vel.append(m.GetXYZAsTuple(m.vel))

        # assert
        self.assertEqual(pos, posShouldBe0)
        self.assertEqual(vel, velShouldBe0)
Exemple #8
0
    def test_step_2(self):
        # arrange
        testInput = [
            '<x=-1, y=0, z=2>', '<x=2, y=-10, z=-7>', '<x=4, y=-8, z=8>',
            '<x=3, y=5, z=-1>'
        ]
        shouldBe2 = [
            'pos=<x= 5, y=-3, z=-1>, vel=<x= 3, y=-2, z=-2>',
            'pos=<x= 1, y=-2, z= 2>, vel=<x=-2, y= 5, z= 6>',
            'pos=<x= 1, y=-4, z=-1>, vel=<x= 0, y= 3, z=-6>',
            'pos=<x= 1, y=-4, z= 2>, vel=<x=-1, y=-6, z= 2>'
        ]

        posShouldBe2 = [(5, -3, -1), (1, -2, 2), (1, -4, -1), (1, -4, 2)]
        velShouldBe2 = [(3, -2, -2), (-2, 5, 6), (0, 3, -6), (-1, -6, 2)]
        pos = []
        vel = []
        m = Moon()
        for l in shouldBe2:
            p, v = m.GetPosAndVelFromString(l)
            pos.append(p)
            vel.append(v)
        print(pos)
        print(vel)

        w = MoonMap(testInput)
        pos = []
        vel = []

        # act
        w.OneStep()
        w.OneStep()

        for m in w.map:
            pos.append(m.GetXYZAsTuple(m.pos))
            vel.append(m.GetXYZAsTuple(m.vel))

        # assert
        self.assertEqual(pos, posShouldBe2)
        self.assertEqual(vel, velShouldBe2)
Exemple #9
0
    def test_moves_to_original_puzzle(self):
        # arrange
        infile = open('data/input_12.txt', 'r')
        testInput = infile.readlines()

        w = MoonMap(testInput)
        # act
        w.OneStep()
        # while w.AllAtOriginalPos() == False:
        while w.AllMoonsLooped() == False:
            w.OneStep()

        tupleOfTuples = [m.GetXYZAsTuple(m.loopStepsXYZ) for m in w.map]
        l = [element for tupl in tupleOfTuples for element in tupl]
        print(l)
        prod = reduce((lambda x, y: x * y), l)
        print(prod)
        l = set(l)
        prod = reduce((lambda x, y: x * y), l)
        print(prod)

        # assert
        self.assertEqual(moves, 4686774924)
Exemple #10
0
    def test_load_moons(self):
        # arrange
        testInput = [
            '<x=-1, y=0, z=2>', '<x=2, y=-10, z=-7>', '<x=4, y=-8, z=8>',
            '<x=3, y=5, z=-1>'
        ]

        w = MoonMap(testInput)
        result = []

        # act
        for m in w.map:
            result.append(m.PotentialEnergy())

        # assert
        self.assertEqual(result, [3, 19, 20, 9])
Exemple #11
0
    def test_move_moons(self):
        # arrange
        testInput = [
            '<x=-1, y=0, z=2>', '<x=2, y=-10, z=-7>', '<x=4, y=-8, z=8>',
            '<x=3, y=5, z=-1>'
        ]
        shouldBe = [(0, 1, 3), (3, -9, -6), (5, -7, 9), (4, 6, 0)]
        result = []

        w = MoonMap(testInput)
        for m in w.map:
            m.SetVelocity('<x=1, y=1, z=1>')

        # act
        for m in w.map:
            m.Move()
            result.append(m.AsTuple()[0])

        # assert
        self.assertEqual(result, shouldBe)
Exemple #12
0
    def test_moves_to_origin_2(self):
        # arrange
        testInput = [
            '<x=-8, y=-10, z=0>', '<x=5, y=5, z=10>', '<x=2, y=-7, z=3>',
            '<x=9, y=-8, z=-3>'
        ]

        w = MoonMap(testInput)
        # act
        w.OneStep()
        # while w.AllAtOriginalPos() == False:
        while w.AllWasAtOriginalPos() == False:
            w.OneStep()

        result = w.GetAllLCM()

        # assert
        self.assertEqual(result, 4686774924)
Exemple #13
0
    def test_moves_to_origin_1(self):
        # arrange
        testInput = [
            '<x=-1, y=0, z=2>', '<x=2, y=-10, z=-7>', '<x=4, y=-8, z=8>',
            '<x=3, y=5, z=-1>'
        ]

        w = MoonMap(testInput)
        # act
        w.OneStep()
        while w.AllMoonsAxisLooped() == False:
            w.OneStep()

        tupleOfTuples = [m.GetXYZAsTuple(m.loopStepsXYZ) for m in w.map]
        print(tupleOfTuples)
        l = [m.GetLCMSteps() for m in w.map]
        print(l)

        result = w.GetAllLCM()

        # assert
        self.assertEqual(result, 2772)
Exemple #14
0
# Advent of Code 2019: https://adventofcode.com/2019/day/12
#
#

from pprint import pprint
from AoC12_classes import Moon, MoonMap

infile = open('data/input_12.txt', 'r')
inputData1 = infile.readlines()

w = MoonMap(inputData1)

for i in range(1000):
    w.OneStep()

t = w.TotalEnergy()

# Part 1
print("Part 1: ", t)

# Part 2
print("Part 2: ")
# w.PrintImage()