Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.54 KB | None | 0 0
  1. pub fn collatz(mut n: u64) -> u64 {
  2. assert_ne!(n, 0);
  3. let c = std::iter::repeat(())
  4. .map(|_| {
  5. let x = n;
  6. n = if n % 2 == 0 {n / 2} else {3 * n + 1};
  7. x
  8. })
  9. .take_while(|&n| n != 1)
  10. .count();
  11. c as u64
  12. }
  13.  
  14. #[cfg(test)]
  15. mod tests {
  16. use super::collatz;
  17.  
  18. #[test]
  19. fn it_works() {
  20. let expected = [0, 1, 7, 2, 5, 8, 16, 3, 19];
  21. let actual = (1 ..= expected.len() as u64).map(collatz).collect::<Vec<_>>();
  22. assert_eq!(&*actual, expected);
  23. }
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement