From 17bf45b273913a24a72caa964ee16a4fe84c6ec6 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Wed, 13 Jul 2022 11:31:40 +0100 Subject: [rust] Sublist --- rust/sublist/src/lib.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 rust/sublist/src/lib.rs (limited to 'rust/sublist/src/lib.rs') diff --git a/rust/sublist/src/lib.rs b/rust/sublist/src/lib.rs new file mode 100644 index 0000000..cc62362 --- /dev/null +++ b/rust/sublist/src/lib.rs @@ -0,0 +1,19 @@ +#[derive(Debug, PartialEq, Eq)] +pub enum Comparison { + Equal, + Sublist, + Superlist, + Unequal, +} + +pub fn sublist(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 + } +} -- cgit v1.2.3