Забелязах много интересен феномен,който не мога да си го обясня:
Вариант 1:
fn solve_part_one_1(input: &mut [i32]) -> Option<i32> {
input.sort_unstable();
let mut ones = 0;
let mut threes = 1;
let mut prev = 0;
for &i in input.iter() {
let diff = i - prev;
if diff == 1 {
ones += 1;
} else if diff == 3 {
threes += 1;
}
prev = i;
}
if cfg!(debug_assertions) {
println!("O:{}; T: {}; Result: {}", ones, threes, ones * threes);
}
Some(ones * threes)
}
Вариант 2:
fn solve_part_one_2(input: &mut [i32]) -> Option<i32> {
input.sort_unstable();
let mut sums = [0, 0, 1];
let mut prev = 0;
for &i in input.iter() {
let diff = (i - prev) as usize;
if diff <= 3 {
sums[diff-1] += 1;
prev = i;
}
}
if cfg!(debug_assertions) {
println!("O:{}; T: {}; Result: {}", sums[0], sums[2], sums[0] * sums[2]);
}
Some(sums[0] * sums[2])
}
Та това което не мога да си обясня е, защо вариант 1 се изпълнява за 2800 наносекунди, а вариант 2 - само за 1500. Защо така ?