Files
advent-of-code-2021/day-03/day-03.py
Pascal Lais f20877c65a
All checks were successful
continuous-integration/drone/push Build is passing
Update shebang
2021-12-06 07:42:38 +01:00

69 lines
1.8 KiB
Python

#!/usr/bin/env python3
from pathlib import Path
def part_1(input):
result = 0
gamma = 0
epsilon = 0
num_bits = len(input[0]) - 1
counts = [0] * num_bits
for line in input:
line = int(line, 2)
for i in range(num_bits):
shift = (num_bits - i - 1)
mask = 1 << shift
if mask & line:
counts[i] += 1
for count in counts:
gamma <<= 1
epsilon <<= 1
if len(input)/2 < count:
gamma |= 1
else:
epsilon |= 1
result = gamma * epsilon
print("Part 1 result:", result)
def part_2(input):
result = 0
num_bits = len(input[0]) - 1
oxy_list = input.copy()
co2_list = input.copy()
for i in range(num_bits):
shift = (num_bits - i - 1)
mask = 1 << shift
count = 0
for element in list(oxy_list):
if int(element, 2) & mask:
count += 1
digit = 0
if (len(oxy_list)/2) <= count:
digit = 1
for element in list(oxy_list):
if (int(element, 2) & mask) >> shift != digit:
if 1 < len(oxy_list):
oxy_list.remove(element)
count = 0
for element in list(co2_list):
if int(element, 2) & mask:
count += 1
digit = 1
if (len(co2_list)/2) <= count:
digit = 0
for element in list(co2_list):
if (int(element, 2) & mask) >> shift != digit:
if 1 < len(co2_list):
co2_list.remove(element)
result = int(oxy_list[0], 2) * int(co2_list[0], 2)
print("Part 2 result:", result)
input = list()
p = Path(__file__).with_name('input.txt')
with open(p) as f:
input = f.readlines()
part_1(input)
part_2(input)