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 d32cd88acd6b005a1c5cd24115b77e3f2ca36690
parent 73884c8c0620108bf6ceb73f153bcaf59eaa8309
Author: Eamon Caddigan <ec@eamoncaddigan.net>
Date:   Mon,  8 Dec 2025 13:34:58 -0800

Solve day 07, part 2

Diffstat:
Msrc/day07.R | 27+++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/day07.R b/src/day07.R @@ -39,36 +39,47 @@ rshift <- function(x, fill = vector(mode = class(x), length = 1)) { trace_beams_one_step <- function(manifold_row, beams_in) { # This returns the number of splits as well as the updated beams in order to # solve part 1 - splits <- manifold_row == "^" & beams_in + splits <- (manifold_row == "^") * beams_in list( - num_splits = sum(splits), - beams_out = manifold_row == "S" | manifold_row == "." & beams_in | - lshift(splits) | rshift(splits) + num_splits = sum(splits > 0), + beams_out = (manifold_row == "S") + ((manifold_row == ".") * beams_in) + + lshift(splits) + rshift(splits) ) } -count_splits <- function(manifold) { +trace_beams <- function(manifold) { num_splits <- 0 - beams <- rep(FALSE, ncol(manifold)) + beams <- rep(0.0, ncol(manifold)) for (i in seq_len(nrow(manifold))) { res <- trace_beams_one_step(manifold[i, ], beams) num_splits <- num_splits + res$num_splits beams <- res$beams_out } - num_splits + list(num_splits = num_splits, beams_out = beams) } part1 <- function(input_lines) { - count_splits(parse_input(input_lines)) + trace_beams(parse_input(input_lines))$num_splits } test_part1 <- function() { stopifnot(part1(test_input) == 21) } +part2 <- function(input_lines) { + sum(trace_beams(parse_input(input_lines))$beams_out) +} + +test_part2 <- function() { + stopifnot(part2(test_input) == 40) +} + main <- function() { + # It's not remotely efficient to solve the puzzle twice, but it's fine test_part1() cat("Part 1 solution: ", part1(puzzle_input), "\n") + test_part2() + cat(sprintf("Part 2 solution: %0.0f\n", part2(puzzle_input))) } main()