Day 1

AdventOfCode > 2024

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)
    }
}

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