suppressPackageStartupMessages({
library(tidyverse)
library(httr2)
})
adventofcode_input <- \(year, day, what = c("data.frame", "character")) {
session <- Sys.getenv("ADVENT_SESSION")
if (session == "") {
stop("Must set ADVENT_SESSION in .Renviron")
}
url <- paste0("https://adventofcode.com/", year, "/day/", day, "/input")
tryCatch({
res <- request(url) |>
req_cookies_set(session = session) |>
req_perform() |>
resp_body_string(encoding = "UTF-8")
},
error = \(e) stop("Error getting the input file")
)
if(what[1] == "data.frame") {
return(data.frame(x = res |> strsplit("\n") |> unlist()))
}
if(what[1] == "character") {
return(res)
}
}Day 1
AdventOfCode > 2024
Part 1
test <- tribble(
~x,
"3 4",
"4 3",
"2 5",
"1 3",
"3 9",
"3 3"
)
vars <- test |>
separate_wider_regex(x, c(var1 = "\\d+", "\\s+", var2 = ".*")) |>
mutate(across(everything(), as.integer))
sum(abs(sort(vars$var1) - sort(vars$var2)))[1] 11
input <- adventofcode_input(2024, 1)
vars <- input |>
separate_wider_regex(x, c(var1 = "\\d+", "\\s+", var2 = ".*")) |>
mutate(across(everything(), as.integer))
sum(abs(sort(vars$var1) - sort(vars$var2)))[1] 1603498
vars <- adventofcode_input(2024, 1, what = "character") |>
textConnection() |>
read.table()
sum(abs(sort(vars$V1) - sort(vars$V2)))[1] 1603498
Part 2
vars <- test |>
separate_wider_regex(x, c(var1 = "\\d+", "\\s+", var2 = ".*")) |>
mutate(across(everything(), as.integer))
sum(map_dbl(vars$var1, \(x) sum(x == vars$var2) * x))[1] 31
input <- adventofcode_input(2024, 1)
vars <- input |>
separate_wider_regex(x, c(var1 = "\\d+", "\\s+", var2 = ".*")) |>
mutate(across(everything(), as.integer))
sum(map_dbl(vars$var1, \(x) sum(x == vars$var2) * x))[1] 25574739
vars <- adventofcode_input(2024, 1, what = "character") |>
textConnection() |>
read.table()
sum(map_dbl(vars$V1, \(x) sum(x == vars$V2) * x))[1] 25574739