aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-03-14 01:28:27 +0000
committerGitHub <noreply@github.com>2021-03-14 01:28:27 +0000
commit062fc275a6ce48f56997aaaade46dd87cdf877f7 (patch)
tree3ab2004fff56e1ef40873780f50fe90d57c37b0c
parentd7000b22a26ffc1a8a6f689924d0c97aa709b781 (diff)
parent572710fb0575cfa3f1531c51ed5585b283d76181 (diff)
downloadperlweeklychallenge-club-062fc275a6ce48f56997aaaade46dd87cdf877f7.tar.gz
perlweeklychallenge-club-062fc275a6ce48f56997aaaade46dd87cdf877f7.tar.bz2
perlweeklychallenge-club-062fc275a6ce48f56997aaaade46dd87cdf877f7.zip
Merge pull request #3712 from lancew/branch-for-challenge-103
Add elm solution
-rw-r--r--challenge-103/lance-wicks/blog.txt1
-rw-r--r--challenge-103/lance-wicks/elm/elm.json28
-rw-r--r--challenge-103/lance-wicks/elm/src/Zodiac.elm103
-rw-r--r--challenge-103/lance-wicks/elm/tests/Zodiac_test.elm110
4 files changed, 242 insertions, 0 deletions
diff --git a/challenge-103/lance-wicks/blog.txt b/challenge-103/lance-wicks/blog.txt
new file mode 100644
index 0000000000..d804fe730c
--- /dev/null
+++ b/challenge-103/lance-wicks/blog.txt
@@ -0,0 +1 @@
+https://perl.kiwi/tales/2021/03/13/chinese-zodiac-calculation-in-perl-and-elm/
diff --git a/challenge-103/lance-wicks/elm/elm.json b/challenge-103/lance-wicks/elm/elm.json
new file mode 100644
index 0000000000..7468f5e5cd
--- /dev/null
+++ b/challenge-103/lance-wicks/elm/elm.json
@@ -0,0 +1,28 @@
+{
+ "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"
+ },
+ "indirect": {
+ "elm/json": "1.1.3",
+ "elm/time": "1.0.0",
+ "elm/url": "1.0.0",
+ "elm/virtual-dom": "1.0.2"
+ }
+ },
+ "test-dependencies": {
+ "direct": {
+ "elm-explorations/test": "1.2.2"
+ },
+ "indirect": {
+ "elm/random": "1.0.0"
+ }
+ }
+}
diff --git a/challenge-103/lance-wicks/elm/src/Zodiac.elm b/challenge-103/lance-wicks/elm/src/Zodiac.elm
new file mode 100644
index 0000000000..ba795138ae
--- /dev/null
+++ b/challenge-103/lance-wicks/elm/src/Zodiac.elm
@@ -0,0 +1,103 @@
+module Zodiac exposing (..)
+
+import Array
+
+
+table_index : Int -> Int
+table_index year =
+ let
+ step1 =
+ year - 3
+
+ step2 =
+ step1 // 60
+
+ step3 =
+ step1 - (60 * step2)
+ in
+ step3
+
+
+sign_from_year : Int -> String
+sign_from_year year =
+ let
+ zodiac_table =
+ table
+
+ index =
+ table_index year
+ in
+ case Array.get index zodiac_table of
+ Just sign ->
+ sign
+
+ Nothing ->
+ "ERROR: year->" ++ String.fromInt year ++ " index->" ++ String.fromInt index
+
+
+table =
+ let
+ zodiac =
+ [ "" -- Left blank intentionally
+ , "Wood Rat"
+ , "Wood Ox"
+ , "Fire Tiger"
+ , "Fire Rabbit"
+ , "Earth Dragon"
+ , "Earth Snake"
+ , "Metal Horse"
+ , "Metal Goat"
+ , "Water Monkey"
+ , "Water Rooster"
+ , "Wood Dog"
+ , "Wood Pig"
+ , "Fire Rat"
+ , "Fire Ox"
+ , "Earth Tiger"
+ , "Earth Rabbit"
+ , "Metal Dragon"
+ , "Metal Snake"
+ , "Water Horse"
+ , "Water Goat"
+ , "Wood Monkey"
+ , "Wood Rooster"
+ , "Fire Dog"
+ , "Fire Pig"
+ , "Earth Rat"
+ , "Earth Ox"
+ , "Metal Tiger"
+ , "Metal Rabbit"
+ , "Water Dragon"
+ , "Water Snake"
+ , "Wood Horse"
+ , "Wood Goat"
+ , "Fire Monket"
+ , "Fire Rooster"
+ , "Earth Dog"
+ , "Earth Pig"
+ , "Metal Rat"
+ , "Metal Ox"
+ , "Water Tiger"
+ , "Water Rabbit"
+ , "Wood Dragon"
+ , "Wood Snake"
+ , "Fire Horse"
+ , "Fire Goat"
+ , "Earth Monkey"
+ , "Earth Rooster"
+ , "Metal Dog"
+ , "Metal Pig"
+ , "Water Rat"
+ , "Water Ox"
+ , "Wood Tiger"
+ , "Wood Rabbit"
+ , "Fire Dragon"
+ , "Fire Snake"
+ , "Earth Horse"
+ , "Earth Goat"
+ , "Metal Monkey"
+ , "Metal Rooster"
+ , "Water Dog"
+ ]
+ in
+ Array.fromList zodiac
diff --git a/challenge-103/lance-wicks/elm/tests/Zodiac_test.elm b/challenge-103/lance-wicks/elm/tests/Zodiac_test.elm
new file mode 100644
index 0000000000..5ac8373c88
--- /dev/null
+++ b/challenge-103/lance-wicks/elm/tests/Zodiac_test.elm
@@ -0,0 +1,110 @@
+module Zodiac_test exposing (..)
+
+import Array
+import Browser exposing (element)
+import Expect exposing (Expectation)
+import Fuzz exposing (Fuzzer, int, list, string)
+import Html exposing (footer)
+import Test exposing (..)
+import Zodiac exposing (..)
+
+
+sign_from_year_test =
+ describe "Zodiac sign_from_year"
+ [ test "1967 -> Fire Goat" <|
+ \_ ->
+ let
+ sign =
+ Zodiac.sign_from_year 1967
+ in
+ Expect.equal sign "Fire Goat"
+ , test "2017 -> Fire Rooster" <|
+ \_ ->
+ let
+ sign =
+ Zodiac.sign_from_year 2017
+ in
+ Expect.equal sign "Fire Rooster"
+ , test "1938 -> Earth Tiger" <|
+ \_ ->
+ let
+ sign =
+ Zodiac.sign_from_year 1938
+ in
+ Expect.equal sign "Earth Tiger"
+ , test "1973 -> Water Ox" <|
+ \_ ->
+ let
+ sign =
+ Zodiac.sign_from_year 1973
+ in
+ Expect.equal sign "Water Ox"
+ ]
+
+
+table_index_test =
+ describe "Zodiac table_index"
+ [ test "1967 -> 44" <|
+ \_ ->
+ let
+ index =
+ Zodiac.table_index 1967
+ in
+ Expect.equal index 44
+ , test "2017 -> 34" <|
+ \_ ->
+ let
+ index =
+ Zodiac.table_index 2017
+ in
+ Expect.equal index 34
+ , test "1973" <|
+ \_ ->
+ let
+ index =
+ Zodiac.table_index 1973
+ in
+ Expect.equal index 50
+ ]
+
+
+table_test =
+ describe "Zodiac table"
+ [ test "60 rows" <|
+ \_ ->
+ let
+ ztable =
+ Zodiac.table
+ in
+ Expect.equal (Array.length ztable) 60
+ , test "row 44 -> Fire Goat" <|
+ \_ ->
+ let
+ ztable =
+ Zodiac.table
+
+ element =
+ case Array.get 44 ztable of
+ Just foo ->
+ foo
+
+ Nothing ->
+ "Error!"
+ in
+ Expect.equal element "Fire Goat"
+ , test "row 34 -> Fire Rooster" <|
+ \_ ->
+ let
+ ztable =
+ Zodiac.table
+
+ element =
+ case Array.get 34 ztable of
+ Just foo ->
+ foo
+
+ Nothing ->
+ "Error!"
+ in
+ Expect.equal element "Fire Rooster"
+ ]