diff options
| -rw-r--r-- | challenge-109/lance-wicks/elm/elm.json | 26 | ||||
| -rw-r--r-- | challenge-109/lance-wicks/elm/src/Chowla.elm | 31 | ||||
| -rw-r--r-- | challenge-109/lance-wicks/elm/tests/N.elm | 41 | ||||
| -rw-r--r-- | challenge-109/lance-wicks/elm/tests/Nums.elm | 19 |
4 files changed, 117 insertions, 0 deletions
diff --git a/challenge-109/lance-wicks/elm/elm.json b/challenge-109/lance-wicks/elm/elm.json new file mode 100644 index 0000000000..418d33c9ab --- /dev/null +++ b/challenge-109/lance-wicks/elm/elm.json @@ -0,0 +1,26 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/browser": "1.0.2", + "elm/core": "1.0.5", + "elm/html": "1.0.0", + "elm-explorations/test": "1.2.2" + }, + "indirect": { + "elm/json": "1.1.3", + "elm/random": "1.0.0", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.2" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} diff --git a/challenge-109/lance-wicks/elm/src/Chowla.elm b/challenge-109/lance-wicks/elm/src/Chowla.elm new file mode 100644 index 0000000000..d5041545ea --- /dev/null +++ b/challenge-109/lance-wicks/elm/src/Chowla.elm @@ -0,0 +1,31 @@ +module Chowla exposing (chowla, n, nums) + +import List + + +nums : Int -> List Int +nums max = + List.range 1 max + |> List.map n + + +n : Int -> Int +n num = + let + denominators = + List.range 2 (num - 1) + + numbers = + List.map (chowla num) denominators + in + List.foldl (+) 0 numbers + + +chowla : Int -> Int -> Int +chowla num denom = + case remainderBy denom num of + 0 -> + denom + + _ -> + 0 diff --git a/challenge-109/lance-wicks/elm/tests/N.elm b/challenge-109/lance-wicks/elm/tests/N.elm new file mode 100644 index 0000000000..6a81cde5a1 --- /dev/null +++ b/challenge-109/lance-wicks/elm/tests/N.elm @@ -0,0 +1,41 @@ +module N exposing (..) + +import Chowla +import Expect +import Test exposing (..) + + +suite : Test +suite = + describe "Chowla number" + [ test "n 1" <| + \_ -> Chowla.n 1 |> Expect.equal 0 + , test "n 4" <| + \_ -> Chowla.n 4 |> Expect.equal 2 + , test "n 6" <| + \_ -> Chowla.n 6 |> Expect.equal 5 + ] + + +chowla : Test +chowla = + describe "Chowla number logic" + [ test "chowla 2 2" <| + \_ -> Chowla.chowla 2 2 |> Expect.equal 2 + , test "chowla 2 3" <| + \_ -> Chowla.chowla 2 3 |> Expect.equal 0 + , test "chowla 2 4" <| + \_ -> Chowla.chowla 2 4 |> Expect.equal 0 + ] + + +list : Test +list = + describe "First 20 Chowla numbers" + [ test "nums 6" <| + \_ -> Chowla.nums 6 |> Expect.equal [ 0, 0, 0, 2, 0, 5 ] + , test "nums 22" <| + \_ -> Chowla.nums 22 |> Expect.equal [ 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21, 10, 13 ] + , test "nums 20" <| + \_ -> Chowla.nums 20 |> Expect.equal [ 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21 ] + ] diff --git a/challenge-109/lance-wicks/elm/tests/Nums.elm b/challenge-109/lance-wicks/elm/tests/Nums.elm new file mode 100644 index 0000000000..8fc89e54b8 --- /dev/null +++ b/challenge-109/lance-wicks/elm/tests/Nums.elm @@ -0,0 +1,19 @@ +module Nums exposing (..) + +import Chowla +import Expect +import Test exposing (..) + + +suite : Test +suite = + describe "Chowla numbers" + [ test "nums 20" <| + \_ -> Chowla.nums 20 |> Expect.equal [ 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21 ] + , test "nums 18" <| + \_ -> Chowla.nums 18 |> Expect.equal [ 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20 ] + , test "nums 6" <| + \_ -> Chowla.nums 6 |> Expect.equal [ 0, 0, 0, 2, 0, 5 ] + , test "nums 4" <| + \_ -> Chowla.nums 4 |> Expect.equal [ 0, 0, 0, 2 ] + ] |
