advent_of_code_2025

My (attempted) solutions to the 2025 Advent of Code
git clone https://git.eamoncaddigan.net/advent_of_code_2025.git
Log | Files | Refs | README

commit ce1530a4675d326b66cadabe566364326c963740
parent d2c86eae09a49a747e13e8f050b8fcbc163a44b2
Author: Eamon Caddigan <ec@eamoncaddigan.net>
Date:   Wed,  3 Dec 2025 09:57:57 -0800

Solve day 02, part 2

Diffstat:
Msrc/day03.R | 46++++++++++++++++++++++++++++++++++++----------
1 file changed, 36 insertions(+), 10 deletions(-)

diff --git a/src/day03.R b/src/day03.R @@ -16,33 +16,59 @@ parse_input <- function(input_lines) { lapply(as.numeric) } -choose_batteries <- function(battery_bank) { - first_battery_loc <- which.max(battery_bank[1:(length(battery_bank) - 1)]) - second_battery_loc <- first_battery_loc + - which.max(battery_bank[(first_battery_loc + 1):length(battery_bank)]) - c(first_battery_loc, second_battery_loc) +choose_batteries <- function(battery_bank, num_batteries) { + choose_batteries_iter <- function(batteries, bank_rema, num_batt_rema) { + if (num_batt_rema == 0) { + batteries + } else { + battery_loc <- which.max( + bank_rema[1:(length(bank_rema) - num_batt_rema + 1)] + ) + choose_batteries_iter( + c(batteries, bank_rema[battery_loc]), + bank_rema[(battery_loc + 1):length(bank_rema)], + num_batt_rema - 1 + ) + } + } + choose_batteries_iter(NULL, battery_bank, num_batteries) } -use_batteries <- function(battery_bank, battery_choice) { - battery_bank[battery_choice] |> +use_batteries <- function(batteries) { + batteries |> paste(collapse = "") |> as.numeric() } -part1 <- function(input_string) { - input_string |> +solve_puzzle_for_n <- function(input_lines, n) { + input_lines |> parse_input() |> - (\(x) mapply(use_batteries, x, lapply(x, choose_batteries)))() |> + lapply(\(x) choose_batteries(x, n)) |> + vapply(use_batteries, numeric(1)) |> sum() } +part1 <- function(input_lines) { + solve_puzzle_for_n(input_lines, 2) +} + test_part1 <- function() { stopifnot(part1(test_input) == 357) } +part2 <- function(input_lines) { + solve_puzzle_for_n(input_lines, 12) +} + +test_part2 <- function() { + stopifnot(part2(test_input) == 3121910778619) +} + main <- function() { test_part1() cat("Part 1 solution: ", part1(puzzle_input), "\n") + test_part2() + cat("Part 2 solution: ", sprintf("%0.0f", part2(puzzle_input)), "\n") } main()