Skip to content

Commit 6bf3b15

Browse files
committed
Solve 'Can Santa save Christmas?' kata
1 parent 5083c95 commit 6bf3b15

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/SaveChristmas.hs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module SaveChristmas (determineTime) where
2+
3+
-- https://www.codewars.com/kata/5857e8bb9948644aa1000246/train/haskell
4+
5+
import Data.Maybe (fromJust, mapMaybe)
6+
import Data.Time (DiffTime, defaultTimeLocale, diffTimeToPicoseconds, parseTimeM)
7+
8+
determineTime :: [String] -> Bool
9+
determineTime arr = needed <= oneDay
10+
where
11+
needed = sum . map diffTimeToPicoseconds . mapMaybe readDiffTime $ arr :: Integer
12+
oneDay = readPicoseconds "24:00:00"
13+
14+
readPicoseconds :: String -> Integer
15+
readPicoseconds = diffTimeToPicoseconds . fromJust . readDiffTime
16+
17+
readDiffTime :: String -> Maybe DiffTime
18+
readDiffTime = parseTimeM True defaultTimeLocale "%H:%M:%S"

test/SaveChristmasSpec.hs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module SaveChristmasSpec where
2+
3+
import SaveChristmas (determineTime)
4+
import Test.Hspec
5+
6+
spec :: Spec
7+
spec = do
8+
describe "Fixed Tests" $ do
9+
mapM_
10+
(uncurry fixedTest)
11+
[ (["01:00:00", "02:30:00"], True),
12+
(["01:00:00", "02:30:00", "22:00:00"], False),
13+
(["12:00:00", "12:00:00"], True),
14+
([], True)
15+
]
16+
17+
fixedTest :: [String] -> Bool -> Spec
18+
fixedTest arr expected = it (show arr) $ determineTime arr `shouldBe` expected

0 commit comments

Comments
 (0)