Day 3: Mull It Over

Reference

library(tidyverse)

input <- read_lines(file = "inputs/2024/03.txt")

Part One

valid_input <- input |>
    str_extract_all(pattern = "mul\\(\\d+,\\d+\\)") |> 
    list_c()

valid_input |> 
    tibble(numbers = str_extract_all(valid_input, pattern = "\\d+")) |> 
    unnest_wider(numbers, names_sep = "_") |> 
    mutate(across(starts_with("numbers_"), as.integer),
           product = numbers_1 * numbers_2) |> 
    summarise(total = sum(product)) |> 
    pull(total) |> 
    cat()
## 167650499

Part Two

valid_input <- input |>
    str_extract_all(pattern = "mul\\(\\d+,\\d+\\)|do\\(\\)|don't\\(\\)") |> 
    list_c() |> 
    str_c(collapse = " ") |> 
    str_split_1(pattern = " (?=do\\(\\)|don't\\(\\))") |>  
    keep(\(x) !str_detect(x, pattern = "^don't")) |> 
    str_remove_all(pattern = "do\\(\\) ") |> 
    str_c(collapse = " ") |> 
    str_split_1(pattern = " ")

valid_input |> 
    tibble(numbers = str_extract_all(valid_input, pattern = "\\d+")) |> 
    unnest_wider(numbers, names_sep = "_") |> 
    mutate(across(starts_with("numbers_"), as.integer),
           product = numbers_1 * numbers_2) |>
    summarise(total = sum(product)) |> 
    pull(total) |> 
    cat()
## 95846796