Day 2, fortunately, proved easier than day 1. The puzzle gives results of draws of red, green, and blue items from bags. Part 1 asks to find which draws were possible given certain numbers of each item. Part 2 asks to find the minimum number of items to make each draw valid.
The computations proved trivial. Most of the challenge came in parsing the input, which looked like this:
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
I used R for vectorized arithmetic. I ended up using several rounds of string splitting to extract the data:
<- function(pairs) {
parse_pairs <- strsplit(pairs, " ") |> unlist()
splits <- length(splits)
n <- seq(2, n, 2)
even # Since values come in value-color pairs
<- colors
result <- splits[even]
present <- strtoi(splits[even - 1])
result[present]
result
}
<- function(line) {
parse_line <- sub("^Game \\d+:\\s+", "", line)
line # browser()
<- strsplit(line, ";\\s+") |> unlist()
draws <- strsplit(draws, ",\\s+")
pairs lapply(pairs, parse_pairs) |>
do.call(what = cbind)
}