fork download
  1. def chain(n, a = [])
  2. if n <= 1
  3. a << n
  4. elsif n.odd?
  5. chain(n * 3 + 1, a << n)
  6. else
  7. chain(n / 2, a << n)
  8. end
  9. end
  10. p chain(10)
  11. p chain(30)
  12. p (1..100).count {|n| 15 <= chain(n).size}
  13.  
  14. def chain(n)
  15. loop.each_with_object([]) do |_, a|
  16. a << n
  17. break a if n <= 1
  18. n = n.odd? ? n * 3 + 1 : n / 2
  19. end
  20. end
  21. p chain(10)
  22. p chain(30)
  23. p (1..100).count {|n| 15 <= chain(n).size}
  24.  
Success #stdin #stdout 0s 28216KB
stdin
Standard input is empty
stdout
[10, 5, 16, 8, 4, 2, 1]
[30, 15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
71
[10, 5, 16, 8, 4, 2, 1]
[30, 15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
71