|
1 | | -use std::hint::unreachable_unchecked; |
| 1 | +use std::{ |
| 2 | + hash::{BuildHasherDefault, Hasher}, |
| 3 | + hint::unreachable_unchecked, |
| 4 | +}; |
2 | 5 |
|
3 | 6 | use aoc_runner_derive::aoc; |
4 | 7 |
|
| 8 | +#[derive(Default)] |
| 9 | +struct NoHash(u64); |
| 10 | + |
| 11 | +impl Hasher for NoHash { |
| 12 | + fn finish(&self) -> u64 { |
| 13 | + self.0 |
| 14 | + } |
| 15 | + |
| 16 | + fn write(&mut self, bytes: &[u8]) { |
| 17 | + self.0 += bytes[0] as u64; |
| 18 | + } |
| 19 | + |
| 20 | + fn write_u16(&mut self, i: u16) { |
| 21 | + self.0 = i as u64; |
| 22 | + } |
| 23 | +} |
| 24 | + |
5 | 25 | #[aoc(day24, part1)] |
6 | 26 | pub fn part1(s: &str) -> u64 { |
7 | 27 | let s = s.as_bytes(); |
@@ -102,7 +122,7 @@ impl Gate { |
102 | 122 |
|
103 | 123 | #[inline(always)] |
104 | 124 | pub fn part1_inner(s: &[u8]) -> u64 { |
105 | | - let mut gates_map = heapless::FnvIndexMap::<u16, u16, 512>::new(); |
| 125 | + let mut gates_map = heapless::IndexMap::<u16, u16, BuildHasherDefault<NoHash>, 512>::default(); |
106 | 126 |
|
107 | 127 | let mut gates = heapless::Vec::<Gate, 512>::from_slice( |
108 | 128 | &[Gate { |
@@ -304,7 +324,7 @@ pub fn part2_inner(s: &[u8]) -> &'static str { |
304 | 324 |
|
305 | 325 | let mut inputs = [(0u16, 0u16); 45]; |
306 | 326 |
|
307 | | - let mut gates_map = heapless::FnvIndexMap::<u16, u16, 512>::new(); |
| 327 | + let mut gates_map = heapless::IndexMap::<u16, u16, BuildHasherDefault<NoHash>, 512>::default(); |
308 | 328 |
|
309 | 329 | let mut gates = heapless::Vec::<Gate, 512>::from_slice( |
310 | 330 | &[Gate { |
|
0 commit comments