day14: simple Vec lookup is faster than HashMap since the cycle is short
This commit is contained in:
parent
ca3254e1e1
commit
4f1f838d62
@ -1,5 +1,5 @@
|
|||||||
use ndarray::*;
|
use ndarray::*;
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
@ -162,14 +162,16 @@ impl<'a> Platform {
|
|||||||
|
|
||||||
// find the first loop, return the iteration count when we first saw it and when we saw it again
|
// find the first loop, return the iteration count when we first saw it and when we saw it again
|
||||||
fn find_loop(&mut self) -> (usize, usize) {
|
fn find_loop(&mut self) -> (usize, usize) {
|
||||||
let mut first_seen = HashMap::new();
|
let mut first_seen = Vec::new();
|
||||||
first_seen.insert(self.matrix.clone(), 0);
|
first_seen.push((self.matrix.clone(), 0));
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
loop {
|
loop {
|
||||||
self.roll_cycle();
|
self.roll_cycle();
|
||||||
i += 1;
|
i += 1;
|
||||||
if let Some(first_idx) = first_seen.insert(self.matrix.clone(), i) {
|
if let Some((_, first_idx)) = first_seen.iter().find(|(val, _)| *val == self.matrix) {
|
||||||
return (first_idx, i);
|
return (*first_idx, i);
|
||||||
|
} else {
|
||||||
|
first_seen.push((self.matrix.clone(), i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user