From 37cd737f3a6ece840408ff43a9fca687713e3f4f Mon Sep 17 00:00:00 2001 From: Sebastian Seedorf Date: Fri, 3 Dec 2021 10:23:29 +0100 Subject: [PATCH] Day 03 (glamorized) --- day03/part1.py | 15 ++++++--------- day03/part2.py | 20 +++++++++----------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/day03/part1.py b/day03/part1.py index 54dce75..f9ce704 100644 --- a/day03/part1.py +++ b/day03/part1.py @@ -1,13 +1,10 @@ #!/usr/bin/env python3 +from collections import Counter -lines = (x.strip() for x in open("input.txt")) +lines = [x.strip() for x in open("input.txt")] -cnt = [0] * 12 +most_common = (Counter(column).most_common(1)[0][0] for column in zip(*lines)) +gamma = int("".join(most_common), 2) +epsilon = 2**12-1 ^ gamma -for line in lines: - cnt = [x+(int(char)*2-1) for x, char in zip(cnt, line)] - -gamma = int(''.join(['1' if x > 0 else '0' for x in cnt]), 2) -epsilon = int(''.join(['1' if x < 0 else '0' for x in cnt]), 2) - -print(gamma * epsilon) \ No newline at end of file +print(gamma * epsilon) diff --git a/day03/part2.py b/day03/part2.py index 53c2724..46f49ff 100644 --- a/day03/part2.py +++ b/day03/part2.py @@ -1,20 +1,18 @@ #!/usr/bin/env python3 +from collections import Counter def find(is_lowest): - lines = (x.strip() for x in open("input.txt")) + lines = [x.strip() for x in open("input.txt")] for bit in range(12): - zeros = [] - ones = [] - for line in lines: - zeros.append(line) if line[bit] == '0' else ones.append(line) - lines = zeros if (len(zeros) > len(ones)) != is_lowest else ones - if len(lines) <= 1: - break - return lines[0] + common = (max if is_lowest else min)( + map(lambda x: x[::-1], Counter(s[bit] for s in lines).items()) + )[1] + lines = [s for s in lines if s[bit] == common] + return lines -gamma = int(''.join(find(True)), 2) -epsilon = int(''.join(find(False)), 2) +gamma = int(''.join(find(False)), 2) +epsilon = int(''.join(find(True)), 2) print(gamma * epsilon)