aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-109/lance-wicks/elm/elm.json26
-rw-r--r--challenge-109/lance-wicks/elm/src/Chowla.elm31
-rw-r--r--challenge-109/lance-wicks/elm/tests/N.elm41
-rw-r--r--challenge-109/lance-wicks/elm/tests/Nums.elm19
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 ]
+ ]