The Hailstone Sequence

The Hailstone sequence is based on the theory is that you can perform a specific calculation on any positive integer to create a series of numbers. No matter which positive integer you start with, eventually the sequence ends with the value 1.

The math in the Hailstone sequence is interesting, but you’re not here to do math. You’re here to program. The computer does the math.

The Hailstone Sequence works like this, starting with any positive integer:

  1. If the value is 1, then the sequence is over.
  2. If the value is even, then the next number in the sequence is equal to half the value: n/2
  3. If the value is odd, then the next number is equal to three times the value, plus one: (n*3)+1

If you perform these calculations, no matter what the starting value, eventually you end up with 1. That’s the theory at least; according to the Collatz Conjecture, the Hailstone sequence for any positive integer always ends in 1. That theory, however, remains unproven.

For this month’s Exercise, your task is to write code that outputs the Hailstone sequence for a random integer value in the range of 1 to 100. For the value generated, you’ll perform the three tests listed above. Output each value in the sequence, then when the sequence ends, display the sequence length.

Here’s sample output from my solution, which generated the random value 27:

Sequence:  27  82  41 124  62  31  94  47 142  71 214 107 322 161 484 242 121 364 182  91 274 137 412 206 103 310 155 466 233 700 350 175 526 263 790 395 1186 593 1780 890 445 1336 668 334 167 502 251 754 377 1132 566 283 850 425 1276 638 319 958 479 1438 719 2158 1079 3238 1619 4858 2429 7288 3644 1822 911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154 577 1732 866 433 1300 650 325 976 488 244 122  61 184  92  46  23  70  35 106  53 160  80  40  20  10   5  16   8   4   2   1 
Sequence length: 112

So for the starting value 27, the output shows 112 numbers in the Hailstone sequence.

Click here to read my solution. Please do attempt the Exercise on your own before you take a peek at what I’ve done. Remember, multiple solutions exist for any programming puzzle.

Leave a Reply