Day 7: Internet Protocol Version 7

Reference

library(tidyverse)

input <- read_csv(file = "inputs/2016/07.txt", col_names = "original")

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))
## 118

Part 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