Skip to content

Commit f3b38dd

Browse files
committed
Remove seperate inner functions
1 parent e515d1d commit f3b38dd

File tree

1 file changed

+102
-107
lines changed

1 file changed

+102
-107
lines changed

src/day17.rs

Lines changed: 102 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -12,64 +12,60 @@ use aoc_runner_derive::aoc;
1212
// 5 5: out out b
1313
// 3 0: jnz a!=0 -> 0
1414

15-
#[aoc(day17, part1)]
16-
pub fn part1(s: &str) -> &'static str {
17-
unsafe { inner_part1(s.as_bytes()) }
18-
}
19-
2015
static mut RESULT: [u8; 128] = [0; 128];
2116

22-
#[target_feature(enable = "avx2,bmi1,bmi2,cmpxchg16b,lzcnt,movbe,popcnt")]
23-
unsafe fn inner_part1(s: &[u8]) -> &'static str {
24-
let mut i = 13;
25-
let mut a = (*s.get_unchecked(12) - b'0') as u64;
26-
while *s.get_unchecked(i) != b'\n' {
27-
a *= 10;
28-
a += (*s.get_unchecked(i) - b'0') as u64;
29-
i += 1;
30-
}
31-
i += 39;
32-
33-
let x = (*s.get_unchecked(i + 6) - b'0') as u64;
34-
35-
let o1 = *s.get_unchecked(i + 12);
36-
let o2 = *s.get_unchecked(i + 16);
37-
let o3 = *s.get_unchecked(i + 20);
38-
let o4 = *s.get_unchecked(i + 24);
39-
40-
let y = match (o1, o2, o3, o4) {
41-
(b'1', b'4', b'0', b'5') => *s.get_unchecked(i + 14) - b'0',
42-
(b'1', b'4', b'5', b'0') => *s.get_unchecked(i + 14) - b'0',
43-
(b'1', b'0', b'4', b'5') => *s.get_unchecked(i + 14) - b'0',
44-
(b'0', b'1', b'4', b'5') => *s.get_unchecked(i + 18) - b'0',
45-
(b'0', b'4', b'1', b'5') => *s.get_unchecked(i + 22) - b'0',
46-
(b'4', b'1', b'0', b'5') => *s.get_unchecked(i + 18) - b'0',
47-
(b'4', b'1', b'5', b'0') => *s.get_unchecked(i + 18) - b'0',
48-
(b'4', b'0', b'1', b'5') => *s.get_unchecked(i + 22) - b'0',
49-
_ => unreachable_unchecked(),
50-
} as u64;
51-
52-
let result_ptr = (&raw mut RESULT).cast::<u8>();
53-
let mut out_ptr = result_ptr;
54-
let result_ptr = result_ptr.cast_const();
55-
56-
while a != 0 {
57-
let b = a % 8;
58-
let b = b ^ x;
59-
let c = a >> b;
60-
let b = b ^ y ^ c;
17+
#[aoc(day17, part1)]
18+
pub fn part1(s: &str) -> &'static str {
19+
unsafe {
20+
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;
29+
30+
let x = (*s.get_unchecked(i + 6) - b'0') as u64;
31+
32+
let o1 = *s.get_unchecked(i + 12);
33+
let o2 = *s.get_unchecked(i + 16);
34+
let o3 = *s.get_unchecked(i + 20);
35+
let o4 = *s.get_unchecked(i + 24);
36+
37+
let y = match (o1, o2, o3, o4) {
38+
(b'1', b'4', b'0', b'5') => *s.get_unchecked(i + 14) - b'0',
39+
(b'1', b'4', b'5', b'0') => *s.get_unchecked(i + 14) - b'0',
40+
(b'1', b'0', b'4', b'5') => *s.get_unchecked(i + 14) - b'0',
41+
(b'0', b'1', b'4', b'5') => *s.get_unchecked(i + 18) - b'0',
42+
(b'0', b'4', b'1', b'5') => *s.get_unchecked(i + 22) - b'0',
43+
(b'4', b'1', b'0', b'5') => *s.get_unchecked(i + 18) - b'0',
44+
(b'4', b'1', b'5', b'0') => *s.get_unchecked(i + 18) - b'0',
45+
(b'4', b'0', b'1', b'5') => *s.get_unchecked(i + 22) - b'0',
46+
_ => unreachable_unchecked(),
47+
} as u64;
48+
49+
let result_ptr = (&raw mut RESULT).cast::<u8>();
50+
let mut out_ptr = result_ptr;
51+
let result_ptr = result_ptr.cast_const();
52+
53+
while a != 0 {
54+
let b = a % 8;
55+
let b = b ^ x;
56+
let c = a >> b;
57+
let b = b ^ y ^ c;
6158

62-
unsafe {
6359
out_ptr.write((b % 8) as u8 + b'0');
6460
out_ptr.offset(1).write(b',');
6561
out_ptr = out_ptr.offset(2);
62+
a = a / 8;
6663
}
67-
a = a / 8;
68-
}
6964

70-
let out_len = unsafe { out_ptr.offset_from(result_ptr) };
65+
let out_len = out_ptr.offset_from(result_ptr);
7166

72-
unsafe { str::from_utf8_unchecked(&RESULT[..(out_len - 1) as usize]) }
67+
str::from_utf8_unchecked(&RESULT[..(out_len - 1) as usize])
68+
}
7369
}
7470

