Skip to content

Commit 93b331f

Browse files
committed
Also update part 2
1 parent ea184e1 commit 93b331f

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

src/day7.rs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,40 +96,47 @@ fn search_part2(target: u64, v: &[u64]) -> bool {
9696

9797
#[aoc(day7, part2)]
9898
pub fn part2(s: &str) -> u64 {
99+
unsafe { part2_inner(s) }
100+
}
101+
102+
unsafe fn part2_inner(s: &str) -> u64 {
99103
let s = s.as_bytes();
100104

101105
let mut sum = 0;
102106

103107
let mut i = 0;
104-
let mut v = Vec::new();
108+
let mut v = [0; 15];
109+
let mut v_len = 0;
110+
105111
while i < s.len() {
106112
let mut target: u64 = 0;
107-
while s[i] != b':' {
113+
while *s.get_unchecked(i) != b':' {
108114
target *= 10;
109-
target += (s[i] - b'0') as u64;
115+
target += (*s.get_unchecked(i) - b'0') as u64;
110116
i += 1;
111117
}
112118
i += 2;
113119

114120
let mut num = 0;
115-
while s[i] != b'\n' {
121+
while *s.get_unchecked(i) != b'\n' {
116122
num *= 10;
117-
num += (s[i] - b'0') as u64;
123+
num += (*s.get_unchecked(i) - b'0') as u64;
118124
i += 1;
119-
if !s[i].is_ascii_digit() {
120-
v.push(num);
125+
if !s.get_unchecked(i).is_ascii_digit() {
126+
*v.get_unchecked_mut(v_len) = num;
127+
v_len += 1;
121128
num = 0;
122129
i += 1;
123-
if s[i - 1] == b'\n' {
130+
if *s.get_unchecked(i - 1) == b'\n' {
124131
break;
125132
}
126133
}
127134
}
128135

129-
if search_part2(target, &v) {
136+
if search_part2(target, &v[..v_len]) {
130137
sum += target;
131138
}
132-
v.clear();
139+
v_len = 0;
133140
}
134141

135142
sum

0 commit comments

Comments
 (0)