14: Add solution to Rust track exercise "Sublist".
[?]
9Zb2bmkejrNknawUtr3MKvVstZkVDR8x8ritfgZXKrky
Dec 24, 2021, 11:27 AM
QUYOVUM5VNQ2X5CMPIK2H6GHINF446TLBNGGUG4BHK4ONNV4EEFQCDependencies
- [2]
HQ7VGDGR13: Add Rust track exercise "Sublist".
Change contents
- replacement in rust/sublist/tests/sublist.rs at line 5
let v: &[u32] = &[];let v: &[u32] = &[]; - replacement in rust/sublist/tests/sublist.rs at line 7
assert_eq!(Comparison::Equal, sublist(v, v));assert_eq!(Comparison::Equal, sublist(v, v)); - replacement in rust/sublist/tests/sublist.rs at line 13
assert_eq!(Comparison::Sublist, sublist(&[], &['a', 's', 'd', 'f']));assert_eq!(Comparison::Sublist, sublist(&[], &['a', 's', 'd', 'f'])); - replacement in rust/sublist/tests/sublist.rs at line 19
assert_eq!(Comparison::Superlist, sublist(&['a', 's', 'd', 'f'], &[]));assert_eq!(Comparison::Superlist, sublist(&['a', 's', 'd', 'f'], &[])); - replacement in rust/sublist/tests/sublist.rs at line 25
assert_eq!(Comparison::Unequal, sublist(&[1], &[2]));assert_eq!(Comparison::Unequal, sublist(&[1], &[2])); - replacement in rust/sublist/tests/sublist.rs at line 31
use std::iter::repeat;use std::iter::repeat; - replacement in rust/sublist/tests/sublist.rs at line 33
let v: Vec<char> = repeat('x').take(1000).collect();let v: Vec<char> = repeat('x').take(1000).collect(); - replacement in rust/sublist/tests/sublist.rs at line 35
assert_eq!(Comparison::Equal, sublist(&v, &v));assert_eq!(Comparison::Equal, sublist(&v, &v)); - replacement in rust/sublist/tests/sublist.rs at line 41
assert_eq!(Comparison::Sublist, sublist(&[1, 2, 3], &[1, 2, 3, 4, 5]));assert_eq!(Comparison::Sublist, sublist(&[1, 2, 3], &[1, 2, 3, 4, 5])); - replacement in rust/sublist/tests/sublist.rs at line 47
assert_eq!(Comparison::Sublist, sublist(&[4, 3, 2], &[5, 4, 3, 2, 1]));assert_eq!(Comparison::Sublist, sublist(&[4, 3, 2], &[5, 4, 3, 2, 1])); - replacement in rust/sublist/tests/sublist.rs at line 53
assert_eq!(Comparison::Sublist, sublist(&[3, 4, 5], &[1, 2, 3, 4, 5]));assert_eq!(Comparison::Sublist, sublist(&[3, 4, 5], &[1, 2, 3, 4, 5])); - replacement in rust/sublist/tests/sublist.rs at line 59
assert_eq!(Comparison::Sublist, sublist(&[1, 1, 2], &[1, 1, 1, 2]));assert_eq!(Comparison::Sublist, sublist(&[1, 1, 2], &[1, 1, 1, 2])); - replacement in rust/sublist/tests/sublist.rs at line 65
let huge: Vec<u32> = (1..1_000_000).collect();let huge: Vec<u32> = (1..1_000_000).collect(); - replacement in rust/sublist/tests/sublist.rs at line 67
assert_eq!(Comparison::Sublist, sublist(&[3, 4, 5], &huge));assert_eq!(Comparison::Sublist, sublist(&[3, 4, 5], &huge)); - replacement in rust/sublist/tests/sublist.rs at line 73
let v1: Vec<u64> = (10..1_000_001).collect();let v2: Vec<u64> = (1..1_000_000).collect();let v1: Vec<u64> = (10..1_000_001).collect();let v2: Vec<u64> = (1..1_000_000).collect(); - replacement in rust/sublist/tests/sublist.rs at line 76
assert_eq!(Comparison::Unequal, sublist(&v1, &v2));assert_eq!(Comparison::Unequal, sublist(&v1, &v2)); - replacement in rust/sublist/tests/sublist.rs at line 82
assert_eq!(Comparison::Superlist, sublist(&[1, 2, 3, 4, 5], &[1, 2, 3]));assert_eq!(Comparison::Superlist, sublist(&[1, 2, 3, 4, 5], &[1, 2, 3])); - replacement in rust/sublist/tests/sublist.rs at line 88
assert_eq!(Comparison::Superlist, sublist(&[5, 4, 3, 2, 1], &[4, 3, 2]));assert_eq!(Comparison::Superlist, sublist(&[5, 4, 3, 2, 1], &[4, 3, 2])); - replacement in rust/sublist/tests/sublist.rs at line 94
assert_eq!(Comparison::Superlist, sublist(&[1, 2, 3, 4, 5], &[3, 4, 5]));assert_eq!(Comparison::Superlist, sublist(&[1, 2, 3, 4, 5], &[3, 4, 5])); - replacement in rust/sublist/tests/sublist.rs at line 100
let huge: Vec<u32> = (1..1_000_000).collect();let huge: Vec<u32> = (1..1_000_000).collect(); - replacement in rust/sublist/tests/sublist.rs at line 102
assert_eq!(Comparison::Superlist, sublist(&huge, &[3, 4, 5]));assert_eq!(Comparison::Superlist, sublist(&huge, &[3, 4, 5])); - replacement in rust/sublist/tests/sublist.rs at line 108
assert_eq!(Comparison::Sublist,sublist(&[1, 2, 1, 2, 3], &[1, 2, 3, 1, 2, 1, 2, 3, 2, 1]));assert_eq!(Comparison::Sublist,sublist(&[1, 2, 1, 2, 3], &[1, 2, 3, 1, 2, 1, 2, 3, 2, 1])); - replacement in rust/sublist/tests/sublist.rs at line 117
assert_eq!(Comparison::Unequal,sublist(&[1, 2, 1, 2, 3], &[1, 2, 3, 1, 2, 3, 2, 3, 2, 1]));assert_eq!(Comparison::Unequal,sublist(&[1, 2, 1, 2, 3], &[1, 2, 3, 1, 2, 3, 2, 3, 2, 1])); - edit in rust/sublist/src/lib.rs at line 1
use rayon::prelude::*;use std::cmp::Ordering; - replacement in rust/sublist/src/lib.rs at line 6
Equal,Sublist,Superlist,Unequal,Equal,Sublist,Superlist,Unequal, - replacement in rust/sublist/src/lib.rs at line 12
pub fn sublist<T: PartialEq>(_first_list: &[T], _second_list: &[T]) -> Comparison {unimplemented!("Determine if the first list is equal to, sublist of, superlist of or unequal to the second list.");/// Determines if `b` is a sublist of `a`.////// # Arguments:/// * `a`: Slice to test if is a superlist of `b`./// * `b`: Slice to test if is a sublist of `a`.////// # Examples/// ```rust/// # use sublist::*;/// assert!(is_sublist(&[1, 2, 3], &[1, 2]));/// assert!(!is_sublist(&[1, 2, 3], &[1, 3]));/// ```pub fn is_sublist<T: PartialEq + Sync>(a: &[T], b: &[T]) -> bool {a.par_windows(b.len()).any(|sublist| sublist == b)}pub fn sublist<T: PartialEq + Sync>(_first_list: &[T], _second_list: &[T]) -> Comparison {match _first_list.len().cmp(&_second_list.len()) {Ordering::Less => {if _first_list.is_empty() || is_sublist(_second_list, _first_list) {return Comparison::Sublist;}}Ordering::Equal => {if _first_list == _second_list {return Comparison::Equal;}}Ordering::Greater => {if _second_list.is_empty() || is_sublist(_first_list, _second_list) {return Comparison::Superlist;}}}Comparison::Unequal - edit in rust/sublist/Cargo.toml at line 5[2.7178]
[dependencies]rayon = "1.5"