Skip to content

Commit eeb6a8a

Browse files
committed
A is fixed size?
1 parent e999318 commit eeb6a8a

File tree

1 file changed

+37
-38
lines changed

1 file changed

+37
-38
lines changed

src/day17.rs

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,27 @@ static mut RESULT: [u8; 128] = [0; 128];
1818
pub fn part1(s: &str) -> &'static str {
1919
unsafe {
2020
let s = s.as_bytes();
21-
let mut i = 13;
22-
let mut a = (*s.get_unchecked(12) - b'0') as u64;
23-
while *s.get_unchecked(i) != b'\n' {
24-
a *= 10;
25-
a += (*s.get_unchecked(i) - b'0') as u64;
26-
i += 1;
27-
}
28-
i += 39;
21+
let mut a = (*s.get_unchecked(12) as u64) * 10000000
22+
+ (*s.get_unchecked(13) as u64) * 1000000
23+
+ (*s.get_unchecked(14) as u64) * 100000
24+
+ (*s.get_unchecked(15) as u64) * 10000
25+
+ (*s.get_unchecked(16) as u64) * 1000
26+
+ (*s.get_unchecked(17) as u64) * 100
27+
+ (*s.get_unchecked(18) as u64) * 10
28+
+ (*s.get_unchecked(19) as u64) * 1
29+
- (b'0' as u64 * 11111111);
30+
31+
const I: usize = 59;
2932

30-
let x = (*s.get_unchecked(i + 6) - b'0') as u64;
33+
let x = (*s.get_unchecked(I + 6) - b'0') as u64;
3134

32-
let o1 = *s.get_unchecked(i + 12);
33-
let o3 = *s.get_unchecked(i + 20);
35+
let o1 = *s.get_unchecked(I + 12);
36+
let o3 = *s.get_unchecked(I + 20);
3437

3538
let y = match (o1, o3) {
36-
(b'1', _) => *s.get_unchecked(i + 14) - b'0',
37-
(_, b'1') => *s.get_unchecked(i + 22) - b'0',
38-
_ => *s.get_unchecked(i + 18) - b'0',
39+
(b'1', _) => *s.get_unchecked(I + 14) - b'0',
40+
(_, b'1') => *s.get_unchecked(I + 22) - b'0',
41+
_ => *s.get_unchecked(I + 18) - b'0',
3942
} as u64;
4043

4144
let result_ptr = (&raw mut RESULT).cast::<u8>();
@@ -136,56 +139,52 @@ pub fn part2(s: &str) -> u64 {
136139
unsafe {
137140
let s = s.as_bytes();
138141

139-
let mut i = 13;
140-
while *s.get_unchecked(i) != b'\n' {
141-
i += 1;
142-
}
143-
i += 39;
142+
const I: usize = 59;
144143

145-
let x = (*s.get_unchecked(i + 6) - b'0') as usize;
144+
let x = (*s.get_unchecked(I + 6) - b'0') as usize;
146145

147-
let o1 = *s.get_unchecked(i + 12);
148-
let o3 = *s.get_unchecked(i + 20);
146+
let o1 = *s.get_unchecked(I + 12);
147+
let o3 = *s.get_unchecked(I + 20);
149148

150149
let a = match (o1, o3) {
151150
(b'1', b'0') => {
152-
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
153-
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
151+
let y = (*s.get_unchecked(I + 14) - b'0') as usize;
152+
let z = (*s.get_unchecked(I + 18) - b'0') as usize;
154153
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 0)
155154
}
156155
(b'1', b'5') => {
157-
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
158-
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
156+
let y = (*s.get_unchecked(I + 14) - b'0') as usize;
157+
let z = (*s.get_unchecked(I + 18) - b'0') as usize;
159158
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 1)
160159
}
161160
(b'1', b'4') => {
162-
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
163-
let z = (*s.get_unchecked(i + 22) - b'0') as usize;
161+
let y = (*s.get_unchecked(I + 14) - b'0') as usize;
162+
let z = (*s.get_unchecked(I + 22) - b'0') as usize;
164163
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 2)
165164
}
166165
(b'0', b'4') => {
167-
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
168-
let z = (*s.get_unchecked(i + 22) - b'0') as usize;
166+
let y = (*s.get_unchecked(I + 18) - b'0') as usize;
167+
let z = (*s.get_unchecked(I + 22) - b'0') as usize;
169168
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 3)
170169
}
171170
(b'0', b'1') => {
172-
let y = (*s.get_unchecked(i + 22) - b'0') as usize;
173-
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
171+
let y = (*s.get_unchecked(I + 22) - b'0') as usize;
172+
let z = (*s.get_unchecked(I + 18) - b'0') as usize;
174173
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 4)
175174
}
176175
(b'4', b'0') => {
177-
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
178-
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
176+
let y = (*s.get_unchecked(I + 18) - b'0') as usize;
177+
let z = (*s.get_unchecked(I + 14) - b'0') as usize;
179178
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 5)
180179
}
181180
(b'4', b'5') => {
182-
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
183-
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
181+
let y = (*s.get_unchecked(I + 18) - b'0') as usize;
182+
let z = (*s.get_unchecked(I + 14) - b'0') as usize;
184183
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 6)
185184
}
186185
(b'4', b'1') => {
187-
let y = (*s.get_unchecked(i + 22) - b'0') as usize;
188-
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
186+
let y = (*s.get_unchecked(I + 22) - b'0') as usize;
187+
let z = (*s.get_unchecked(I + 14) - b'0') as usize;
189188
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 7)
190189
}
191190
_ => unreachable_unchecked(),

0 commit comments

Comments
 (0)