pub fn part_1(input: &String) -> String {
    let elves: Vec<&str> = input.split("\n\n").collect();

    let mut highest_calorie_count: u64 = 0;

    for meals in elves.iter() {
        let mut elf_calorie_count= 0;

        for meal in meals.split_whitespace() {
            elf_calorie_count += meal.parse().unwrap_or(0);
        }

        if elf_calorie_count > highest_calorie_count {
            highest_calorie_count = elf_calorie_count;
        }
    }

    format!("{highest_calorie_count}")
}

pub fn part_2(input: &String) -> u64 {
    let mut elf_calorie_counts: Vec<u64> = input.split("\n\n").map(|elf| {
        elf.split_whitespace().map(|meal| meal.parse().unwrap_or(0)).sum()
    }).collect();

    elf_calorie_counts.sort_unstable();

    let start = elf_calorie_counts.len() - 3;
    let top_3 = elf_calorie_counts.drain(start..);

    top_3.sum()
}