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)
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)
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))
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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), "#...........#")
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)
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)
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))
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')
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)