Skip to content

Commit 0e8f2e5

Browse files
committed
Solve 'Chinese Zodiac' kata
1 parent eb7c442 commit 0e8f2e5

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

src/ChineseZodiac.hs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module ChineseZodiac where
2+
3+
import Preloaded (animals, elements)
4+
5+
-- https://www.codewars.com/kata/57a73e697cb1f31dd70000d2/train/haskell
6+
7+
chineseZodiac :: Int -> String
8+
chineseZodiac year = unwords [element, animal]
9+
where
10+
animal = (animals !!) . (`mod` length animals) . (subtract 1924) $ year
11+
element = (elements !!) . (`mod` length elements) . (`div` 2) . (subtract 1924) $ year

src/Preloaded.hs

+4
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,7 @@ data Circle = Circle
4141
} deriving (Show, Eq)
4242

4343
newtype Player = Player {name :: String} deriving (Show, Eq)
44+
45+
animals = ["Rat", "Ox", "Tiger", "Rabbit", "Dragon", "Snake", "Horse", "Goat", "Monkey", "Rooster", "Dog", "Pig"]
46+
47+
elements = ["Wood", "Fire", "Earth", "Metal", "Water"]

test/ChineseZodiacSpec.hs

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
module ChineseZodiacSpec where
2+
3+
import ChineseZodiac (chineseZodiac)
4+
import Test.Hspec
5+
6+
spec :: Spec
7+
spec = do
8+
describe "Fixed Tests" $ do
9+
it "Works on some basic cases" $ do
10+
chineseZodiac 1965 `shouldBe` "Wood Snake"
11+
chineseZodiac 1998 `shouldBe` "Earth Tiger"
12+
chineseZodiac 2016 `shouldBe` "Fire Monkey"
13+
chineseZodiac 1924 `shouldBe` "Wood Rat"
14+
chineseZodiac 1968 `shouldBe` "Earth Monkey"
15+
chineseZodiac 2162 `shouldBe` "Water Dog"
16+
chineseZodiac 6479 `shouldBe` "Earth Goat"
17+
chineseZodiac 3050 `shouldBe` "Metal Dog"
18+
chineseZodiac 6673 `shouldBe` "Water Rooster"
19+
chineseZodiac 6594 `shouldBe` "Wood Tiger"
20+
chineseZodiac 9911 `shouldBe` "Metal Goat"
21+
chineseZodiac 2323 `shouldBe` "Water Rabbit"
22+
chineseZodiac 3448 `shouldBe` "Earth Rat"
23+
chineseZodiac 1972 `shouldBe` "Water Rat"

0 commit comments

Comments
 (0)