master amadaluzia/rosetta-collatz / ruby / lib / rosetta_collatz.rb
 1# frozen_string_literal: true
 2
 3# Collatz conjecture functions
 4module RosettaCollatz
 5  def self.collatz(num)
 6    raise 'num must be an Integer' unless num.is_a?(Integer)
 7
 8    if num.even?
 9      num / 2
10    else
11      3 * num + 1
12    end
13  end
14
15  def self.collatz_sequence(num)
16    raise 'num must be an Integer' unless num.is_a?(Integer)
17
18    res = "#{num}: "
19    i = num
20    while i != 1
21      res << "#{i}, "
22      i = collatz(i)
23    end
24    res << '1'
25    res
26  end
27end