Ejemplo n.º 1
0
    def test_text_init(self):
        "Test the Burrow object creation from text"

        # 1. Create Burrow object from text
        myobj = burrow.Burrow(text=aoc_23.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.hallway.doorways), 4)
        self.assertEqual(len(myobj.rooms), 4)
        self.assertEqual(myobj.hall_len, 11)
        self.assertEqual(myobj.room_len, 2)
        self.assertEqual(myobj.poss_len, 11 + 4 * 2)

        # 3. Check methods
        self.assertEqual(str(myobj), EXAMPLE_TEXT.strip())
        self.assertEqual(myobj.position(0), '.')
        self.assertEqual(myobj.position(11), 'B')
        self.assertEqual(myobj.position(14), 'D')
        self.assertEqual(myobj.positions(), "...........BACDBCDA")

        self.assertEqual(myobj.is_in_hall(0), True)
        self.assertEqual(myobj.is_in_hall(10), True)
        self.assertEqual(myobj.is_in_hall(11), False)
Ejemplo n.º 2
0
    def test_two_init(self):
        "Test the Burrow object creation from text"

        # 1. Create Burrow object from text for part2
        myobj = burrow.Burrow(text=aoc_23.from_text(EXAMPLE_TEXT), part2=True)

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, True)
        self.assertEqual(len(myobj.text), 7)
        self.assertEqual(len(myobj.hallway.doorways), 4)
        self.assertEqual(len(myobj.rooms), 4)
        self.assertEqual(myobj.hall_len, 11)
        self.assertEqual(myobj.room_len, 4)
        self.assertEqual(myobj.poss_len, 11 + 4 * 4)

        # 3. Check methods
        self.assertEqual(len(myobj.positions()), myobj.poss_len)
        self.assertEqual(myobj.position(0), '.')
        self.assertEqual(myobj.position(11), 'B')
        self.assertEqual(myobj.position(12), 'D')
        self.assertEqual(myobj.position(13), 'D')
        self.assertEqual(myobj.position(14), 'A')
        self.assertEqual(myobj.positions(), "...........BDDACCBDBBACDACA")

        self.assertEqual(myobj.is_in_hall(0), True)
        self.assertEqual(myobj.is_in_hall(10), True)
        self.assertEqual(myobj.is_in_hall(11), False)
Ejemplo n.º 3
0
    def test_part_two(self):
        "Test part two example of Conflagration object"

        # 1. Create Conflagration object from text
        myobj = conflagration.Conflagration(
            part2=True, text=aoc_23.from_text(PART_TWO_TEXT))

        # 2. Make it easier for the slow method to complete
        inst = myobj.instructions[4]
        myobj.instructions[4] = (inst[0], inst[1], 1)
        inst = myobj.instructions[5]
        myobj.instructions[5] = (inst[0], inst[1], 0)
        inst = myobj.instructions[7]
        myobj.instructions[7] = (inst[0], inst[1], -10)

        # 2. Find the solution for numbers between 4 and 8
        for number in range(2, 2):

            # 3. Set the instruction value
            inst = myobj.instructions[0]
            myobj.instructions[0] = (inst[0], inst[1], number)

            # 4. Reset the co-processor
            myobj.reset()

            # 5. Check the part two result
            self.assertEqual(myobj.part_two(verbose=False),
                             myobj.part_two_slow(verbose=False))
Ejemplo n.º 4
0
    def test_part_two(self):
        "Test part two example of Computer object"

        # 1. Create Computer object from text
        myobj = computer.Computer(part2=True, text=aoc_23.from_text(PART_TWO_TEXT))

        # 2. Check the part two result
        self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
Ejemplo n.º 5
0
    def test_part_one(self):
        "Test part one example of Computer object"

        # 1. Create Computer object from text
        myobj = computer.Computer(text=aoc_23.from_text(PART_ONE_TEXT))

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

        # 1. Create Puzzle object from text
        myobj = puzzle.Puzzle(part2=True, text=aoc_23.from_text(PART_TWO_TEXT))

        # 2. Check the part two result
        self.assertEqual(myobj.part_two(verbose=True), PART_TWO_RESULT)
Ejemplo n.º 7
0
    def test_part_one(self):
        "Test part one example of Nanobots object"

        # 1. Create Nanobots object from text
        myobj = nanobots.Nanobots(text=aoc_23.from_text(PART_ONE_TEXT))

        # 2. Check the part one result
        self.assertEqual(myobj.part_one(verbose=False), PART_ONE_RESULT)
Ejemplo n.º 8
0
    def test_part_one(self):
        "Test part one example of Puzzle object"

        # 1. Create Puzzle object from text
        myobj = puzzle.Puzzle(part2=False,
                              text=aoc_23.from_text(PART_ONE_TEXT))

        # 2. Check the part two result
        self.assertEqual(myobj.part_one(verbose=False), PART_ONE_RESULT)