7571
const fn find_a_r(p: &[u64], x: u64, y: u64, pa: u64) -> Option<u64> {
@@ -145,66 +141,65 @@ static LUT: [u64; 8 * 8 * 8 * 8] = const {
145141

146142
#[aoc(day17, part2)]
147143
pub fn part2(s: &str) -> u64 {
148-
unsafe { inner_part2(s.as_bytes()) }
149-
}
144+
unsafe {
145+
let s = s.as_bytes();
150146

151-
#[target_feature(enable = "avx2,bmi1,bmi2,cmpxchg16b,lzcnt,movbe,popcnt")]
152-
unsafe fn inner_part2(s: &[u8]) -> u64 {
153-
let mut i = 13;
154-
while *s.get_unchecked(i) != b'\n' {
155-
i += 1;
156-
}
157-
i += 39;
147+
let mut i = 13;
148+
while *s.get_unchecked(i) != b'\n' {
149+
i += 1;
150+
}
151+
i += 39;
158152

159-
let x = (*s.get_unchecked(i + 6) - b'0') as usize;
153+
let x = (*s.get_unchecked(i + 6) - b'0') as usize;
160154

161-
let o1 = *s.get_unchecked(i + 12);
162-
let o2 = *s.get_unchecked(i + 16);
163-
let o3 = *s.get_unchecked(i + 20);
164-
let o4 = *s.get_unchecked(i + 24);
155+
let o1 = *s.get_unchecked(i + 12);
156+
let o2 = *s.get_unchecked(i + 16);
157+
let o3 = *s.get_unchecked(i + 20);
158+
let o4 = *s.get_unchecked(i + 24);
165159

166-
let a = match (o1, o2, o3, o4) {
167-
(b'1', b'4', b'0', b'5') => {
168-
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
169-
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
170-
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 0)
171-
}
172-
(b'1', b'4', b'5', b'0') => {
173-
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
174-
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
175-
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 1)
176-
}
177-
(b'1', b'0', b'4', b'5') => {
178-
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
179-
let z = (*s.get_unchecked(i + 22) - b'0') as usize;
180-
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 2)
181-
}
182-
(b'0', b'1', b'4', b'5') => {
183-
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
184-
let z = (*s.get_unchecked(i + 22) - b'0') as usize;
185-
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 3)
186-
}
187-
(b'0', b'4', b'1', b'5') => {
188-
let y = (*s.get_unchecked(i + 22) - b'0') as usize;
189-
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
190-
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 4)
191-
}
192-
(b'4', b'1', b'0', b'5') => {
193-
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
194-
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
195-
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 5)
196-
}
197-
(b'4', b'1', b'5', b'0') => {
198-
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
199-
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
200-
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 6)
201-
}
202-
(b'4', b'0', b'1', b'5') => {
203-
let y = (*s.get_unchecked(i + 22) - b'0') as usize;
204-
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
205-
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 7)
206-
}
207-
_ => unreachable_unchecked(),
208-
};
209-
a
160+
let a = match (o1, o2, o3, o4) {
161+
(b'1', b'4', b'0', b'5') => {
162+
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
163+
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
164+
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 0)
165+
}
166+
(b'1', b'4', b'5', b'0') => {
167+
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
168+
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
169+
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 1)
170+
}
171+
(b'1', b'0', b'4', b'5') => {
172+
let y = (*s.get_unchecked(i + 14) - b'0') as usize;
173+
let z = (*s.get_unchecked(i + 22) - b'0') as usize;
174+
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 2)
175+
}
176+
(b'0', b'1', b'4', b'5') => {
177+
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
178+
let z = (*s.get_unchecked(i + 22) - b'0') as usize;
179+
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 3)
180+
}
181+
(b'0', b'4', b'1', b'5') => {
182+
let y = (*s.get_unchecked(i + 22) - b'0') as usize;
183+
let z = (*s.get_unchecked(i + 18) - b'0') as usize;
184+
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 4)
185+
}
186+
(b'4', b'1', b'0', b'5') => {
187+
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
188+
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
189+
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 5)
190+
}
191+
(b'4', b'1', b'5', b'0') => {
192+
let y = (*s.get_unchecked(i + 18) - b'0') as usize;
193+
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
194+
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 6)
195+
}
196+
(b'4', b'0', b'1', b'5') => {
197+
let y = (*s.get_unchecked(i + 22) - b'0') as usize;
198+
let z = (*s.get_unchecked(i + 14) - b'0') as usize;
199+
*LUT.get_unchecked(x * 512 + y * 64 + z * 8 + 7)
200+
}
201+
_ => unreachable_unchecked(),
202+
};
203+
a
204+
}
210205
}

0 commit comments

Comments
 (0)