Skip to content

Commit 8b718a6

Browse files
committed
Use map in part1
1 parent 732f947 commit 8b718a6

File tree

1 file changed

+40
-40
lines changed

1 file changed

+40
-40
lines changed

src/day24.rs

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ impl Gate {
102102

103103
#[inline(always)]
104104
pub fn part1_inner(s: &[u8]) -> u64 {
105-
let mut gates_map = [0u16; 26 * 26 * 26];
105+
let mut gates_map = heapless::FnvIndexMap::<u16, u16, 512>::new();
106106

107107
let mut gates = heapless::Vec::<Gate, 512>::from_slice(
108108
&[Gate {
@@ -134,19 +134,19 @@ pub fn part1_inner(s: &[u8]) -> u64 {
134134
+ (s.get_unchecked(i + len + 13) - b'a') as u16 * 26
135135
+ (s.get_unchecked(i + len + 14) - b'a') as u16;
136136

137-
let real_this = *gates_map.get_unchecked(this as usize);
138-
if real_this == 0 {
139-
let i = gates.len() as u16;
140-
gates.push_unchecked(Gate {
141-
inp_1: false,
142-
out_1: 0,
143-
out_2: 0,
144-
state: State::Empty,
145-
});
146-
*gates_map.get_unchecked_mut(this as usize) = i;
147-
i
148-
} else {
149-
real_this
137+
match gates_map.entry(this) {
138+
heapless::Entry::Occupied(occupied_entry) => *occupied_entry.get(),
139+
heapless::Entry::Vacant(vacant_entry) => {
140+
let i = gates.len() as u16;
141+
gates.push_unchecked(Gate {
142+
inp_1: false,
143+
out_1: 0,
144+
out_2: 0,
145+
state: State::Empty,
146+
});
147+
vacant_entry.insert(i).unwrap_unchecked();
148+
i
149+
}
150150
}
151151
};
152152

@@ -182,33 +182,33 @@ pub fn part1_inner(s: &[u8]) -> u64 {
182182
let from2 = (s.get_unchecked(i + len + 5) - b'a') as u16 * 26 * 26
183183
+ (s.get_unchecked(i + len + 6) - b'a') as u16 * 26
184184
+ (s.get_unchecked(i + len + 7) - b'a') as u16;
185-
let real_from1 = *gates_map.get_unchecked(from1 as usize);
186-
let from1 = if real_from1 == 0 {
187-
let i = gates.len() as u16;
188-
gates.push_unchecked(Gate {
189-
inp_1: false,
190-
out_1: 0,
191-
out_2: 0,
192-
state: State::Empty,
193-
});
194-
*gates_map.get_unchecked_mut(from1 as usize) = i;
195-
i
196-
} else {
197-
real_from1
185+
let from1 = match gates_map.entry(from1) {
186+
heapless::Entry::Occupied(occupied_entry) => *occupied_entry.get(),
187+
heapless::Entry::Vacant(vacant_entry) => {
188+
let i = gates.len() as u16;
189+
gates.push_unchecked(Gate {
190+
inp_1: false,
191+
out_1: 0,
192+
out_2: 0,
193+
state: State::Empty,
194+
});
195+
vacant_entry.insert(i).unwrap_unchecked();
196+
i
197+
}
198198
};
199-
let real_from2 = *gates_map.get_unchecked(from2 as usize);
200-
let from2 = if real_from2 == 0 {
201-
let i = gates.len() as u16;
202-
gates.push_unchecked(Gate {
203-
inp_1: false,
204-
out_1: 0,
205-
out_2: 0,
206-
state: State::Empty,
207-
});
208-
*gates_map.get_unchecked_mut(from2 as usize) = i;
209-
i
210-
} else {
211-
real_from2
199+
let from2 = match gates_map.entry(from2) {
200+
heapless::Entry::Occupied(occupied_entry) => *occupied_entry.get(),
201+
heapless::Entry::Vacant(vacant_entry) => {
202+
let i = gates.len() as u16;
203+
gates.push_unchecked(Gate {
204+
inp_1: false,
205+
out_1: 0,
206+
out_2: 0,
207+
state: State::Empty,
208+
});
209+
vacant_entry.insert(i).unwrap_unchecked();
210+
i
211+
}
212212
};
213213

214214
gates.get_unchecked_mut(from1 as usize).add_out(this);

0 commit comments

Comments
 (0)