aoc2022/src/bin/01.rs

64 lines
1.3 KiB
Rust

pub fn part_one(input: &str) -> Option<u32> {
let inlines = input.split("\n");
let mut count: u32 = 0;
let mut elves: Vec<u32> = vec![];
for l in inlines {
match l {
"" => { elves.push(count); count = 0},
_ => { count += l.parse::<u32>().unwrap() }
}
}
let mut largest = 0;
for e in elves {
if e > largest {
largest = e;
}
}
Some(largest)
}
pub fn part_two(input: &str) -> Option<u32> {
let inlines = input.split("\n");
let mut count: u32 = 0;
let mut elves: Vec<u32> = vec![];
for l in inlines {
match l {
"" => { elves.push(count); count = 0},
_ => { count += l.parse::<u32>().unwrap() }
}
}
elves.sort();
elves.reverse();
elves.truncate(3);
Some(elves.iter().sum::<u32>())
}
fn main() {
let input = &advent_of_code::read_file("inputs", 1);
advent_of_code::solve!(1, part_one, input);
advent_of_code::solve!(2, part_two, input);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_part_one() {
let input = advent_of_code::read_file("examples", 1);
assert_eq!(part_one(&input), Some(24000));
}
#[test]
fn test_part_two() {
let input = advent_of_code::read_file("examples", 1);
assert_eq!(part_two(&input), None);
}
}