aboutsummaryrefslogtreecommitdiff
path: root/challenge-334/benjamin-andre/rust/ch-2.rs
blob: 4c7c4024d40dd4bfc2e2ef1c9918195f0ffa1858 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/sh
//usr/bin/env rustc --test $0 -o kachow && ./kachow --nocapture; rm -f kachow ; exit

fn nearest_valid_point(x: i32, y: i32, points: &[[i32; 2]]) -> i32 {
    points
        .iter()
        .enumerate()
        .filter(|(_, &[px, py])| px == x || py == y)
        .map(|(i, &[px, py])| (i, (x - px).abs() + (y - py).abs()))
        .min_by_key(|&(_, dist)| dist)
        .map_or(-1, |(i, _)| i as i32)
}

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