From ce5768a2f6e1d70545136d181a721ffe55508b12 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Sun, 5 Dec 2021 05:42:28 +0000 Subject: day 5: first draft --- 5.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 5.py (limited to '5.py') diff --git a/5.py b/5.py new file mode 100644 index 0000000..1e61efb --- /dev/null +++ b/5.py @@ -0,0 +1,39 @@ +from collections import defaultdict, namedtuple +from utils import open_day + +Pos = namedtuple('Pos', ['x', 'y']) + +vents = [ + tuple( + Pos(*map(int, h.split(','))) + for h in l.rstrip().split(' -> ') + ) + for l in open_day(5).read().rstrip().split('\n') +] + +def gen(frm, to): + if to < frm: + to = to - 1 + increment = -1 + else: + to = to + 1 + increment = 1 + for i in range(frm, to, increment): + yield i + +points = defaultdict(int) + +for vent in vents: + if vent[0].x == vent[1].x: + for y in gen(vent[0].y, vent[1].y): + points[(vent[0].x, y)] += 1 + elif vent[0].y == vent[1].y: + for x in gen(vent[0].x, vent[1].x): + points[(x, vent[0].y)] += 1 +print(sum(n >= 2 for n in points.values())) + +for vent in vents: + if vent[0].x != vent[1].x and vent[0].y != vent[1].y: + for x, y in zip(gen(vent[0].x, vent[1].x), gen(vent[0].y, vent[1].y)): + points[(x, y)] += 1 +print(sum(n >= 2 for n in points.values())) -- cgit v1.2.3-54-g00ecf