Ejemplo n.º 9
0
    def test_text_init(self):
        "Test the Assembunny object creation from text"

        # 1. Create Assembunny object from text
        myobj = assembunny.Assembunny(text=aoc_23.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 7)
        self.assertEqual(myobj.registers, {'a': 0, 'b': 0, 'c': 0, 'd': 0})
        self.assertEqual(myobj.program_counter, 0)
Ejemplo n.º 10
0
    def test_three_moves(self):
        "Test the Puzzle object creation from text that needs three moves"

        # 1. Create Puzzle object from text
        myobj = puzzle.Puzzle(text=aoc_23.from_text(EXAMPLE_THREE_MOVES))

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

        # 3. Check methods
        self.assertEqual(myobj.burrow.positions(), ".....D.D.A..ABBCC..")
        self.assertEqual(myobj.organize(), 7008)
Ejemplo n.º 11
0
    def test_no_moves(self):
        "Test the Puzzle object creation from text that is complete"

        # 1. Create Puzzle object from text
        myobj = puzzle.Puzzle(text=aoc_23.from_text(EXAMPLE_NO_MOVES))

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

        # 3. Check methods
        self.assertEqual(myobj.burrow.positions(), "...........AABBCCDD")
        self.assertEqual(myobj.organize(), 0)
Ejemplo n.º 12
0
    def test_text_init(self):
        "Test the Puzzle object creation from text"

        # 1. Create Puzzle object from text
        myobj = puzzle.Puzzle(text=aoc_23.from_text(EXAMPLE_TEXT))

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

        # 3. Check methods
        self.assertEqual(myobj.burrow.positions(), "...........BACDBCDA")
        self.assertEqual(myobj.organize(), 12521)
Ejemplo n.º 13
0
    def test_one_move(self):
        "Test the Puzzle object creation from text that needs only one move"

        # 1. Create Puzzle object from text
        myobj = puzzle.Puzzle(text=aoc_23.from_text(EXAMPLE_ONE_MOVE))

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

        # 3. Check methods
        self.assertEqual(myobj.burrow.positions(), ".........A..ABBCCDD")
        self.assertEqual(myobj.organize(), 8)
Ejemplo n.º 14
0
    def test_text_init(self):
        "Test the Conflagration object creation from text"

        # 1. Create Conflagration object from text
        myobj = conflagration.Conflagration(
            text=aoc_23.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 32)
        self.assertEqual(len(myobj.instructions), 32)
        self.assertEqual(myobj.position, 0)
        self.assertEqual(len(myobj.registers), len(conflagration.REGS))
        self.assertEqual(myobj.terminated, False)
        self.assertEqual(myobj.mul_knt, 0)
Ejemplo n.º 15
0
    def test_seven_moves(self):
        "Test the Puzzle object creation from text that needs three moves"

        # 1. Create Puzzle object from text
        myobj = puzzle.Puzzle(text=aoc_23.from_text(EXAMPLE_SEVEN_MOVES))
        myobj.part2 = True

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, True)
        self.assertEqual(len(myobj.text), 7)

        # 3. Check methods
        self.assertEqual(myobj.burrow.positions(),
                         "AA.......AD.DDABBBBCCCC...D")
        self.assertEqual(myobj.organize(), 25016)
Ejemplo n.º 16
0
    def test_text_init(self):
        "Test the Hallway object creation from text"

        # 1. Create Hallway object from text
        myobj = hallway.Hallway(text=aoc_23.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.spaces), 11)
        self.assertEqual(len(myobj.doorways), 4)
        self.assertEqual(myobj.doorways, [2, 4, 6, 8])

        # 3. Check methods
        self.assertEqual(str(myobj), "#...........#")
Ejemplo n.º 17
0
    def test_part_two(self):
        "Test part two example of Game object"

        # 1. Create Game object from text
        myobj = game.Game(part2=True, text=aoc_23.from_text(PART_TWO_TEXT))
        self.assertEqual(myobj.current, 3)
        self.assertEqual(myobj.maximum, 1000000)
        self.assertEqual(len(myobj.cups), 1000000)
        self.assertEqual(myobj.cups[3], 8)
        self.assertEqual(myobj.cups[8], 9)
        self.assertEqual(myobj.cups[9], 1)
        self.assertEqual(myobj.cups[6], 7)
        self.assertEqual(myobj.cups[7], 10)
        self.assertEqual(myobj.cups[10], 11)
        self.assertEqual(myobj.cups[1000000], 3)

        # 2. Check the part two result
        self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
