# mmbeyrem's solution

## to Collatz Conjecture in the Kotlin Track

Published at Apr 01 2021 · 0 comments
Instructions
Test suite
Solution

The Collatz Conjecture or 3x+1 problem can be summarized as follows:

Take any positive integer n. If n is even, divide n by 2 to get n / 2. If n is odd, multiply n by 3 and add 1 to get 3n + 1. Repeat the process indefinitely. The conjecture states that no matter which number you start with, you will always reach 1 eventually.

Given a number n, return the number of steps required to reach 1.

## Examples

Starting with n = 12, the steps would be as follows:

1. 12
2. 6
3. 3
4. 10
5. 5
6. 16
7. 8
8. 4
9. 2
10. 1

Resulting in 9 steps. So for input n = 12, the return value would be 9.

## Setup

Go through the setup instructions for Kotlin to install the necessary dependencies:

https://exercism.io/tracks/kotlin/installation

## Making the test suite pass

Execute the tests with:

``````\$ gradlew test
``````

Use `gradlew.bat` if you're on Windows

In the test suites all tests but the first have been skipped.

Once you get a test passing, you can enable the next one by removing the `@Ignore` annotation.

## Source

An unsolved problem in mathematics named after mathematician Lothar Collatz https://en.wikipedia.org/wiki/3x_%2B_1_problem

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### CollatzCalculatorTest.kt

``````import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExpectedException
import kotlin.test.assertEquals

class CollatzCalculatorTest {

@Rule
@JvmField
var expectedException: ExpectedException = ExpectedException.none()

@Test
fun `zero steps for 1`() = assertStepsEqual(1, 0)

@Ignore
@Test
fun `divide if even`() = assertStepsEqual(16, 4)

@Ignore
@Test
fun `even and odd steps`() = assertStepsEqual(12, 9)

@Ignore
@Test
fun `large number of even and odd steps`() = assertStepsEqual(1000000, 152)

@Ignore
@Test(expected = IllegalArgumentException::class)
fun `invalid input | zero`() {
steps(0)
}

@Ignore
@Test(expected = IllegalArgumentException::class)
fun `invalid input | negative`() {
steps(-15)
}

}

private fun assertStepsEqual(input: Int, steps: Int) = assertEquals(steps, steps(input))

private fun steps(input: Int) = CollatzCalculator.computeStepCount(input)``````
``````object CollatzCalculator {

fun computeStepCount(start: Int): Int {
require(start>0)
var steps = 0
var value = start
while (value != 1)
{
value =
if (value.isOdd())
(3*value) +1
else
value/2
steps++
}
return steps
}
}

private fun Int.isOdd(): Boolean {
return this %2 !=0
}``````
{"ft_lang_label":"__label__en","ft_lang_prob":0.7187246,"math_prob":0.90948135,"size":2739,"snap":"2021-31-2021-39","text_gpt3_token_len":680,"char_repetition_ratio":0.101645336,"word_repetition_ratio":0.019607844,"special_character_ratio":0.2479007,"punctuation_ratio":0.138833,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.989561,"pos_list":[0,1,2],"im_url_duplicate_count":[null,null,null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2021-07-30T21:00:37Z\",\"WARC-Record-ID\":\"<urn:uuid:e0b21ec5-03ec-43f2-8991-d81126bf3f2d>\",\"Content-Length\":\"17390\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:edf2d681-7965-4681-9036-b3751f91f402>\",\"WARC-Concurrent-To\":\"<urn:uuid:5d8ff92f-7345-4fb4-895d-6b9585fe4089>\",\"WARC-IP-Address\":\"99.80.111.177\",\"WARC-Target-URI\":\"https://exercism.io/tracks/kotlin/exercises/collatz-conjecture/solutions/a549b80659944a0d9bcd17c1e93e091b\",\"WARC-Payload-Digest\":\"sha1:TN4S7LC4PVSTFY3VDFWALF5XTU5NRXW2\",\"WARC-Block-Digest\":\"sha1:5FWYI72RNGNWJYNJUCKU4INU7PL4KEL2\",\"WARC-Identified-Payload-Type\":\"text/html\",\"warc_filename\":\"/cc_download/warc_2021/CC-MAIN-2021-31/CC-MAIN-2021-31_segments_1627046153980.55_warc_CC-MAIN-20210730185206-20210730215206-00149.warc.gz\"}"}