Skip to content

Instantly share code, notes, and snippets.

@rejoycesong
Created December 6, 2021 10:09
Show Gist options
  • Save rejoycesong/0eabfbe01d49276dc89716a02e3bfe97 to your computer and use it in GitHub Desktop.
Save rejoycesong/0eabfbe01d49276dc89716a02e3bfe97 to your computer and use it in GitHub Desktop.
input = open('input/day3.txt', 'r').readlines()
strings = [list(line)[:-1] for line in input]
def partOne(strings=strings):
transposed = [*zip(*strings)]
gamma_string = ''.join([max(digit, key=digit.count) for digit in transposed])
epsilon_string = gamma_string.replace('0', 'q').replace('1', '0').replace('q', '1')
return int(gamma_string, 2)*int(epsilon_string, 2)
def partTwo(strings=strings):
transposed = lambda strings: [*zip(*strings)]
get_most_common = lambda l: max(sorted(l, reverse=True), key=l.count)
get_least_common = lambda l: min(sorted(l), key=l.count)
oxygen = list(strings)
for i in range(len(strings[0])):
common_digit = get_most_common(transposed(oxygen)[i])
oxygen = list(filter(lambda line: line[i] == common_digit, oxygen))
if len(oxygen) == 1:
oxygen = ''.join(oxygen[0])
break
co2 = list(strings)
for i in range(len(strings[0])):
common_digit = get_least_common(transposed(co2)[i])
co2 = list(filter(lambda line: line[i] == common_digit, co2))
if len(co2) == 1:
co2 = ''.join(co2[0])
break
return int(oxygen, 2)*int(co2, 2)
print("Part One:", partOne())
print("Part Two:", partTwo())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment