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}