File tree Expand file tree Collapse file tree 1 file changed +10
-19
lines changed Expand file tree Collapse file tree 1 file changed +10
-19
lines changed Original file line number Diff line number Diff line change 1
1
//! # Code Chronicle
2
+ const MASK : u64 = 0b011111_011111_011111_011111_011111_011111_011111 ;
3
+
2
4
pub fn parse ( input : & str ) -> & str {
3
5
input
4
6
}
5
7
6
8
pub fn part1 ( input : & str ) -> u32 {
7
- let mut iter = input. bytes ( ) ;
9
+ let mut iter = input. bytes ( ) . map ( |b| ( b & 1 ) as u64 ) ;
8
10
let mut locks = Vec :: with_capacity ( 250 ) ;
9
11
let mut keys = Vec :: with_capacity ( 250 ) ;
10
12
let mut result = 0 ;
11
13
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 ( ) ) ;
21
16
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 ) ;
24
19
} else {
25
- keys. push ( bits) ;
20
+ keys. push ( bits & MASK ) ;
26
21
}
27
22
28
23
iter. next ( ) ;
29
- if iter. next ( ) . is_none ( ) {
30
- break ;
31
- }
24
+ iter. next ( ) ;
32
25
}
33
26
34
27
for lock in & locks {
35
28
for key in & keys {
36
- if lock & key == 0 {
37
- result += 1 ;
38
- }
29
+ result += ( lock & key == 0 ) as u32 ;
39
30
}
40
31
}
41
32
You can’t perform that action at this time.
0 commit comments