library(tidyverse)
input <- read_csv(file = "inputs/2016/07.txt", col_names = "original")Day 7: Internet Protocol Version 7
Part One
has_abba <- function(string) {
str_detect(string = string, pattern = "([a-z])(?!\\1)([a-z])\\2\\1") |>
coalesce(FALSE)
}
split <- input |>
mutate(inside = str_extract_all(string = original,
pattern = "(?<=\\[)([a-z]*)(?=\\])"),
outside = str_extract_all(string = original,
pattern = "(?<!\\])([a-z]*)(?=\\[)|(?<=\\])([a-z]*)(?=\\[)|(?<=\\])([a-z]*)(?!\\[)")) |>
unnest_wider(col = inside, names_sep = "_") |>
unnest_wider(col = outside, names_sep = "_")
support_tls <- split |>
filter(if_all(starts_with("inside"), compose(`!`, has_abba))) |>
filter(if_any(starts_with("outside"), has_abba))
cat(nrow(support_tls))
## 118Part Two
aba_tests <- input |>
mutate(in_out = str_extract(string = original, pattern = "([a-z])(?!\\1)([a-z])\\1[a-z]*\\](.*\\])?[a-z]*\\2\\1\\2"),
out_in = str_extract(string = original, pattern = "([a-z])(?!\\1)([a-z])\\1[a-z]*\\[(.*\\[)?[a-z]*\\2\\1\\2"))
support_ssl <- aba_tests |>
filter(if_any(c(in_out, out_in), compose(`!`, is.na)))
cat(nrow(support_ssl))
## 260