49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
import functools
|
|
|
|
|
|
def parse_input() -> list[list[str]]:
|
|
groups = [[]]
|
|
|
|
with open("input.txt") as file:
|
|
for line in file:
|
|
line_ = line.rstrip()
|
|
if len(line_) > 0:
|
|
groups[-1].append(line_)
|
|
else:
|
|
if not groups[-1] == []:
|
|
groups.append([])
|
|
|
|
return groups
|
|
|
|
|
|
def solve_p1(groups: list[list[str]]) -> int:
|
|
|
|
def count(group: list[str]) -> int:
|
|
chars = set()
|
|
for line in group:
|
|
for char in line:
|
|
chars.add(char)
|
|
return len(chars)
|
|
|
|
return sum(map(count, groups))
|
|
|
|
|
|
def solve_p2(groups: list[list[str]]) -> int:
|
|
|
|
def count_intersection(group: list[str]) -> int:
|
|
sets = []
|
|
for line in group:
|
|
new_set = set()
|
|
for char in line:
|
|
new_set.add(char)
|
|
sets.append(new_set)
|
|
result_set = functools.reduce(set.intersection, sets)
|
|
return len(result_set)
|
|
|
|
return sum(map(count_intersection, groups))
|
|
|
|
|
|
GROUPS = parse_input()
|
|
print(solve_p1(GROUPS))
|
|
print(solve_p2(GROUPS))
|