aboutsummaryrefslogtreecommitdiff
path: root/rust/sublist/src/lib.rs
blob: cc62362a716f454c01ef9fb4827f05347173e148 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#[derive(Debug, PartialEq, Eq)]
pub enum Comparison {
    Equal,
    Sublist,
    Superlist,
    Unequal,
}

pub fn sublist<T: PartialEq>(fst: &[T], snd: &[T]) -> Comparison {
    match (fst.len(),snd.len()) {
        (0,0) => Comparison::Equal,
        (0,_) => Comparison::Sublist,
        (_,0) => Comparison::Superlist,
        (n,m) if n < m && snd.windows(n).any(|s| fst == s) => Comparison::Sublist,
        (n,m) if n > m && fst.windows(m).any(|f| snd == f) => Comparison::Superlist,
        _ if fst == snd => Comparison::Equal,
        _ => Comparison::Unequal
    }
}