Ejemplo n.º 18
0
    def test_text_init(self):
        "Test the Computer object creation from text"

        # 1. Create Computer object from text
        myobj = computer.Computer(text=aoc_23.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 4)
        self.assertEqual(len(myobj.regs), 2)
        self.assertEqual(myobj.regs['a'], 0)
        self.assertEqual(myobj.regs['b'], 0)
        self.assertEqual(myobj.addr, 0)

        # 3. Check methods
        self.assertEqual(myobj.step(), True)
        self.assertEqual(myobj.regs['a'], 1)
        self.assertEqual(myobj.regs['b'], 0)
        self.assertEqual(myobj.addr, 1)

        self.assertEqual(myobj.step(), True)
        self.assertEqual(myobj.regs['a'], 1)
        self.assertEqual(myobj.regs['b'], 0)
        self.assertEqual(myobj.addr, 3)

        self.assertEqual(myobj.step(), True)
        self.assertEqual(myobj.regs['a'], 2)
        self.assertEqual(myobj.regs['b'], 0)
        self.assertEqual(myobj.addr, 4)

        self.assertEqual(myobj.step(), False)
        self.assertEqual(myobj.regs['a'], 2)
        self.assertEqual(myobj.regs['b'], 0)
        self.assertEqual(myobj.addr, 4)

        myobj.reset()
        self.assertEqual(myobj.regs['a'], 0)
        self.assertEqual(myobj.regs['b'], 0)
        self.assertEqual(myobj.addr, 0)

        self.assertEqual(myobj.run(), 0)
        self.assertEqual(myobj.regs['a'], 2)
        self.assertEqual(myobj.regs['b'], 0)
        self.assertEqual(myobj.addr, 4)
Ejemplo n.º 19
0
    def test_part_one(self):
        "Test part one example of Conflagration object"

        # 1. Create Conflagration object from text
        myobj = conflagration.Conflagration(
            text=aoc_23.from_text(PART_ONE_TEXT))

        # 2. Find the solution for numbers between 10 and 20
        for number in range(10, 20):

            # 3. Set the instruction value
            inst_zero = myobj.instructions[0]
            myobj.instructions[0] = (inst_zero[0], inst_zero[1], number)

            # 4. Reset the co-processor
            myobj.reset()

            # 5. Check the part one result
            self.assertEqual(myobj.part_one(verbose=False),
                             myobj.part_one_slow(verbose=False))
Ejemplo n.º 20
0
    def test_text_init(self):
        "Test the Game object creation from text"

        # 1. Create Game object from text
        myobj = game.Game(text=aoc_23.from_text(EXAMPLE_TEXT))

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 1)
        self.assertEqual(myobj.current, 3)
        self.assertEqual(myobj.maximum, 9)
        self.assertEqual(len(myobj.cups), 9)
        self.assertEqual(myobj.cups[3], 8)
        self.assertEqual(myobj.cups[8], 9)
        self.assertEqual(myobj.cups[9], 1)
        self.assertEqual(myobj.cups[6], 7)
        self.assertEqual(myobj.cups[7], 3)

        # 3. Test methods
        myobj.one_turn()  # move 1
        self.assertEqual(myobj.current, 2)
        myobj.one_turn()  # move 2
        self.assertEqual(myobj.current, 5)
        myobj.one_turn()  # move 3
        self.assertEqual(myobj.current, 8)
        myobj.one_turn()  # move 4
        self.assertEqual(myobj.current, 4)
        myobj.one_turn()  # move 5
        self.assertEqual(myobj.current, 1)
        myobj.one_turn()  # move 6
        self.assertEqual(myobj.current, 9)
        myobj.one_turn()  # move 7
        self.assertEqual(myobj.current, 2)
        myobj.one_turn()  # move 8
        self.assertEqual(myobj.current, 6)
        myobj.one_turn()  # move 9
        self.assertEqual(myobj.current, 5)
        myobj.one_turn()  # move 10
        self.assertEqual(myobj.current, 8)
        self.assertEqual(myobj.labeled(), '92658374')
Ejemplo n.º 21
0
    def test_text_init(self):
        "Test the Nanobots object creation from text"

        # 1. Create Nanobots object from text
        myobj = nanobots.Nanobots(text=aoc_23.from_text(EXAMPLE_TEXT))

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

        # 3. Check distances
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[0]), 0)
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[1]), 1)
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[2]), 4)
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[3]), 2)
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[4]), 5)
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[5]), 3)
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[6]), 3)
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[7]), 4)
        self.assertEqual(myobj.bots[0].manhattan_distance(myobj.bots[8]), 5)

        # 4. Check range
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[0]), True)
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[1]), True)
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[2]), True)
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[3]), True)
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[4]), False)
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[5]), True)
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[6]), True)
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[7]), True)
        self.assertEqual(myobj.bots[0].in_range(myobj.bots[8]), False)

        # 4. Check strongest signal
        self.assertEqual(myobj.largest_signal_radius(), myobj.bots[0])

        # 5. Check number in range
        self.assertEqual(myobj.bots_in_range(myobj.bots[0]), 7)