summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2024/05/rust/src/main.rs22
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;
}
}