Skip to content

Instantly share code, notes, and snippets.

@frectonz
Last active February 27, 2023 21:10
Show Gist options
  • Save frectonz/1baf6b3ac7d76a0c833dea9f085457e4 to your computer and use it in GitHub Desktop.
Save frectonz/1baf6b3ac7d76a0c833dea9f085457e4 to your computer and use it in GitHub Desktop.
From cassido's February 27, 2023 Newsletter
pub fn repeated_groups(numbers: &[u32]) -> Vec<Vec<u32>> {
numbers
.iter()
.fold::<Vec<Vec<u32>>, _>(vec![], |mut acc, &n| {
if let Some(last) = acc.last_mut() {
if last[0] == n {
last.push(n);
} else {
acc.push(vec![n]);
}
} else {
acc.push(vec![n]);
}
acc
})
.into_iter()
.filter(|v| v.len() > 1)
.collect()
}
#[cfg(test)]
mod tests {
use super::repeated_groups;
#[test]
fn test_repeated_groups() {
assert_eq!(repeated_groups(&[1, 2, 2, 4, 5]), vec![vec![2, 2]]);
assert_eq!(
repeated_groups(&[1, 1, 0, 0, 8, 4, 4, 4, 3, 2, 1, 9, 9]),
vec![vec![1, 1], vec![0, 0], vec![4, 4, 4], vec![9, 9]]
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment