use crate::util::parse::ParseExt; fn calories(input: &str) -> impl Iterator + '_ { input.split("\n\n").map(|set| set.u32s().sum()) } pub fn part1(input: &str) -> impl std::fmt::Display { calories(input).max().expect("must have one max") } pub fn part2(input: &str) -> impl std::fmt::Display { let mut items: Vec<_> = calories(input).collect(); items.sort_unstable(); items.iter().rev().take(3).sum::() } #[test] fn test_part1() { assert_eq!( "24000", part1("1000\n2000\n3000\n\n4000\n\n5000\n6000\n\n7000\n8000\n9000\n\n10000").to_string() ) } #[test] fn test_part2() { assert_eq!( "45000", part2("1000\n2000\n3000\n\n4000\n\n5000\n6000\n\n7000\n8000\n9000\n\n10000").to_string() ) }