day14: simple Vec lookup is faster than HashMap since the cycle is short
This commit is contained in:
		| @@ -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)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user