2022-12-01 14:25:17 +01:00
#![ feature(binary_heap_into_iter_sorted, test) ]
2022-12-01 06:12:16 +01:00
extern crate test ;
2022-12-01 12:07:38 +01:00
use std ::collections ::BinaryHeap ;
2022-12-01 06:12:16 +01:00
use aoc2022 ::{ boilerplate , common ::* } ;
2022-12-05 11:35:34 +01:00
const DAY : usize = 1 ;
2022-12-01 14:25:17 +01:00
type Parsed = BinaryHeap < usize > ;
2022-12-01 06:12:16 +01:00
fn parse_input ( raw : & str ) -> Parsed {
raw . split ( " \n \n " ) . map ( | elf | elf . lines ( ) . map ( parse_num ::< usize > ) . sum ( ) ) . collect ( )
}
fn part1 ( parsed : & Parsed ) -> usize {
2022-12-01 14:25:17 +01:00
* parsed . peek ( ) . unwrap ( )
2022-12-01 06:12:16 +01:00
}
fn part2 ( parsed : & Parsed ) -> usize {
2022-12-01 14:25:17 +01:00
parsed . clone ( ) . into_iter_sorted ( ) . take ( 3 ) . sum ( )
2022-12-01 06:12:16 +01:00
}
boilerplate! {
2022-12-09 12:50:12 +01:00
TEST_INPUT = = " \
1000
2022-12-01 06:12:16 +01:00
2000
3000
4000
5000
6000
7000
8000
9000
10000 " ,
tests : {
part1 : { TEST_INPUT = > 24000 } ,
part2 : { TEST_INPUT = > 45000 } ,
} ,
bench1 = = 72017 ,
bench2 = = 212520 ,
2022-12-01 14:25:17 +01:00
bench_parse : BinaryHeap ::len = > 242 ,
2022-12-01 06:12:16 +01:00
}