예제 #1
0
    def test_text_init(self):
        "Test the Reindeer object creation from text"

        # 1. Create Reindeer object from text
        myobj = reindeer.Reindeer(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 6)
        self.assertEqual(len(myobj.armies), 2)
        self.assertEqual(myobj.armies[0].name, 'Immune System')
        self.assertEqual(myobj.armies[1].name, 'Infection')
        self.assertEqual(len(myobj.armies[0].groups), 2)
        self.assertEqual(len(myobj.armies[1].groups), 2)
        self.assertEqual(myobj.armies[0].groups[0].number, 17)
        self.assertEqual(myobj.armies[0].groups[1].number, 989)
        self.assertEqual(myobj.armies[1].groups[0].number, 801)
        self.assertEqual(myobj.armies[1].groups[1].number, 4485)

        # 3. Check str()
        self.assertEqual(str(myobj), EXAMPLE_STR.strip())

        # 4. Fight one round
        myobj.round()
        self.assertEqual(str(myobj), AFTER_ONE_ROUND.strip())

        # 5. And then a couple more
        result = myobj.fight()
        self.assertEqual(result, PART_ONE_RESULT)

        # 6. Give the raindeer a boast
        myobj.boast(1570)
        result = myobj.fight()
        self.assertEqual(result, PART_TWO_RESULT)
예제 #2
0
    def test_text_init(self):
        "Test the Tiles object creation from text"

        # 1. Create Tiles object from text
        myobj = tiles.Tiles(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 20)
        self.assertEqual(len(myobj.tiles), 15)

        # 3. Test methods
        self.assertEqual(myobj.count_black(), 10)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 15)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 12)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 25)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 14)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 23)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 28)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 41)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 37)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 49)
        myobj.one_day()
        self.assertEqual(myobj.count_black(), 37)
예제 #3
0
    def test_text_three(self):
        "Test the Alu object creation from text - example three"

        # 1. Create Alu object from text
        myobj = alu.Alu(text=aoc_24.from_text(EXAMPLE_THREE), inp='6')

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 11)
        self.assertEqual(len(myobj.regs), 4)
        self.assertEqual(len(myobj.inst), 11)
        self.assertEqual(myobj.step, 0)
        self.assertEqual(len(myobj.inp), 1)

        # 3. Check methods
        self.assertEqual(myobj.regs['w'], 0)
        self.assertEqual(myobj.regs['x'], 0)
        self.assertEqual(myobj.regs['y'], 0)
        self.assertEqual(myobj.regs['z'], 0)
        self.assertEqual(myobj.run(), 0)
        self.assertEqual(myobj.regs['w'], 0)
        self.assertEqual(myobj.regs['x'], 1)
        self.assertEqual(myobj.regs['y'], 1)
        self.assertEqual(myobj.regs['z'], 0)
        self.assertEqual(len(myobj.inp), 0)
        self.assertEqual(myobj.one_step(), False)
예제 #4
0
    def test_text_init(self):
        "Test the Monad object creation from text"

        # 1. Create Monad object from text
        myobj = monad.Monad(text=aoc_24.from_text(EXAMPLE_TEXT), inp=EXAMPLE_DIGITS)

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 252)
        self.assertEqual(len(myobj.alu.inst), 252)
        self.assertEqual(len(myobj.constants), 3)
        self.assertEqual(len(myobj.constants[0]), 14)
        self.assertEqual(myobj.constants[0][0], 1)
        self.assertEqual(myobj.constants[1][0], 14)
        self.assertEqual(myobj.constants[2][0], 12)
        self.assertEqual(myobj.constants[0][7], 26)
        self.assertEqual(myobj.constants[1][7], -13)
        self.assertEqual(myobj.constants[2][7], 5)
        self.assertEqual(myobj.constants[0][13], 26)
        self.assertEqual(myobj.constants[1][13], -4)
        self.assertEqual(myobj.constants[2][13], 11)
        self.assertEqual(len(myobj.alu.inp), 14)
        self.assertEqual(myobj.alu.inp[0], 1)
        self.assertEqual(myobj.alu.inp[13], 9)

        # 3. Check methods
        result = myobj.alu.run()
        self.assertEqual(myobj.run(EXAMPLE_DIGITS), result)

        self.assertEqual(myobj.unrun(digits=monad.DIGITS), PART_ONE_RESULT)
        self.assertEqual(myobj.unrun(digits=monad.STIGID), PART_TWO_RESULT)
