aboutsummaryrefslogtreecommitdiff
path: root/challenge-345/benjamin-andre/rust/ch-1.rs
blob: e5d7fb1416d384ce88182892888573c44c8acc6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh
//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit

fn peak_positions(ints: &[i32]) -> Vec<usize> {
    (0..ints.len())
        .filter(|&i| {
            let left_ok = i == 0 || ints[i] > ints[i - 1];
            let right_ok = i == ints.len() - 1 || ints[i] > ints[i + 1];
            left_ok && right_ok && !(i == 0 && i == ints.len() - 1)
        })
        .collect()
}

#[test]
fn example() {
    assert_eq!(peak_positions(&[1, 3, 2]), vec![1]);
    assert_eq!(peak_positions(&[2, 4, 6, 5, 3]), vec![2]);
    assert_eq!(peak_positions(&[1, 2, 3, 2, 4, 1]), vec![2, 4]);
    assert_eq!(peak_positions(&[5, 3, 1]), vec![0]);
    assert_eq!(peak_positions(&[1, 5, 1, 5, 1, 5, 1]), vec![1, 3, 5]);
}