Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pub fn collatz(mut n: u64) -> u64 {
- assert_ne!(n, 0);
- let c = std::iter::repeat(())
- .map(|_| {
- let x = n;
- n = if n % 2 == 0 {n / 2} else {3 * n + 1};
- x
- })
- .take_while(|&n| n != 1)
- .count();
- c as u64
- }
- #[cfg(test)]
- mod tests {
- use super::collatz;
- #[test]
- fn it_works() {
- let expected = [0, 1, 7, 2, 5, 8, 16, 3, 19];
- let actual = (1 ..= expected.len() as u64).map(collatz).collect::<Vec<_>>();
- assert_eq!(&*actual, expected);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement