diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-03-14 01:28:27 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-14 01:28:27 +0000 |
| commit | 062fc275a6ce48f56997aaaade46dd87cdf877f7 (patch) | |
| tree | 3ab2004fff56e1ef40873780f50fe90d57c37b0c | |
| parent | d7000b22a26ffc1a8a6f689924d0c97aa709b781 (diff) | |
| parent | 572710fb0575cfa3f1531c51ed5585b283d76181 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-103/lance-wicks/elm/elm.json | 28 | ||||
| -rw-r--r-- | challenge-103/lance-wicks/elm/src/Zodiac.elm | 103 | ||||
| -rw-r--r-- | challenge-103/lance-wicks/elm/tests/Zodiac_test.elm | 110 |
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" + ] |
