optimize day 1 2022

This commit is contained in:
nora 2024-11-10 16:59:15 +01:00
parent e153ec51cd
commit 94a69f00d5

View file

@ -1,3 +1,5 @@
#![feature(iter_array_chunks)]
use helper::{parse_unwrap, Day, Variants}; use helper::{parse_unwrap, Day, Variants};
pub fn main() { pub fn main() {
@ -12,7 +14,8 @@ helper::define_variants! {
basic => crate::part1; basic => crate::part1;
} }
part2 { part2 {
basic => crate::part2; basic => crate::part2_basic;
no_alloc => crate::part2_no_alloc;
} }
} }
@ -35,7 +38,7 @@ fn part1(input: &str) -> u64 {
.unwrap() .unwrap()
} }
fn part2(input: &str) -> u64 { fn part2_basic(input: &str) -> u64 {
let mut all = input let mut all = input
.trim() .trim()
.split("\n\n") .split("\n\n")
@ -45,6 +48,35 @@ fn part2(input: &str) -> u64 {
all[(all.len() - 3)..].iter().copied().sum::<u64>() all[(all.len() - 3)..].iter().copied().sum::<u64>()
} }
fn part2_no_alloc(input: &str) -> u64 {
let mut biggest = [0; 3];
let elves = input
.trim()
.split("\n\n")
.map(|elf| elf.trim().split("\n").map(parse_unwrap).sum::<u64>());
for elf in elves {
if elf > biggest[0] {
if elf > biggest[1] {
if elf > biggest[2] {
biggest[0] = biggest[1];
biggest[1] = biggest[2];
biggest[2] = elf;
} else {
biggest[0] = biggest[1];
biggest[1] = elf;
}
} else {
biggest[0] = elf;
}
}
}
biggest[0] + biggest[1] + biggest[2]
}
helper::tests! { helper::tests! {
day01 Day01; day01 Day01;
part1 { part1 {