mirror of
https://github.com/Noratrieb/advent-of-code.git
synced 2026-01-14 17:45:02 +01:00
optimize day 1 2022
This commit is contained in:
parent
e153ec51cd
commit
94a69f00d5
1 changed files with 34 additions and 2 deletions
|
|
@ -1,3 +1,5 @@
|
|||
#![feature(iter_array_chunks)]
|
||||
|
||||
use helper::{parse_unwrap, Day, Variants};
|
||||
|
||||
pub fn main() {
|
||||
|
|
@ -12,7 +14,8 @@ helper::define_variants! {
|
|||
basic => crate::part1;
|
||||
}
|
||||
part2 {
|
||||
basic => crate::part2;
|
||||
basic => crate::part2_basic;
|
||||
no_alloc => crate::part2_no_alloc;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -35,7 +38,7 @@ fn part1(input: &str) -> u64 {
|
|||
.unwrap()
|
||||
}
|
||||
|
||||
fn part2(input: &str) -> u64 {
|
||||
fn part2_basic(input: &str) -> u64 {
|
||||
let mut all = input
|
||||
.trim()
|
||||
.split("\n\n")
|
||||
|
|
@ -45,6 +48,35 @@ fn part2(input: &str) -> 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! {
|
||||
day01 Day01;
|
||||
part1 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue