From 27ff0996cbd8047dee9326f05aebf3e61e7ad6f5 Mon Sep 17 00:00:00 2001 From: kageru Date: Tue, 8 Dec 2020 14:22:12 +0100 Subject: [PATCH] Optimize 2020/05 BinaryHeap go brrrr --- 2020/src/bin/day05.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/2020/src/bin/day05.rs b/2020/src/bin/day05.rs index 9df35e1..cbdd2f8 100644 --- a/2020/src/bin/day05.rs +++ b/2020/src/bin/day05.rs @@ -1,7 +1,7 @@ -#![feature(test, map_first_last)] +#![feature(test, map_first_last,binary_heap_into_iter_sorted)] extern crate test; use itertools::Itertools; -use std::{collections::BTreeSet, env}; +use std::{collections::BinaryHeap, env}; const NUM_ROWS: usize = 128; const NUM_COLS: usize = 8; @@ -32,20 +32,20 @@ fn calculate_id(p: &Position) -> usize { p.row * 8 + p.col } -fn collect_ids(s: &str) -> BTreeSet { +fn collect_ids(s: &str) -> BinaryHeap { s.lines().map(get_position).map(|p| calculate_id(&p)).collect() } -fn find_missing(ids: &BTreeSet) -> usize { - ids.iter().tuple_windows().find(|(&a, &b)| b - a == 2).unwrap().0 + 1 +fn find_missing(ids: BinaryHeap) -> usize { + ids.into_iter_sorted().tuple_windows().find(|(a, b)| a - b == 2).unwrap().0 - 1 } fn main() { let ids = collect_ids(&read_input()); - let p1 = ids.last().unwrap(); + let p1 = ids.peek().unwrap(); println!("Part 1: {}", p1); - let p2 = find_missing(&ids); + let p2 = find_missing(ids); println!("Part 2: {}", p2); } @@ -87,12 +87,12 @@ mod tests { #[bench] fn bench_part_1(b: &mut test::Bencher) { let raw = read_input(); - b.iter(|| assert_eq!(collect_ids(black_box(&raw)).last(), Some(&913))) + b.iter(|| assert_eq!(collect_ids(black_box(&raw)).peek(), Some(&913))) } #[bench] fn bench_part_2(b: &mut test::Bencher) { let ids = collect_ids(&read_input()); - b.iter(|| assert_eq!(find_missing(black_box(&ids)), 717)) + b.iter(|| assert_eq!(find_missing(black_box(ids.clone())), 717)) } }