diff --git a/src/Year_2015/P6.py b/src/Year_2015/P6.py index e15a3ff..b897f55 100644 --- a/src/Year_2015/P6.py +++ b/src/Year_2015/P6.py @@ -90,5 +90,73 @@ def part_1(): print(f"There are {lit} ligths lit") +# --- Part Two --- + +# You just finish implementing your winning light pattern when you realize you +# mistranslated Santa's message from Ancient Nordic Elvish. + +# The light grid you bought actually has individual brightness controls; each +# light can have a brightness of zero or more. The lights all start at zero. + +# The phrase turn on actually means that you should increase the brightness of +# those lights by 1. + +# The phrase turn off actually means that you should decrease the brightness of +# those lights by 1, to a minimum of zero. + +# The phrase toggle actually means that you should increase the brightness of +# those lights by 2. + +# What is the total brightness of all lights combined after following Santa's +# instructions? + +# For example: + +# turn on 0,0 through 0,0 would increase the total brightness by 1. +# toggle 0,0 through 999,999 would increase the total brightness by +# 2000000. + + +def apply_action_( + action: str, + coords: list[int], + grid: dict[tuple[int, int], int], +) -> dict[tuple[int, int], int]: + if action == "off": + for x in range(coords[0], coords[2] + 1): + for y in range(coords[1], coords[3] + 1): + if grid[x, y] != 0: + grid[x, y] -= 1 + else: + grid[x, y] = 0 + return grid + elif action == "on": + for x in range(coords[0], coords[2] + 1): + for y in range(coords[1], coords[3] + 1): + grid[x, y] += 1 + return grid + elif action == "toggle": + for x in range(coords[0], coords[2] + 1): + for y in range(coords[1], coords[3] + 1): + grid[x, y] += 2 + return grid + + +def part_2(): + # Initially, all lights are off("0") + grid = defaultdict(int) + for x in range(1000): + for y in range(1000): + grid[x, y] = 0 + + for instruction in instructions: + action, *coords = get_coordinates(instruction) + grid = apply_action_(action, coords, grid) + + brightness = sum(value for value in grid.values()) + print(f"The total brightness is {brightness}") + + if __name__ == "__main__": part_1() + part_2()