library(tidyverse)
input <- read_csv(file = "inputs/2022/04.txt", col_names = c("elf1", "elf2"))Day 4: Camp Cleanup
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()
## 448Part 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