Tracks
/
Scheme
Scheme
/
Exercises
/
Collatz Conjecture
Collatz Conjecture

Collatz Conjecture

Easy

Introduction

One evening, you stumbled upon an old notebook filled with cryptic scribbles, as though someone had been obsessively chasing an idea. On one page, a single question stood out: Can every number find its way to 1? It was tied to something called the Collatz Conjecture, a puzzle that has baffled thinkers for decades.

The rules were deceptively simple. Pick any positive integer.

  • If it's even, divide it by 2.
  • If it's odd, multiply it by 3 and add 1.

Then, repeat these steps with the result, continuing indefinitely.

Curious, you picked number 12 to test and began the journey:

12 ➜ 6 ➜ 3 ➜ 10 ➜ 5 ➜ 16 ➜ 8 ➜ 4 ➜ 2 ➜ 1

Counting from the second number (6), it took 9 steps to reach 1, and each time the rules repeated, the number kept changing. At first, the sequence seemed unpredictable β€” jumping up, down, and all over. Yet, the conjecture claims that no matter the starting number, we'll always end at 1.

It was fascinating, but also puzzling. Why does this always seem to work? Could there be a number where the process breaks down, looping forever or escaping into infinity? The notebook suggested solving this could reveal something profound β€” and with it, fame, fortune, and a place in history awaits whoever could unlock its secrets.

Instructions

Given a positive integer, return the number of steps it takes to reach 1 according to the rules of the Collatz Conjecture.

Track Specific Notes

Don't worry about validating input for this track -- all inputs will be natural numbers.

Running and testing your solutions

From the command line

Simply type make chez if you're using ChezScheme or make guile if you're using GNU Guile. Sometimes the name for the scheme binary on your system will differ from the defaults. When this is the case, you'll need to tell make by running make chez chez=your-chez-binary or make guile guile=your-guile-binary.

From a REPL

  • Enter (load "test.scm") at the repl prompt.
  • Develop your solution in collatz-conjecture.scm reloading as you go.
  • Run (test) to check your solution.

Failed Test Cases

If some of the test cases fail, you should see the failing input and the expected output. The failing input is presented as a list because the tests call your solution by (apply collatz-conjecture input-list). To learn more about apply see The Scheme Programming Language -- Chapter 5


Source

WikipediaThe link opens in a new window or tab
Edit via GitHub The link opens in a new window or tab
Scheme Exercism

Ready to start Collatz Conjecture?

Sign up to Exercism to learn and master Scheme with 39 exercises, and real human mentoring, all for free.