The Collatz Conjecture is a simple mathematical problem that still has no formal proof. So it’s an open problem.

This is how it works:

Choose any positive integer x.
While x > 0, do:
    if x is even, divide it by 2 (x = x/2)
    if x is odd, multiply it by 3 and add 1 (x = 3x + 1)

The Collatz Conjecture states that no matter what value of x you start with, the sequence will always reach x = 1.

Example:

If x = 10, you get the following sequence: [10, 5, 16, 8, 4, 2, 1].

If x = 77, you get the following collatz sequence: [77, 232, 116, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1].

In other words, it doesn’t matter the initial value you pick for x, you always end up going back to x = 1.

A ruby implementation would look like this:

def collatz n
  seq = [n]
  until n == 1
    n = (n.even?) ? (n / 2) : (3 * n + 1)
    seq << n
  end
  seq
end

A Haskell implementation[1] could look like this:

chain :: (Integral a) => a -> [a]
chain 0 = error "Invalid!"
chain 1 = [1]
chain x
  | even x = x:chain (x `div` 2)
  | odd x = x:chain (x*3 + 1)

[1] Source: a gist that is not available anymore.


Did you like this article? Then you're gonna love these other ones: