blob: 387b3012a21873064145f98166113fa448b1c767 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#![feature(slice_split_once)]
use std::cmp::Ordering;
use std::collections::BinaryHeap;
use std::io;
fn main() -> io::Result<()> {
let mut lines = io::stdin().lines().flatten();
let mut heap = BinaryHeap::<(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()));
} else {
break;
}
}
let order = heap.into_sorted_vec();
let mut silver = 0;
let mut gold = 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,
});
if nums.iter().eq(presort.iter()) {
silver += presort[mid];
} else {
gold += nums[mid];
}
}
println!("silver: {silver}");
println!("gold: {gold}");
return Ok(());
}
|