Забелязах много интересен феномен,който не мога да си го обясня:
Вариант 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. Защо така ?
