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:
| M | src/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()