— R Day 9 Part 1 —
solve_day9_part1 <- function(input) {
seqs <- stringi::stri_extract_all(input, regex = "\\-*\\d+")
seqs <- lapply(seqs, as.numeric)
values <- lapply(seqs, extrapolate_value)
sum(unlist(values))
}
extrapolate_value <- function(sequence) {
diffs <- vector("list", length(sequence))
diffs[[1]] <- diff(sequence)
i <- 1
while (any(diffs[[i]] != 0)) {
next_i <- i + 1
diffs[[next_i]] <- diff(diffs[[i]])
i <- next_i
}
diffs <- diffs[!vapply(diffs, is.null, logical(1))]
last_diff <- rev(lapply(diffs, \(x) x[length(x)]))
new_diff <- rep(0, length(last_diff))
for (i in seq_along(last_diff[-length(last_diff)])) {
new_diff[[i + 1]] <- last_diff[[i + 1]] + new_diff[[i]]
}
sequence[[length(sequence)]] + new_diff[[length(new_diff)]]
}
Run
aoc_source(day = 9, part = 1)
input = aoc_read(day = 9)
aoc_run(solve_day9_part1(input))
Elapsed: 0.022 seconds
Memory: 1034 KB
— R Day 9 Part 2 —
solve_day9_part2 <- function(input) {
seqs <- stringi::stri_extract_all(input, regex = "\\-*\\d+")
seqs <- lapply(seqs, as.numeric)
values <- lapply(seqs, extrapolate_value)
sum(unlist(values))
}
extrapolate_value <- function(sequence) {
diffs <- vector("list", length(sequence))
diffs[[1]] <- diff(sequence)
i <- 1
while (any(diffs[[i]] != 0)) {
next_i <- i + 1
diffs[[next_i]] <- diff(diffs[[i]])
i <- next_i
}
diffs <- diffs[!vapply(diffs, is.null, logical(1))]
first_diffs <- rev(lapply(diffs, \(x) x[1]))
new_diffs <- rep(0, length(first_diffs))
for (i in seq_along(first_diffs[-length(first_diffs)])) {
new_diffs[[i + 1]] <- first_diffs[[i + 1]] - new_diffs[[i]]
}
sequence[[1]] - new_diffs[[length(new_diffs)]]
}
Run
aoc_source(day = 9, part = 2)
input = aoc_read(day = 9)
aoc_run(solve_day9_part2(input))
Elapsed: 0.02 seconds
Memory: 556 KB
Back to top