Day 3

Advent of Code: Worked Solutions

About
Date

December 3, 2024

Setup

Import libraries:

library(tidyverse)
library(unglue)

Read text input from file and combine into a single string:

input <- read_lines("../input/day03.txt") |> 
  str_c(collapse = "")

Part 1

Define a function that “uncorrupts” a string of text by extracting all valid mul instructions, executing them, and adding them together. We perform this extraction with regex:

uncorrupt <- function(str) {
  str |> 
    str_extract_all("mul\\(\\d+,\\d+\\)") |> 
    unlist() |> 
    unglue_data("mul({d1},{d2})", convert = TRUE) |> 
    pmap_dbl(prod) |> 
    sum()
}

Run the uncorrupt function on the puzzle input:

uncorrupt(input)

Part 2

Remove all text between don't() and do(), then uncorrupt the result. We use the regex expression .*? to remove as little text as possible between the don't and do statements (ungreedy), so that only the most recent command is used:

input |> 
  str_remove_all("don't\\(\\).*?do\\(\\)") |>   
  uncorrupt()