095 Amicable chains.sf 530 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/ruby
  2. # Author: Trizen
  3. # Date: 09 October 2016
  4. # Translated: 21 March 2023
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=95
  7. # Runtime: ~2 minutes
  8. var limit = 1e6
  9. var chain = Hash()
  10. for n in (1 .. limit) {
  11. var len = 0
  12. var orig = n
  13. var seen = Hash()
  14. loop {
  15. n = n.aliquot
  16. break if (n > limit)
  17. break if seen.has(n)
  18. seen{n} = nil
  19. ++len
  20. }
  21. if (seen.has(orig)) {
  22. chain{len} := orig
  23. }
  24. }
  25. say chain{chain.keys.max_by { .to_i }}