aoc/year2025/
day03.rs

1//! # Lobby
2use std::mem::replace;
3
4pub fn parse(input: &str) -> Vec<&str> {
5    input.lines().collect()
6}
7
8pub fn part1(input: &[&str]) -> u64 {
9    solve::<2>(input)
10}
11
12pub fn part2(input: &[&str]) -> u64 {
13    solve::<12>(input)
14}
15
16fn solve<const N: usize>(input: &[&str]) -> u64 {
17    let mut batteries = [0; N];
18
19    input
20        .iter()
21        .map(|&bank| {
22            let end = bank.len() - N;
23            batteries.copy_from_slice(&bank.as_bytes()[end..]);
24
25            for mut next in bank[..end].bytes().rev() {
26                for battery in &mut batteries {
27                    if next < *battery {
28                        break;
29                    }
30                    next = replace(battery, next);
31                }
32            }
33
34            batteries.iter().fold(0, |joltage, &b| 10 * joltage + (b - b'0') as u64)
35        })
36        .sum()
37}