use iter_first_max::IterFirstMaxExt; pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; puzzle.lines().for_each(|battery_bank| { let batteries = battery_bank .chars() .map(|c| c as u8 - 0x30) .collect::>(); let (i, biggest_battery) = batteries .iter() .enumerate() .first_max_by_key(|(_, v)| *v) .unwrap(); solution += if i < battery_bank.len() - 1 { 10 * biggest_battery + batteries[i + 1..].iter().max().unwrap() } else { 10 * batteries[..i].iter().max().unwrap() + biggest_battery } as u64; }); solution }