Skip to content

Commit f9cae56

Browse files
committed
Solve 'Help the farmer to count rabbits, chickens and cows' kata
1 parent 32f435b commit f9cae56

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

src/Farmer.hs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module Farmer where
2+
3+
import Preloaded (AnimalCount (..))
4+
5+
-- https://www.codewars.com/kata/5a02037ac374cbab41000089/train/haskell
6+
7+
getAnimalsCount :: Int -> Int -> Int -> AnimalCount
8+
getAnimalsCount legs heads horns = AnimalCount rabbits chickens cows
9+
where
10+
cows = horns `div` 2
11+
chickens = 2 * heads - legs `div` 2
12+
rabbits = heads - cows - chickens

src/Preloaded.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,10 @@ animals = ["Rat", "Ox", "Tiger", "Rabbit", "Dragon", "Snake", "Horse", "Goat", "
4949
elements = ["Wood", "Fire", "Earth", "Metal", "Water"]
5050

5151
data Colour = White | Black deriving (Show, Eq, Ord, Enum, Bounded)
52+
53+
data AnimalCount = AnimalCount
54+
{ rabbits :: Int,
55+
chickens :: Int,
56+
cows :: Int
57+
}
58+
deriving (Show, Eq)

test/FarmerSpec.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module FarmerSpec where
2+
3+
import Test.Hspec
4+
import Test.HUnit
5+
import Farmer (getAnimalsCount)
6+
import Preloaded
7+
8+
spec :: Spec
9+
spec = do
10+
it "Fixed Tests" $ do
11+
assertEqual "getAnimalsCount 34 11 6" (AnimalCount 3 5 3) $
12+
getAnimalsCount 34 11 6
13+
assertEqual "getAnimalsCount 154 42 10" (AnimalCount 30 7 5) $
14+
getAnimalsCount 154 42 10

0 commit comments

Comments
 (0)