multiplicity.rs

579 B · rust · 24 lines

1pub struct Classes {2    pub distinct: usize,3    pub repeated: usize,4    pub largest: usize,5}67pub fn classes(values: &[f64], tolerance: f64) -> Classes {8    let mut sizes = Vec::new();9    let mut run = 1;10    for pair in values.windows(2) {11        if pair[1] - pair[0] > tolerance {12            sizes.push(run);13            run = 1;14        } else {15            run += 1;16        }17    }18    sizes.push(run);19    Classes {20        distinct: sizes.len(),21        repeated: sizes.iter().filter(|s| **s > 1).sum(),22        largest: *sizes.iter().max().unwrap_or(&0),23    }24}