You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.5 KiB
116 lines
3.5 KiB
# --- 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?
|
|
|
|
library(stringi)
|
|
library(magrittr)
|
|
library(tidyverse)
|
|
|
|
# input <- readLines("/tmp/test.txt")
|
|
input <- readLines("../input/06-01.txt", warn = FALSE)
|
|
|
|
# 04-01 -------------------------------------------------------------------
|
|
|
|
split(input, findInterval(1:length(input), which(input == ""))) %>%
|
|
map_int(~length(unique(unlist(strsplit(.x, ""))))) %>%
|
|
sum()
|
|
|
|
# --- 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?
|
|
#
|
|
|
|
# 04-02
|
|
|
|
split(input, findInterval(1:length(input), which(input == ""))) %>%
|
|
map(discard, equals, "") %>%
|
|
map_int(~{
|
|
sum(table(unlist(strsplit(.x, ""))) == length(.x))
|
|
}) %>%
|
|
sum()
|
|
|