Add day 3 solution
This commit is contained in:
66
day-03/day-03.py
Normal file
66
day-03/day-03.py
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
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()
|
||||||
|
with open('input.txt') as fp:
|
||||||
|
input = fp.readlines()
|
||||||
|
|
||||||
|
part_1(input)
|
||||||
|
part_2(input)
|
||||||
1000
day-03/input.txt
Normal file
1000
day-03/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user