From c217d7b24acdfab094e1c279db13bb972a7696d4 Mon Sep 17 00:00:00 2001 From: Sebastian Seedorf Date: Mon, 13 Dec 2021 09:58:19 +0100 Subject: [PATCH] Day 13 (glamorized) --- day13/part1.py | 9 ++++----- day13/part2.py | 13 +++++-------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/day13/part1.py b/day13/part1.py index b42118b..b8cb133 100644 --- a/day13/part1.py +++ b/day13/part1.py @@ -2,16 +2,15 @@ lines = (x.strip() for x in open("input.txt")) points = set() -# 1311,895 for line in lines: if line.startswith("fold along x="): - mark = int(line[13:]) - points = set((x if mark > x else 2*mark-x, y) for x, y in points if mark != x) + fold = int(line[13:]) + points = set((fold - abs(x-fold), y) for x, y in points if fold != x) break elif line.startswith("fold along y="): - mark = int(line[13:]) - points = set((x, y if mark > y else 2*mark-y) for x, y in points if mark != y) + fold = int(line[13:]) + points = set((x, fold - abs(y-fold)) for x, y in points if fold != y) break elif len(line) > 0: points.add(tuple(int(num) for num in line.split(","))) diff --git a/day13/part2.py b/day13/part2.py index 0143855..7af6a19 100644 --- a/day13/part2.py +++ b/day13/part2.py @@ -1,21 +1,18 @@ #!/usr/bin/env python3 -from functools import reduce -import numpy as np lines = (x.strip() for x in open("input.txt")) points = set() -# 1311,895 for line in lines: if line.startswith("fold along x="): - mark = int(line[13:]) - points = set((x if mark > x else 2*mark-x, y) for x, y in points if mark != x) + fold = int(line[13:]) + points = set((fold - abs(x-fold), y) for x, y in points if fold != x) elif line.startswith("fold along y="): - mark = int(line[13:]) - points = set((x, y if mark > y else 2*mark-y) for x, y in points if mark != y) + fold = int(line[13:]) + points = set((x, fold - abs(y-fold)) for x, y in points if fold != y) elif len(line) > 0: points.add(tuple(int(num) for num in line.split(","))) -max_x, max_y = reduce(lambda p, c: tuple(map(max, zip(p, c))), points) +max_x, max_y = tuple(map(max, zip(*points))) for line in (''.join('#' if (x, y) in points else ' ' for x in range(max_x+1)) for y in range(max_y+1)): print(line)