Day 4: Camp Cleanup

Reference

library(tidyverse)

input <- read_csv(file = "inputs/2022/04.txt", col_names = c("elf1", "elf2"))

Part One

elfs <- input |> 
    
    separate_wider_delim(col = elf1, delim = "-", names = c("elf1_min", "elf1_max")) |> 
    separate_wider_delim(col = elf2, delim = "-", names = c("elf2_min", "elf2_max")) |> 
    
    mutate(across(.cols = everything(), .fns = as.integer))

contains <- function(a_min, a_max, b_min, b_max) {
    a_contains_b <- a_min <= b_min & b_max <= a_max
    b_contains_a <- b_min <= a_min & a_max <= b_max

    return(a_contains_b | b_contains_a)
}

contain <- elfs |>     
    mutate(contains = pmap_lgl(.l = list(elf1_min, elf1_max, elf2_min, elf2_max), .f = contains))

contain |> 
    summarise(n_contain = sum(contains)) |> 
    pull(n_contain) |> 
    cat()
## 448

Part Two

overlaps <- function(a_min, a_max, b_min, b_max) {
    if (contains(a_min, a_max, b_min, b_max)) return(TRUE)
    
    a_min_in_b <- between(a_min, b_min, b_max)
    a_max_in_b <- between(a_max, b_min, b_max)

    return(a_min_in_b | a_max_in_b)
}

overlap <- elfs |>     
    mutate(overlaps = pmap_lgl(.l = list(elf1_min, elf1_max, elf2_min, elf2_max), .f = overlaps))

overlap |> 
    summarise(n_overlap = sum(overlaps)) |> 
    pull(n_overlap) |> 
    cat()
## 794