From 437985b2141a200ad4b3a8e3ca76835ee0613aa2 Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 2 Dec 2021 22:05:22 -0800 Subject: [PATCH] day 3 alt --- 3/b_better.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 3/b_better.py diff --git a/3/b_better.py b/3/b_better.py new file mode 100644 index 0000000..6b2269c --- /dev/null +++ b/3/b_better.py @@ -0,0 +1,38 @@ +width = 12 + +with open("input.txt") as f: + lines = [int(i.strip(), 2) for i in f.readlines()] + + +def count_digits(ar, pos): + zeros = 0 + ones = 0 + + for num in ar: + if num & (1 << (width - pos - 1)): + ones += 1 + else: + zeros += 1 + + return zeros, ones + + +def filter_by_digit(lines, position, value): + return [i for i in lines if int(bool(i & (1 << (width - position - 1)))) == value] + + +def filter_by(nums, func): + position = 0 + while len(nums) > 1: + zeros, ones = count_digits(nums, position) + digit = func(zeros, ones) + nums = filter_by_digit(nums, position, digit) + position += 1 + + return nums[0] + + +oxy = filter_by(lines, lambda zeros, ones: 1 if ones >= zeros else 0) +co2 = filter_by(lines, lambda zeros, ones: 1 if ones < zeros else 0) + +print(oxy * co2)