library(tidyverse)
library(scales)
input <- read_lines(file = "inputs/2015/06.txt")Day 6: Probably a Fire Hazard
Part One
instructions <- tibble(raw = input) |>
mutate(
instruction = str_extract(raw, "toggle|turn on|turn off"),
coords = str_extract_all(raw, "[0-9]+")
) |>
unnest_wider(coords, names_sep = "_") |>
rename(
x_start = coords_1,
y_start = coords_2,
x_end = coords_3,
y_end = coords_4
) |>
mutate(across(matches("^[xy]"), \(x) as.integer(x) + 1L)) |> # Convert to 1-indexed for R
mutate(
x_range = map2(x_start, x_end, \(a, b) a:b),
y_range = map2(y_start, y_end, \(a, b) a:b)
)
action <- function(instruction, x_range, y_range, grid) {
grid[x_range, y_range] <- switch(
instruction,
"toggle" = !grid[x_range, y_range],
"turn on" = TRUE,
"turn off" = FALSE
)
return(grid)
}
lights <- instructions |>
mutate(
grid = accumulate(
.x = row_number(),
.f = \(grid, i) action(
instruction = instruction[i],
x_range = x_range[[i]],
y_range = y_range[[i]],
grid = grid
),
.init = matrix(FALSE, 1e3, 1e3)
) |> tail(-1) # Remove the initial grid (.init) from results
) |>
mutate(lights_on = map_int(grid, sum))
total_lights_on <- lights |> tail(1) |> pull(lights_on)
cat("Total lights on:", total_lights_on, "\n")
## Total lights on: 543903
Part Two
new_action <- function(instruction, x_range, y_range, grid) {
grid[x_range, y_range] <- switch(
instruction,
"toggle" = grid[x_range, y_range] + 2,
"turn on" = grid[x_range, y_range] + 1,
"turn off" = pmax(grid[x_range, y_range] - 1, 0)
)
return(grid)
}
brightness <- instructions |>
mutate(
grid = accumulate(
.x = row_number(),
.f = \(grid, i) new_action(
instruction = instruction[i],
x_range = x_range[[i]],
y_range = y_range[[i]],
grid = grid
),
.init = matrix(0, 1e3, 1e3)
) |> tail(-1) # Remove the initial grid (.init) from results
) |>
mutate(total_brightness = map_int(grid, sum))
total_brightness <- brightness |> tail(1) |> pull(total_brightness)
cat("Total brightness:", total_brightness, "\n")
## Total brightness: 14687245