14: Add solution to Rust track exercise "Sublist".

[?]
9Zb2bmkejrNknawUtr3MKvVstZkVDR8x8ritfgZXKrky
Dec 24, 2021, 11:27 AM
QUYOVUM5VNQ2X5CMPIK2H6GHINF446TLBNGGUG4BHK4ONNV4EEFQC

Dependencies

  • [2] HQ7VGDGR 13: Add Rust track exercise "Sublist".

Change contents

  • replacement in rust/sublist/tests/sublist.rs at line 5
    [2.147][2.147:172]()
    let v: &[u32] = &[];
    [2.147]
    [2.172]
    let v: &[u32] = &[];
  • replacement in rust/sublist/tests/sublist.rs at line 7
    [2.173][2.173:223]()
    assert_eq!(Comparison::Equal, sublist(v, v));
    [2.173]
    [2.223]
    assert_eq!(Comparison::Equal, sublist(v, v));
  • replacement in rust/sublist/tests/sublist.rs at line 13
    [2.287][2.287:361]()
    assert_eq!(Comparison::Sublist, sublist(&[], &['a', 's', 'd', 'f']));
    [2.287]
    [2.361]
    assert_eq!(Comparison::Sublist, sublist(&[], &['a', 's', 'd', 'f']));
  • replacement in rust/sublist/tests/sublist.rs at line 19
    [2.427][2.427:503]()
    assert_eq!(Comparison::Superlist, sublist(&['a', 's', 'd', 'f'], &[]));
    [2.427]
    [2.503]
    assert_eq!(Comparison::Superlist, sublist(&['a', 's', 'd', 'f'], &[]));
  • replacement in rust/sublist/tests/sublist.rs at line 25
    [2.547][2.547:605]()
    assert_eq!(Comparison::Unequal, sublist(&[1], &[2]));
    [2.547]
    [2.605]
    assert_eq!(Comparison::Unequal, sublist(&[1], &[2]));
  • replacement in rust/sublist/tests/sublist.rs at line 31
    [2.665][2.665:692]()
    use std::iter::repeat;
    [2.665]
    [2.692]
    use std::iter::repeat;
  • replacement in rust/sublist/tests/sublist.rs at line 33
    [2.693][2.693:750]()
    let v: Vec<char> = repeat('x').take(1000).collect();
    [2.693]
    [2.750]
    let v: Vec<char> = repeat('x').take(1000).collect();
  • replacement in rust/sublist/tests/sublist.rs at line 35
    [2.751][2.751:803]()
    assert_eq!(Comparison::Equal, sublist(&v, &v));
    [2.751]
    [2.803]
    assert_eq!(Comparison::Equal, sublist(&v, &v));
  • replacement in rust/sublist/tests/sublist.rs at line 41
    [2.853][2.853:929]()
    assert_eq!(Comparison::Sublist, sublist(&[1, 2, 3], &[1, 2, 3, 4, 5]));
    [2.853]
    [2.929]
    assert_eq!(Comparison::Sublist, sublist(&[1, 2, 3], &[1, 2, 3, 4, 5]));
  • replacement in rust/sublist/tests/sublist.rs at line 47
    [2.975][2.975:1051]()
    assert_eq!(Comparison::Sublist, sublist(&[4, 3, 2], &[5, 4, 3, 2, 1]));
    [2.975]
    [2.1051]
    assert_eq!(Comparison::Sublist, sublist(&[4, 3, 2], &[5, 4, 3, 2, 1]));
  • replacement in rust/sublist/tests/sublist.rs at line 53
    [2.1094][2.1094:1170]()
    assert_eq!(Comparison::Sublist, sublist(&[3, 4, 5], &[1, 2, 3, 4, 5]));
    [2.1094]
    [2.1170]
    assert_eq!(Comparison::Sublist, sublist(&[3, 4, 5], &[1, 2, 3, 4, 5]));
  • replacement in rust/sublist/tests/sublist.rs at line 59
    [2.1234][2.1234:1307]()
    assert_eq!(Comparison::Sublist, sublist(&[1, 1, 2], &[1, 1, 1, 2]));
    [2.1234]
    [2.1307]
    assert_eq!(Comparison::Sublist, sublist(&[1, 1, 2], &[1, 1, 1, 2]));
  • replacement in rust/sublist/tests/sublist.rs at line 65
    [2.1362][2.1362:1413]()
    let huge: Vec<u32> = (1..1_000_000).collect();
    [2.1362]
    [2.1413]
    let huge: Vec<u32> = (1..1_000_000).collect();
  • replacement in rust/sublist/tests/sublist.rs at line 67
    [2.1414][2.1414:1479]()
    assert_eq!(Comparison::Sublist, sublist(&[3, 4, 5], &huge));
    [2.1414]
    [2.1479]
    assert_eq!(Comparison::Sublist, sublist(&[3, 4, 5], &huge));
  • replacement in rust/sublist/tests/sublist.rs at line 73
    [2.1537][2.1537:1636]()
    let v1: Vec<u64> = (10..1_000_001).collect();
    let v2: Vec<u64> = (1..1_000_000).collect();
    [2.1537]
    [2.1636]
    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
    [2.1637][2.1637:1693]()
    assert_eq!(Comparison::Unequal, sublist(&v1, &v2));
    [2.1637]
    [2.1693]
    assert_eq!(Comparison::Unequal, sublist(&v1, &v2));
  • replacement in rust/sublist/tests/sublist.rs at line 82
    [2.1740][2.1740:1818]()
    assert_eq!(Comparison::Superlist, sublist(&[1, 2, 3, 4, 5], &[1, 2, 3]));
    [2.1740]
    [2.1818]
    assert_eq!(Comparison::Superlist, sublist(&[1, 2, 3, 4, 5], &[1, 2, 3]));
  • replacement in rust/sublist/tests/sublist.rs at line 88
    [2.1866][2.1866:1944]()
    assert_eq!(Comparison::Superlist, sublist(&[5, 4, 3, 2, 1], &[4, 3, 2]));
    [2.1866]
    [2.1944]
    assert_eq!(Comparison::Superlist, sublist(&[5, 4, 3, 2, 1], &[4, 3, 2]));
  • replacement in rust/sublist/tests/sublist.rs at line 94
    [2.1989][2.1989:2067]()
    assert_eq!(Comparison::Superlist, sublist(&[1, 2, 3, 4, 5], &[3, 4, 5]));
    [2.1989]
    [2.2067]
    assert_eq!(Comparison::Superlist, sublist(&[1, 2, 3, 4, 5], &[3, 4, 5]));
  • replacement in rust/sublist/tests/sublist.rs at line 100
    [2.2124][2.2124:2175]()
    let huge: Vec<u32> = (1..1_000_000).collect();
    [2.2124]
    [2.2175]
    let huge: Vec<u32> = (1..1_000_000).collect();
  • replacement in rust/sublist/tests/sublist.rs at line 102
    [2.2176][2.2176:2243]()
    assert_eq!(Comparison::Superlist, sublist(&huge, &[3, 4, 5]));
    [2.2176]
    [2.2243]
    assert_eq!(Comparison::Superlist, sublist(&huge, &[3, 4, 5]));
  • replacement in rust/sublist/tests/sublist.rs at line 108
    [2.2296][2.2296:2415]()
    assert_eq!(
    Comparison::Sublist,
    sublist(&[1, 2, 1, 2, 3], &[1, 2, 3, 1, 2, 1, 2, 3, 2, 1])
    );
    [2.2296]
    [2.2415]
    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
    [2.2468][2.2468:2587]()
    assert_eq!(
    Comparison::Unequal,
    sublist(&[1, 2, 1, 2, 3], &[1, 2, 3, 1, 2, 3, 2, 3, 2, 1])
    );
    [2.2468]
    [2.2587]
    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
    [2.2638]
    [2.2639]
    use rayon::prelude::*;
    use std::cmp::Ordering;
  • replacement in rust/sublist/src/lib.rs at line 6
    [2.2689][2.2689:2741]()
    Equal,
    Sublist,
    Superlist,
    Unequal,
    [2.2689]
    [2.2741]
    Equal,
    Sublist,
    Superlist,
    Unequal,
  • replacement in rust/sublist/src/lib.rs at line 12
    [2.2744][2.2744:2948]()
    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.");
    [2.2744]
    [2.2948]
    /// 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"