forked from karl-run/haskell-timeseries-oppgave
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtimeseries.hs
36 lines (31 loc) · 1.36 KB
/
timeseries.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import Distribution.Simple.CCompiler (filenameCDialect)
import Text.Read (readEither)
-- Dager er inklusive i begge ender
-- { start: 1, end: 5 } = 5 hele dager, 1, 2, 3, 4, 5
data TimeRange = TimeRange
{ start :: Int,
end :: Int
}
deriving (Show, Read, Eq)
-- Vi lurer på om personen har vært sykmeldt i 6 uker eller mer (42 dager)
-- UTEN et opphold på 16 dager eller mer.
--
-- F.eks:
-- Sykmeldt i 30 dager, også friskmeldt i 14 dager, også sykmeldt i 30 dager = true
-- Sykmeldt i 30 dager, også friskmeldt i 16 dager, også sykmeldt i 30 dager = false
-- Syk i 10 dager, frisk i 10, syk i 10, frisk i 10, syk i 10 er et reknet
-- som "sammenhengende" syk i 50 dager, med ingen opphold over 16 dager = true
continuouslySick :: Int -> Int -> [TimeRange] -> Bool
continuouslySick weeks allowedGap _ = False
hasBeencontinuouslySickFor6Weeks :: [TimeRange] -> Bool
hasBeencontinuouslySickFor6Weeks = continuouslySick 6 16
main = do
case1 <- readFile "data1.txt"
case2 <- readFile "data2.txt"
case3 <- readFile "data3.txt"
case4 <- readFile "data4.txt"
print $ map (fmap hasBeencontinuouslySickFor6Weeks . parseTimeRange) [case1, case2, case3, case4]
where
-- readEither brukes så vi får feilen i outputten om man har feil struktur på data-filenameCDialect
parseTimeRange :: String -> Either String [TimeRange]
parseTimeRange = readEither