예제 #5
0
    def test_part_one(self):
        "Test part one example of Robot object"

        # 1. Create Robot object from text
        myobj = robot.Robot(text=aoc_24.from_text(PART_ONE_TEXT))

        # 2. Check the part one result
        self.assertEqual(myobj.part_one(verbose=False), PART_ONE_RESULT)
예제 #6
0
    def test_part_two(self):
        "Test part two example of Robot object"

        # 1. Create Robot object from text
        myobj = robot.Robot(part2=True, text=aoc_24.from_text(PART_TWO_TEXT))

        # 2. Check the part two result
        self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
예제 #7
0
    def test_text_init(self):
        "Test the Robot object creation from text"

        # 1. Create Robot object from text
        myobj = robot.Robot(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 5)
        self.assertEqual(len(myobj.ducts.text), 5)
예제 #8
0
    def test_text_init(self):
        "Test the Ducts object creation from text"

        # 1. Create Ducts object from text
        myobj = ducts.Ducts(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 5)
        self.assertEqual(len(myobj.num_to_loc), 5)
        self.assertEqual(len(myobj.loc_to_num), 5)
        self.assertEqual(myobj.num_to_loc[0], (1, 1))
        self.assertEqual(myobj.num_to_loc[4], (1, 3))
        self.assertEqual(myobj.loc_to_num[(1, 1)], 0)
        self.assertEqual(myobj.loc_to_num[(1, 3)], 4)

        # 3. Check methods
        self.assertEqual(myobj.where_is(0), (1, 1))
        self.assertEqual(myobj.where_is(4), (1, 3))
        self.assertEqual(myobj.where_is(9), None)
        self.assertEqual(myobj.what_is_at((1, 1)), 0)
        self.assertEqual(myobj.what_is_at((1, 3)), 4)
        self.assertEqual(myobj.what_is_at((7, 9)), None)

        self.assertEqual(myobj.is_wall(None), True)
        self.assertEqual(myobj.is_wall((-1, -1)), True)
        self.assertEqual(myobj.is_wall((0, 0)), True)
        self.assertEqual(myobj.is_wall((1, 1)), False)

        self.assertEqual(myobj.one_step((1, 1)), [(2, 1), (1, 2)])
        self.assertEqual(myobj.one_step((1, 3)), [(2, 3), (1, 2)])

        self.assertEqual(myobj.steps_to_others(0), {1: 2, 4: 2})
        self.assertEqual(myobj.steps_to_others(1), {0: 2, 2: 6})
        self.assertEqual(myobj.steps_to_others(2), {3: 2, 1: 6})
        self.assertEqual(myobj.steps_to_others(3), {2: 2, 4: 8})
        self.assertEqual(myobj.steps_to_others(4), {0: 2, 3: 8})

        self.assertEqual(myobj.steps_to_others(0, full=True), {
            1: 2,
            2: 8,
            3: 10,
            4: 2
        })
        self.assertEqual(myobj.steps_to_others(1, full=True), {
            0: 2,
            2: 6,
            3: 8,
            4: 4
        })

        all_steps = myobj.all_steps()
        self.assertEqual(len(all_steps), len(myobj.num_to_loc))
        self.assertEqual(all_steps[0], {1: 2, 2: 8, 3: 10, 4: 2})
        self.assertEqual(all_steps[1], {0: 2, 2: 6, 3: 8, 4: 4})
예제 #9
0
    def test_strength(self):
        "Test the Moat.strength function"

        # 1. Create Moat object from text
        myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Loop for all of the example bridges
        for bnum, bridge in enumerate(BRIDGES):

            # 3. Compute and compare strengths
            self.assertEqual(myobj.strength(bridge), STRENGTHS[bnum])
예제 #10
0
    def test_last_port(self):
        "Test the Moat last_port function"

        # 1. Create Moat object from text
        myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Loop for all of the example bridges
        for bnum, bridge in enumerate(BRIDGES):

            # 3. Verify that hey have the expected last port
            self.assertEqual(myobj.last_port(bridge), LAST[bnum])
예제 #11
0
    def test_text_init(self):
        "Test the Immune/Infection group object creation from text"

        # 1. Create Immune/Infection army object from text
        myobj = reindeer.Army(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.name, 'Immune System')
        self.assertEqual(len(myobj.groups), 2)
        self.assertEqual(myobj.groups[0].number, 17)
        self.assertEqual(myobj.groups[1].number, 989)
