grid_next = copy.deepcopy(grid) for k, v in grid.items(): active_count = 0 x, y, z, w = k for dx in OFFSETS: for dy in OFFSETS: for dz in OFFSETS: for dw in OFFSETS: xt = x + dx yt = y + dy zt = z + dz wt = w + dw test_k = (xt, yt, zt, wt) test_v = grid.get(test_k, INACTIVE) if k == test_k: #skip testing our unit continue if test_v == ACTIVE: active_count += 1 if v == ACTIVE and not active_count in (2, 3): grid_next[k] = INACTIVE if v == INACTIVE and active_count == 3: grid_next[k] = ACTIVE grid = copy.deepcopy(grid_next) return len([v for v in grid.values() if v == ACTIVE]) if __name__ == '__main__': puzzle_input = aoc.puzzle_input(YEAR, DAY) print(f'Part {PART}: ', solve(puzzle_input))
def test(self): test_input = aoc.puzzle_input(YEAR, DAY, is_test=True) self.assertEqual(solve(test_input), 19208)
def test2(self): test_input = aoc.puzzle_input(YEAR, DAY, is_test=True, extra='_2') self.assertEqual(solve(test_input), 8)
def test(self): test_input = aoc.puzzle_input(YEAR, DAY, is_test=True) print("unit test") self.assertEqual(solve(test_input), 37)
def test(self): test_input = aoc.puzzle_input(YEAR, DAY, is_test=True) self.assertEqual(solve(test_input, preamble=5), 127)
def test(self): test_input = aoc.puzzle_input(YEAR, DAY, is_test=True, extra='_2') self.assertEqual(solve(test_input, qualifier='row'), 11)