#' Day 06: Custom Customs
#'
#' [Custom Customs](https://adventofcode.com/2020/day/6)
#'
#' @name day06
#' @rdname day06
#' @details
#'
#' **Part One**
#'
#' much larger plane, [customs declaration
#' forms](https://en.wikipedia.org/wiki/Customs_declaration) 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?*
#'
#' **Part Two**
#'
#' As you finish the last group\'s customs declaration, you notice that
#' [you misread one
#' word]{title="Don't worry, nobody ever misreads just one word in real life."}
#' 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?*
#'
#' @param x some data
#' @return For Part One, `f06a(x)` returns .... For Part Two,
#' `f06b(x)` returns ....
#' @export
#' @examples
#' x <- read_text_lines(
#' drop_empty = "head/tail",
#' x = "
#' abc
#'
#' a
#' b
#' c
#'
#' ab
#' ac
#'
#' a
#' a
#' a
#' a
#'
#' b
#' "
#' )
#' find_unique_questions(x)
#' find_shared_questions(x)
find_unique_questions <- function(x) {
x %>%
group_at_empty_lines() %>%
lapply(strsplit, "") %>%
lapply(unlist) %>%
lapply(unique)
}
#' @rdname day06
#' @export
find_shared_questions <- function(x) {
x %>%
group_at_empty_lines() %>%
lapply(strsplit, "") %>%
lapply(function(x) Reduce(intersect, x))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.