aoc2022/src/days/day1.rs
2022-12-03 13:40:15 -06:00

50 lines
1.1 KiB
Rust

use aoc_runner_derive::{aoc, aoc_generator};
#[aoc_generator(day1)]
fn generator(s: &str) -> Vec<Vec<u32>> {
let mut iter = s.lines();
let mut res = Vec::new();
let mut current = Vec::new();
loop {
match iter.next() {
Some("") => {
res.push(current);
current = Vec::new();
}
Some(s) => {
current.push(s.parse::<u32>().unwrap());
}
None => {
res.push(current);
return res;
}
}
}
}
#[aoc(day1, part1)]
fn part1(input: &[Vec<u32>]) -> u32 {
input.iter().map(|v| v.iter().sum()).max().unwrap()
}
#[aoc(day1, part2)]
fn part2(input: &[Vec<u32>]) -> u32 {
let mut res = (0, 0, 0);
for mut item in input.iter().map(|v| v.iter().sum()) {
if res.0 < item {
std::mem::swap(&mut item, &mut res.0)
}
if res.1 < item {
std::mem::swap(&mut item, &mut res.1)
}
if res.2 < item {
std::mem::swap(&mut item, &mut res.2)
}
}
res.0 + res.1 + res.2
}