Skip to content

Commit b6e6488

Browse files
committed
p3160
1 parent 21baab6 commit b6e6488

File tree

5 files changed

+90
-3
lines changed

5 files changed

+90
-3
lines changed

Cargo.lock

+32
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ edition = "2021"
77

88
[dependencies]
99
time = "0.3.36"
10+
serde = { version = "1.0", features = ["derive"] }
11+
serde_json = "1.0"

src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
mod p1726;
1+
mod p3160;
22

33
pub fn main() {
4-
p1726::run();
4+
p3160::run();
55
}

src/p3160.rs

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
use std::{collections::HashMap, env, fs};
2+
3+
pub fn run() {
4+
for i in [
5+
(4, vec![vec![1,4],vec![2,5],vec![1,3],vec![3,4]]),
6+
(4, vec![vec![0,1],vec![1,2],vec![2,2],vec![3,4],vec![4,5]]),
7+
// (1000000000, serde_json::from_str::<Vec<Vec<i32>>>(&fs::read_to_string("./src/too_damn_long.txt").unwrap()).unwrap())
8+
] {
9+
println!("{:?}", query_results(i.0, i.1));
10+
}
11+
}
12+
13+
pub fn query_results(limit: i32, queries: Vec<Vec<i32>>) -> Vec<i32> {
14+
let mut map: HashMap<i32, i32> = HashMap::new();
15+
let mut colour_amounts = HashMap::new();
16+
let mut result = vec![];
17+
18+
for q in queries {
19+
let previous = match map.get_mut(&q[0]) {
20+
Some(n) => {
21+
*n
22+
},
23+
None => {
24+
map.insert(q[0], 0);
25+
0
26+
}
27+
};
28+
let current = q[1];
29+
30+
if previous != 0 {
31+
*colour_amounts.get_mut(&previous).unwrap() -= 1;
32+
if *colour_amounts.get(&previous).unwrap() <= 0 {
33+
colour_amounts.remove(&previous);
34+
}
35+
}
36+
37+
match colour_amounts.get_mut(&current) {
38+
Some(n) => {
39+
*n += 1;
40+
},
41+
None => {
42+
colour_amounts.insert(current, 1);
43+
}
44+
};
45+
46+
// *previous = current;
47+
*map.get_mut(&q[0]).unwrap() = current;
48+
49+
result.push(colour_amounts.len() as i32);
50+
}
51+
52+
result
53+
}

src/too_damn_long.txt

+1-1
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)