diff options
Diffstat (limited to '2024/05')
-rw-r--r-- | 2024/05/rust/src/main.rs | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/2024/05/rust/src/main.rs b/2024/05/rust/src/main.rs index 387b301..50c9707 100644 --- a/2024/05/rust/src/main.rs +++ b/2024/05/rust/src/main.rs @@ -1,39 +1,37 @@ #![feature(slice_split_once)] use std::cmp::Ordering; -use std::collections::BinaryHeap; +use std::collections::HashSet; use std::io; fn main() -> io::Result<()> { let mut lines = io::stdin().lines().flatten(); - let mut heap = BinaryHeap::<(u16, u16)>::new(); + let mut heap = HashSet::<(u16, u16)>::new(); while let Some(s) = lines.next() { if let Some((a, b)) = s.split_once('|') { - heap.push((a.parse().unwrap(), b.parse().unwrap())); + heap.insert((a.parse().unwrap(), b.parse().unwrap())); } else { break; } } - let order = heap.into_sorted_vec(); - let mut silver = 0; - let mut gold = 0; + let mut silver: usize = 0; + let mut gold: usize = 0; for line in lines { let mut nums: Vec<u16> = line.split(',').map(|n| n.parse().unwrap()).collect(); let presort = nums.clone(); let mid = nums.len() / 2; - - nums.sort_unstable_by(|&a, &b| match order.binary_search(&(a, b)) { - Ok(_) => Ordering::Less, - Err(_) => Ordering::Greater, + nums.sort_unstable_by(|&a, &b| match heap.contains(&(a, b)) { + true => Ordering::Less, + false => Ordering::Greater, }); if nums.iter().eq(presort.iter()) { - silver += presort[mid]; + silver += presort[mid] as usize; } else { - gold += nums[mid]; + gold += nums[mid] as usize; } } |