Files
aoc/2025/03/p1.rs
2025-12-04 01:26:01 +01:00

35 lines
941 B
Rust

use std::cmp::Ordering;
fn cmp_with_eq_as_gt<T: Ord>(a: &T, b: &T) -> Ordering {
let order = a.cmp(b);
if order == Ordering::Equal {
Ordering::Greater
} else {
order
}
}
#[unsafe(no_mangle)]
fn challenge_usize(buf: &[u8]) -> usize {
let mut total_joltage = 0;
let s = unsafe { str::from_utf8_unchecked(buf) };
for array in s.trim().split('\n') {
let bats = array.as_bytes();
let bats_but_last = &bats[0..(bats.len() - 1)];
let first_dig = bats_but_last
.iter()
.enumerate()
.max_by(|a, b| cmp_with_eq_as_gt(a.1, b.1))
.unwrap();
let last_dig = bats[(first_dig.0 + 1)..].iter().max().unwrap();
// println!("-->> {first_dig:?} {last_dig}");
let arr_max_jolts = ((first_dig.1 - b'0') * 10) + (last_dig - b'0');
total_joltage += Into::<usize>::into(arr_max_jolts);
}
total_joltage
}