Day 11

Advent of Code: Worked Solutions

About
Date

December 11, 2024

Setup

# Libraries
library(tidyverse)

# Read input from file
input <- read_lines("../input/day11.txt", skip_empty_rows = TRUE) |> 
  str_split_1(" ") |> 
  as.integer()

Part 1

Create blink functions:

blink <- function(x) {
  char <- format(x, scientific = FALSE)
  n <- str_length(char)
  
  if (x == 0) 
    1
  else if (n %% 2 == 0)
    parse_number(c(
      str_sub(char, 1, n / 2),
      str_sub(char, n / 2 + 1, n)
    ))
  else 
    x * 2024
}

blink_n <- function(df, n) {
  if (n == 0)
    return(sum(df$n))
  
  df |> 
    mutate(stones = map(stones, blink)) |> 
    unnest(stones) |> 
    summarize(n = sum(n), .by = stones) |> 
    blink_n(n - 1)
}

Run blink function 25 times on puzzle input:

df <- tibble(stones = input, n = 1)

blink_n(df, 25)
[1] 193899

Part 2

Run blink function 75 times on puzzle input:

blink_n(df, 75) |> 
  format(scientific = FALSE)
[1] "229682160383225"