Added CollatzConjecture

This commit is contained in:
Morten Nygaard Åsnes 2017-10-07 18:36:25 +02:00
parent 243915c4eb
commit 6b76c9b1d5
6 changed files with 104 additions and 0 deletions

View file

@ -0,0 +1 @@
module CollatzConjecture exposing (..)

View file

@ -0,0 +1,19 @@
module CollatzConjecture exposing (collatz)
collatz : Int -> Result String Int
collatz start =
if start <= 0 then
Err "Only positive numbers are allowed"
else
Ok (collatzHelper 0 start)
collatzHelper : Int -> Int -> Int
collatzHelper steps start =
if start == 1 then
steps
else if start % 2 == 0 then
collatzHelper (1 + steps) (start // 2)
else
collatzHelper (1 + steps) (3 * start + 1)

View file

@ -0,0 +1,15 @@
{
"version": "3.0.0",
"summary": "Exercism problems in Elm.",
"repository": "https://github.com/exercism/elm.git",
"license": "BSD3",
"source-directories": [
"."
],
"exposed-modules": [],
"dependencies": {
"elm-lang/core": "5.0.0 <= v < 6.0.0"
},
"elm-version": "0.18.0 <= v < 0.19.0"
}

View file

@ -0,0 +1,14 @@
{
"description": "Exercism/Elm",
"repository": "https://github.com/exercism/elm.git",
"license": "MIT",
"scripts": {
"postinstall": "elm-package install -y",
"watch": "elm-test --watch",
"test": "elm-test"
},
"dependencies": {
"elm": "0.18.0",
"elm-test": "0.18.3"
}
}

View file

@ -0,0 +1,39 @@
module Tests exposing (..)
import Test exposing (..)
import Expect
import CollatzConjecture exposing (collatz)
tests : Test
tests =
describe "CollatzConjecture tests"
[ test "zero steps for one" <|
\() ->
Expect.equal (Ok 0) (collatz 1)
-- Once you get the first test passing, remove the
-- `skip <|` (just leave the comma) on the next
-- lines to continue!
, skip <|
test "divide if even" <|
\() ->
Expect.equal (Ok 4) (collatz 16)
, skip <|
test "even and odd step" <|
\() ->
Expect.equal (Ok 9) (collatz 12)
, skip <|
test "Large number of even and odd step" <|
\() ->
Expect.equal (Ok 152) (collatz 1000000)
, skip <|
test "zero is an error" <|
\() ->
Expect.equal (Err "Only positive numbers are allowed") (collatz 0)
, skip <|
test "negative values is an error" <|
\() ->
Expect.equal (Err "Only positive numbers are allowed") (collatz -15)
]

View file

@ -0,0 +1,16 @@
{
"version": "3.0.0",
"summary": "Exercism problems in Elm.",
"repository": "https://github.com/exercism/elm.git",
"license": "BSD3",
"source-directories": [
".",
".."
],
"exposed-modules": [],
"dependencies": {
"elm-lang/core": "5.0.0 <= v < 6.0.0",
"elm-community/elm-test": "4.0.0 <= v < 5.0.0"
},
"elm-version": "0.18.0 <= v < 0.19.0"
}