2020-12-06 - Custom Customs
(original .ipynb)
Day 6 puzzle input is a list of positive responses to customs declaration questions for groups of travellers, with each group separated by a blank line (mine is here). Part 1 involves counting the number of questions that anyone in the group answered "yes" to, collecting the sum of these for each group and summing them. Part 2 is similar but for where all members of a group answered in the affirmative.
test_input_str = """abc
a
b
c
ab
ac
a
a
a
a
b"""
test_input_lines = test_input_str.split("\n")
puzzle_input_lines = open("puzzle_input/day6.txt").read().split("\n")
def find_group_union_sum(input_lines):
current_group = set()
group_totals = []
for line in input_lines:
if len(line.strip()) == 0:
group_totals.append(len(current_group))
current_group = set()
else:
current_person = set(a for a in line)
current_group = current_group.union(current_person)
if len(current_group) > 0:
group_totals.append(len(current_group))
return sum(group_totals)
assert 11 == find_group_union_sum(test_input_lines)
print(find_group_union_sum(puzzle_input_lines))
6443
def find_group_intersection_sum(input_lines):
current_group = None
group_totals = []
for line in input_lines:
if len(line.strip()) == 0:
group_totals.append(len(current_group))
current_group = None
else:
current_person = set(a for a in line)
if current_group == None:
current_group = current_person
else:
current_group = current_group.intersection(current_person)
if current_group != None:
group_totals.append(len(current_group))
return sum(group_totals)
assert 6 == find_group_intersection_sum(test_input_lines)
print(find_group_intersection_sum(puzzle_input_lines))
3232