Skip to content

Commit d682edd

Browse files
committed
day 15 use vec instead of hashmap
1 parent 4891c66 commit d682edd

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

src/day15.rs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::collections::HashMap;
2-
31
fn parse_input(input: &str) -> Vec<usize> {
42
input
53
.trim()
@@ -10,20 +8,23 @@ fn parse_input(input: &str) -> Vec<usize> {
108

119
fn target_number(numbers: Vec<usize>, target: usize) -> usize {
1210
let n = numbers.len();
13-
let mut visited = numbers
14-
.iter()
15-
.take(n - 1)
16-
.enumerate()
17-
.map(|(i, &num)| (num, vec![i + 1]))
18-
.collect::<HashMap<_, _>>();
11+
// Use a Vec instead of HashMap for better performance
12+
// Since we're dealing with the last spoken number -> (turn last spoken, current turn)
13+
let mut visited = vec![None; target];
14+
15+
// Initialize with starting numbers
16+
for (i, &num) in numbers.iter().take(n - 1).enumerate() {
17+
visited[num] = Some((0, i + 1));
18+
}
19+
1920
let mut last = numbers[n - 1];
2021
for i in numbers.len()..target {
21-
if let Some(prev) = visited.get_mut(&last) {
22-
let j = *prev.last().unwrap();
23-
*prev = vec![j, i];
22+
if let Some(prev) = visited.get_mut(last).and_then(|v| v.as_mut()) {
23+
let j = prev.1;
24+
*prev = (j, i);
2425
last = i - j;
2526
} else {
26-
visited.insert(last, vec![i]);
27+
visited[last] = Some((0, i));
2728
last = 0;
2829
}
2930
}

0 commit comments

Comments
 (0)