From 0dee47b9cc446ec427751cdf54a49320e52f34e0 Mon Sep 17 00:00:00 2001 From: Pascal Lais Date: Sun, 5 Dec 2021 14:03:47 +0100 Subject: [PATCH] Update day 5 solution --- day-05/day-05.py | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/day-05/day-05.py b/day-05/day-05.py index 6b2c0c9..7d0c62d 100644 --- a/day-05/day-05.py +++ b/day-05/day-05.py @@ -1,48 +1,45 @@ #!/usr/bin/phon3 +from collections import defaultdict + + def parse_line(line): p1, _, p2 = line.split() - x1,y1 = p1.split(',') - x2,y2 = p2.split(',') + x1, y1 = p1.split(',') + x2, y2 = p2.split(',') return int(x1), int(y1), int(x2), int(y2) def part_1(input): result = 0 - field = [[0 for x in range(1000)] for y in range(1000)] + field = defaultdict(int) for line in input: line = line.strip() - x1,y1,x2,y2 = parse_line(line) + x1, y1, x2, y2 = parse_line(line) if x1 == x2 or y1 == y2: - for x in range(min(x1,x2), max(x1,x2) + 1): - for y in range(min(y1,y2), max(y1,y2) + 1): - field[x][y] += 1 - for x in range(1000): - for y in range(1000): - if field[x][y] >= 2: - result += 1 + for x in range(min(x1, x2), max(x1, x2) + 1): + for y in range(min(y1, y2), max(y1, y2) + 1): + field[(x, y)] += 1 + result = len([k for k in field if field[k] > 1]) print("Part 1 result:", result) def part_2(input): result = 0 - field = [[0 for x in range(1000)] for y in range(1000)] + field = defaultdict(int) for line in input: line = line.strip() - x1,y1,x2,y2 = parse_line(line) + x1, y1, x2, y2 = parse_line(line) if x1 == x2 or y1 == y2: - for x in range(min(x1,x2), max(x1,x2) + 1): - for y in range(min(y1,y2), max(y1,y2) + 1): - field[x][y] += 1 + for x in range(min(x1, x2), max(x1, x2) + 1): + for y in range(min(y1, y2), max(y1, y2) + 1): + field[(x, y)] += 1 elif abs(x1 - x2) == abs(y1 - y2): dx = 1 if x1 < x2 else -1 dy = 1 if y1 < y2 else -1 for n in range(abs(x1 - x2) + 1): - field[x1 + (dx * n)][y1 + (dy * n)] += 1 - for x in range(1000): - for y in range(1000): - if field[x][y] >= 2: - result += 1 + field[(x1 + (dx * n), y1 + (dy * n))] += 1 + result = len([k for k in field if field[k] > 1]) print("Part 2 result:", result)