# --- Day 3: No Matter How You Slice It --- # The Elves managed to locate the chimney-squeeze prototype fabric for Santa's # suit (thanks to someone who helpfully wrote its box IDs on the wall of the # warehouse in the middle of the night). Unfortunately, anomalies are still # affecting them - nobody can even agree on how to cut the fabric. # The whole piece of fabric they're working on is a very large square - at # least 1000 inches on each side. # Each Elf has made a claim about which area of fabric would be ideal for # Santa's suit. All claims have an ID and consist of a single rectangle with # edges parallel to the edges of the fabric. Each claim's rectangle is defined # as follows: # The number of inches between the left edge of the fabric and the left # edge of the rectangle. # The number of inches between the top edge of the fabric and the top edge # of the rectangle. # The width of the rectangle in inches. # The height of the rectangle in inches. # A claim like #123 @ 3,2: 5x4 means that claim ID 123 specifies a rectangle 3 # inches from the left edge, 2 inches from the top edge, 5 inches wide, and 4 # inches tall. Visually, it claims the square inches of fabric represented by # # (and ignores the square inches of fabric represented by .) in the diagram # below: # ........... # ........... # ...#####... # ...#####... # ...#####... # ...#####... # ........... # ........... # ........... # The problem is that many of the claims overlap, causing two or more claims to # cover part of the same areas. For example, consider the following claims: # #1 @ 1,3: 4x4 # #2 @ 3,1: 4x4 # #3 @ 5,5: 2x2 # Visually, these claim the following areas: # ........ # ...2222. # ...2222. # .11XX22. # .11XX22. # .111133. # .111133. # ........ # The four square inches marked with X are claimed by both 1 and 2. (Claim 3, # while adjacent to the others, does not overlap either of them.) # If the Elves all proceed with their own plans, none of them will have enough # fabric. How many square inches of fabric are within two or more claims? import numpy as np with open("files/P3.txt") as f: claims = [line for line in f.read().strip().split("\n")] def part_1() -> np.array: grid = np.zeros((1000, 1000), dtype=int) for claim in claims: claim_id, _, orig, size = claim.split() left, top = orig[:-1].split(",") width, height = size.split("x") for row in range(int(top), int(top) + int(height)): for col in range(int(left), int(left) + int(width)): grid[row][col] += 1 print( f"There are {np.count_nonzero(grid >= 2)} square inches within two " f"or more claims" ) return grid # --- Part Two --- # Amidst the chaos, you notice that exactly one claim doesn't overlap by even a # single square inch of fabric with any other claim. If you can somehow draw # attention to it, maybe the Elves will be able to make Santa's suit after all! # For example, in the claims above, only claim 3 is intact after all claims are # made. # What is the ID of the only claim that doesn't overlap? def part_2() -> None: filled_grid = part_1() for claim in claims: claim_id, _, orig, size = claim.split() left, top = orig[:-1].split(",") width, height = size.split("x") counts = 0 for row in range(int(top), int(top) + int(height)): for col in range(int(left), int(left) + int(width)): if filled_grid[row][col] == 1: counts += 1 if counts == (int(width) * int(height)): print(f"The claim ID that does not overlap is {claim_id}") if __name__ == "__main__": # part_1() part_2()