Something went wrong. Try again.
My Advent of Code solutions in Python. kevinyap.ca/2019/12/going-fast-in-advent-of-code
advent-of-code python
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import fileinputfrom collections import Counter
report = [line.strip() for line in fileinput.input()]
# Part 1gamma = ''epsilon = ''for i in range(len(report[0])): c = Counter(r[i] for r in report) gamma += c.most_common()[0][0] epsilon += c.most_common()[1][0]
gamma = int(gamma, 2)epsilon = int(epsilon, 2)
print "Part 1:", gamma * epsilon
# Part 2def part_2(report, idx, oxygen=True): # Figure out what the most/least common bit is. c = Counter(r[idx] for r in report) keep = '1' if oxygen else '0' comm = c.most_common()
if comm[0][1] != comm[1][1]: if oxygen: keep = comm[0][0] else: keep = comm[1][0]
valid = [r for r in report if r[idx] == keep]
if len(valid) == 1: return valid[0]
return part_2(valid, idx + 1, oxygen=oxygen)
o2 = int(part_2(report, 0, oxygen=True), 2)co2 = int(part_2(report, 0, oxygen=False), 2)
print "Part 2:", o2 * co2