Day 3

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

"xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))" |> 
    str_extract_all('mul\\(\\d{1,3},\\d{1,3}\\)') |>
    unlist() |>
    str_replace_all("mul", "") |> 
    str_replace_all(",", "*") |> 
    map_int(\(x) eval(parse(text = x))) |> 
    sum()
[1] 161
adventofcode_input(2024, 3, "character") |> 
    str_extract_all('mul\\(\\d{1,3},\\d{1,3}\\)') |>
    unlist() |>
    str_replace_all("mul", "") |> 
    str_replace_all(",", "*") |> 
    map_int(\(x) eval(parse(text = x))) |> 
    sum()
[1] 188116424

Part 2

"xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))" |> 
    str_split("do(?=(n't)?\\(\\))") |> 
    unlist() |>
    discard(\(x) str_detect(x, 'n\'t')) |> 
    paste0(collapse = "") |>    
    str_extract_all('mul\\(\\d{1,3},\\d{1,3}\\)') |>
    unlist() |>
    str_replace_all("mul", "") |> 
    str_replace_all(",", "*") |> 
    map_int(\(x) eval(parse(text = x))) |> 
    sum()
[1] 48
adventofcode_input(2024, 3, "character") |> 
    str_split("do(?=(n't)?\\(\\))") |> 
    unlist() |>
    discard(\(x) str_detect(x, 'n\'t')) |> 
    paste0(collapse = "") |>    
    str_extract_all('mul\\(\\d{1,3},\\d{1,3}\\)') |>
    unlist() |>
    str_replace_all("mul", "") |> 
    str_replace_all(",", "*") |> 
    map_int(\(x) eval(parse(text = x))) |> 
    sum()
[1] 104245808