Skip to content

Commit 1facb72

Browse files
committed
Tidy
1 parent 1a584cd commit 1facb72

File tree

1 file changed

+10
-19
lines changed

1 file changed

+10
-19
lines changed

src/year2024/day25.rs

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,32 @@
11
//! # Code Chronicle
2+
const MASK: u64 = 0b011111_011111_011111_011111_011111_011111_011111;
3+
24
pub fn parse(input: &str) -> &str {
35
input
46
}
57

68
pub fn part1(input: &str) -> u32 {
7-
let mut iter = input.bytes();
9+
let mut iter = input.bytes().map(|b| (b & 1) as u64);
810
let mut locks = Vec::with_capacity(250);
911
let mut keys = Vec::with_capacity(250);
1012
let mut result = 0;
1113

12-
loop {
13-
let mut bits = 0;
14-
15-
for _ in 0..41 {
16-
let b = iter.next().unwrap();
17-
bits = (bits << 1) | (b & 1) as u64;
18-
}
19-
20-
bits &= 0b011111_011111_011111_011111_011111_011111_011111;
14+
while let Some(first) = iter.next() {
15+
let bits = (0..40).fold(first, |bits, _| (bits << 1) | iter.next().unwrap());
2116

22-
if bits & 0b011111_000000_000000_000000_000000_000000_000000 != 0 {
23-
locks.push(bits);
17+
if bits & 1 == 0 {
18+
locks.push(bits & MASK);
2419
} else {
25-
keys.push(bits);
20+
keys.push(bits & MASK);
2621
}
2722

2823
iter.next();
29-
if iter.next().is_none() {
30-
break;
31-
}
24+
iter.next();
3225
}
3326

3427
for lock in &locks {
3528
for key in &keys {
36-
if lock & key == 0 {
37-
result += 1;
38-
}
29+
result += (lock & key == 0) as u32;
3930
}
4031
}
4132

0 commit comments

Comments
 (0)