Skip to content

Commit 5f3a9c7

Browse files
committed
No vec? now with even less bound checking
1 parent b7d7dff commit 5f3a9c7

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/day7.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ unsafe fn part1_inner(s: &str) -> u64 {
3030
let mut sum = 0;
3131

3232
let mut i = 0;
33-
let mut v = Vec::with_capacity(15);
33+
let mut v = [0; 15];
34+
let mut v_len = 0;
3435

3536
while i < s.len() {
3637
let mut target: u64 = 0;
@@ -47,7 +48,8 @@ unsafe fn part1_inner(s: &str) -> u64 {
4748
num += (*s.get_unchecked(i) - b'0') as u64;
4849
i += 1;
4950
if !s.get_unchecked(i).is_ascii_digit() {
50-
v.push(num);
51+
*v.get_unchecked_mut(v_len) = num;
52+
v_len += 1;
5153
num = 0;
5254
i += 1;
5355
if *s.get_unchecked(i - 1) == b'\n' {
@@ -56,10 +58,10 @@ unsafe fn part1_inner(s: &str) -> u64 {
5658
}
5759
}
5860

59-
if search(target, &v) {
61+
if search(target, &v.get_unchecked(..v_len)) {
6062
sum += target;
6163
}
62-
v.clear();
64+
v_len = 0;
6365
}
6466

6567
sum
@@ -103,7 +105,8 @@ unsafe fn part2_inner(s: &str) -> u64 {
103105
let mut sum = 0;
104106

105107
let mut i = 0;
106-
let mut v = Vec::with_capacity(15);
108+
let mut v = [0; 15];
109+
let mut v_len = 0;
107110

108111
while i < s.len() {
109112
let mut target: u64 = 0;
@@ -120,7 +123,8 @@ unsafe fn part2_inner(s: &str) -> u64 {
120123
num += (*s.get_unchecked(i) - b'0') as u64;
121124
i += 1;
122125
if !s.get_unchecked(i).is_ascii_digit() {
123-
v.push(num);
126+
*v.get_unchecked_mut(v_len) = num;
127+
v_len += 1;
124128
num = 0;
125129
i += 1;
126130
if *s.get_unchecked(i - 1) == b'\n' {
@@ -129,10 +133,10 @@ unsafe fn part2_inner(s: &str) -> u64 {
129133
}
130134
}
131135

132-
if search_part2(target, &v) {
136+
if search_part2(target, &v.get_unchecked(..v_len)) {
133137
sum += target;
134138
}
135-
v.clear();
139+
v_len = 0;
136140
}
137141

138142
sum

0 commit comments

Comments
 (0)