014 Longest Collatz sequence.sf 694 B

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/ruby
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Website: https://github.com/trizen
  5. # The following iterative sequence is defined for the set of positive integers:
  6. # n → n/2 (n is even)
  7. # n → 3n + 1 (n is odd)
  8. # Which starting number, under one million, produces the longest chain?
  9. # https://projecteuler.net/problem=14
  10. # Runtime: 34.996s (previously: 47.259s)
  11. func collatz(n) is cached {
  12. n.is_one ? 1
  13. : (n.is_even ? 1+collatz(n>>1)
  14. : 1+collatz((3*n + 1)>>1));
  15. }
  16. var num = 0;
  17. var max = 0;
  18. for i in (1 ..^ 1e6) {
  19. var value = collatz(i);
  20. if (value > max) {
  21. max = value;
  22. num = i;
  23. }
  24. }
  25. say num;