1
0
Files
AdventOfCode2025/src/solvers/lobby.rs
T
2026-02-06 00:15:56 +01:00

41 lines
1.3 KiB
Rust

use crate::solvers::Solver;
use std::io::BufRead;
pub struct Lobby {}
impl Lobby {
const PART1_MAX_BATTERIES: usize = 2;
const PART2_MAX_BATTERIES: usize = 12;
fn largest_joltage(bank: &str, max_batteries: usize) -> u64 {
let mut best = vec![0_u8; max_batteries];
for (i, d) in bank.bytes().map(|c| c - b'0').enumerate() {
let mut fill_index = max_batteries;
let skip = (max_batteries + i).saturating_sub(bank.len());
for (j, b) in best.iter_mut().skip(skip).enumerate() {
if *b < d {
*b = d;
fill_index = j + 1 + skip;
break;
}
}
best[fill_index..].fill(0);
}
u64::from(best.iter().fold(0, |acc: u64, &x| acc * 10 + u64::from(x)))
}
}
impl Solver for Lobby {
const PUZZLE_INDEX: u8 = 3;
const PUZZLE_NAME: &'static str = "Lobby";
fn process_data<R: BufRead>(&self, reader: R) -> (u64, u64) {
let mut joltages = (0, 0);
for line in reader.lines().map_while(Result::ok) {
joltages.0 += Self::largest_joltage(&line, Self::PART1_MAX_BATTERIES);
joltages.1 += Self::largest_joltage(&line, Self::PART2_MAX_BATTERIES);
}
joltages
}
}