예제 #12
0
    def test_text_init(self):
        "Test the Moat object creation from text"

        # 1. Create Moat object from text
        myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 8)
        self.assertEqual(len(myobj.components), 8)
        self.assertEqual(myobj.components[0], (0, 2))
        self.assertEqual(len(myobj.ports), 8)
        self.assertEqual(myobj.ports[0], [0, 5])
예제 #13
0
    def test_check_bridge(self):
        "Test the Moat.strength function"

        # 1. Create Moat object from text
        myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Loop for all of the example bridges
        for bridge in BRIDGES:

            # 3. They should all pass the test
            self.assertEqual(myobj.check_bridge(bridge), True)

        # 4. Loop for all of the incorrectly assembled bridges
        for bridge in BAD_BRIDGES:

            # 5. They should all fail the test
            self.assertEqual(myobj.check_bridge(bridge), False)
예제 #14
0
    def test_all_components(self):
        "Test the Moat all_components function"

        # 1. Create Moat object from text
        myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Components that can start a bridge
        self.assertEqual(list(myobj.all_components()), [0, 5])

        # 3. Components that can be the used after 0/1 starts a bridge
        self.assertEqual(list(myobj.all_components(bridge=[5])), [6])

        # 4. Components that can be the used after 0/1--10/1 starts a bridge
        self.assertEqual(list(myobj.all_components(bridge=[5, 6])), [7])

        # 5. Components that can be the used after 0/1--10/1--9/10 starts a bridge
        self.assertEqual(list(myobj.all_components(bridge=[5, 6, 7])), [])
예제 #15
0
    def test_all_bridges(self):
        "Test the Moat all_components function"

        # 1. Create Moat object from text
        myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Loop for all the bridges
        knt_bridges = 0
        for bridge in myobj.all_bridges():

            # 3. Validate it
            self.assertEqual(myobj.check_bridge(bridge), True)
            self.assertTrue(bridge in BRIDGES)

            # 4. Keep track of the number of bridges generated
            knt_bridges += 1

        # 5. Verify that we generated them all
        self.assertEqual(knt_bridges, len(BRIDGES))
예제 #16
0
    def test_text_init(self):
        "Test the Packages object creation from text"

        # 1. Create Packages object from text
        myobj = packages.Packages(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 10)
        self.assertEqual(len(myobj.weights), 10)
        self.assertEqual(myobj.compartments, 3)
        self.assertEqual(myobj.balance, 20)

        # 3. Test methods
        self.assertEqual(myobj.min_max_helper(myobj.weights, myobj.balance), 6)
        myobj.weights.reverse()
        self.assertEqual(myobj.min_max_helper(myobj.weights, myobj.balance), 2)
        self.assertEqual(
            myobj.find_min_max_packages(myobj.weights, myobj.balance), (2, 6))

        self.assertEqual(
            len(myobj.get_weighted(myobj.weights, myobj.balance, 2)), 1)
        self.assertEqual(
            len(myobj.get_weighted(myobj.weights, myobj.balance, 3)), 9)
        self.assertEqual(
            len(myobj.get_weighted(myobj.weights, myobj.balance, 4)), 11)
        self.assertEqual(
            len(myobj.get_weighted(myobj.weights, myobj.balance, 5)), 4)

        self.assertEqual(
            myobj.is_remainder_balanced(myobj.weights, [9, 11], myobj.balance,
                                        2), True)
        self.assertEqual(
            myobj.is_remainder_balanced(myobj.weights, [1, 8, 11],
                                        myobj.balance, 2), True)
        self.assertEqual(
            myobj.is_remainder_balanced(myobj.weights, [1, 9, 10],
                                        myobj.balance, 2), True)

        self.assertEqual(myobj.find_best_legroom(), 99)
예제 #17
0
    def test_simple_bridges(self):
        "Test build a couple of bridges"

        # 1. Create Moat object from text
        myobj = moat.Moat(text=aoc_24.from_text(EXAMPLE_TEXT))

        # 2. Build one bridge
        bridge = myobj.build_a_bridge(first=True)

        # 3. Validate it
        self.assertEqual(myobj.check_bridge(bridge), True)
        self.assertEqual(bridge, [0, 1, 2, 3])

        # 4. Build a couple of random bridges
        for _ in range(50):

            # 5. Build a bridge
            bridge = myobj.build_a_bridge()

            # 6. Validate it
            self.assertEqual(myobj.check_bridge(bridge), True)
            self.assertTrue(bridge in BRIDGES)