Files
Advent_of_code/src/Year_2020/P6.py
2022-01-14 11:21:56 +01:00

139 lines
3.7 KiB
Python

# --- Day 6: Custom Customs ---
# As your flight approaches the regional airport where you'll switch to a much
# larger plane, customs declaration forms are distributed to the passengers.
# The form asks a series of 26 yes-or-no questions marked a through z. All you
# need to do is identify the questions for which anyone in your group answers
# "yes". Since your group is just you, this doesn't take very long.
# However, the person sitting next to you seems to be experiencing a language
# barrier and asks if you can help. For each of the people in their group, you
# write down the questions for which they answer "yes", one per line. For
# example:
# abcx
# abcy
# abcz
# In this group, there are 6 questions to which anyone answered "yes": a, b, c,
# x, y, and z. (Duplicate answers to the same question don't count extra; each
# question counts at most once.)
# Another group asks for your help, then another, and eventually you've
# collected answers from every group on the plane (your puzzle input). Each
# group's answers are separated by a blank line, and within each group, each
# person's answers are on a single line. For example:
# abc
# a
# b
# c
# ab
# ac
# a
# a
# a
# a
# b
# This list represents answers from five groups:
# The first group contains one person who answered "yes" to 3 questions: a,
# b, and c.
# The second group contains three people; combined, they answered "yes" to
# 3 questions: a, b, and c.
# The third group contains two people; combined, they answered "yes" to 3
# questions: a, b, and c.
# The fourth group contains four people; combined, they answered "yes" to
# only 1 question, a.
# The last group contains one person who answered "yes" to only 1 question,
# b.
# In this example, the sum of these counts is 3 + 3 + 3 + 1 + 1 = 11.
# For each group, count the number of questions to which anyone answered "yes".
# What is the sum of those counts?
with open("files/P6.txt", "r") as f:
answers_groups = [line.split() for line in f.read().strip().split("\n\n")]
def part_1() -> None:
counts: int = 0
for answers_group in answers_groups:
yes = len(
set(
[
answer
for individual_answers in answers_group
for answer in individual_answers
]
)
)
counts += yes
print(f"The sum of counts is {counts}")
# --- Part Two ---
# As you finish the last group's customs declaration, you notice that you
# misread one word in the instructions:
# You don't need to identify the questions to which anyone answered "yes"; you
# need to identify the questions to which everyone answered "yes"!
# Using the same example as above:
# abc
# a
# b
# c
# ab
# ac
# a
# a
# a
# a
# b
# This list represents answers from five groups:
# In the first group, everyone (all 1 person) answered "yes" to 3
# questions: a, b, and c.
# In the second group, there is no question to which everyone answered
# "yes".
# In the third group, everyone answered yes to only 1 question, a. Since
# some people did not answer "yes" to b or c, they don't count.
# In the fourth group, everyone answered yes to only 1 question, a.
# In the fifth group, everyone (all 1 person) answered "yes" to 1 question,
# b.
# In this example, the sum of these counts is 3 + 0 + 1 + 1 + 1 = 6.
# For each group, count the number of questions to which everyone answered
# "yes". What is the sum of those counts?
def part_2() -> None:
counts: int = 0
for answers_group in answers_groups:
yes = len(set.intersection(*map(set, answers_group)))
counts += yes
print(f"The sum of counts is {counts}")
if __name__ == "__main__":
part_1()
part_2()