Fix errors in UTC conversion in UE2, add initial UE2.A3 implementation

This commit is contained in:
Ivaylo Ivanov 2021-10-28 21:51:19 +02:00
parent c440186462
commit ed91bdfc67

View File

@ -89,13 +89,13 @@ is_date_valid (d, u)
| monat d == Feb = | monat d == Feb =
let y = jahr d in let y = jahr d in
let t = tag d in let t = tag d in
if y `mod` 4 /= 0 && (day_to_num t) > (day_to_num XXVIII) then False if y `mod` 4 /= 0 && (day_to_str t) > (day_to_str XXVIII) then False
else else
if y `mod` 100 == 0 && y `mod` 400 /= 0 then False if y `mod` 100 == 0 && y `mod` 400 /= 0 then False
else else
if (day_to_num t) > (day_to_num XXIX) then False if (day_to_str t) > (day_to_str XXIX) then False
else True else True
| (day_to_num (tag d)) > (day_to_num XXX) && not(monat d `elem` full_months) = False | (day_to_str (tag d)) > (day_to_str XXX) && not(monat d `elem` full_months) = False
| otherwise = True | otherwise = True
uhrzeit_vhds :: Uhrzeit -> VHDS uhrzeit_vhds :: Uhrzeit -> VHDS
@ -115,25 +115,42 @@ anzahl :: DreiG_Status -> Anzahl
anzahl (Geimpft (_, a)) = a anzahl (Geimpft (_, a)) = a
-- Dumb conversion functions -- Dumb conversion functions
person_to_string :: Person -> VorUndNachname
person_to_string p = (show (vorname p)) ++ " " ++ (show (nachname p))
timeFormat = "%Y-%m-%d %l:%M:%S %p"
timeFormat = "%Y-%m-%d %0I:%0M:%S %p"
understandTime = parseTimeOrError True defaultTimeLocale timeFormat understandTime = parseTimeOrError True defaultTimeLocale timeFormat
convert_to_utc :: (Datum, Uhrzeit) -> UTCTime convert_to_utc :: (Datum, Uhrzeit) -> UTCTime
convert_to_utc (d, u) = convert_to_utc (d, u) =
let let
day = show (day_to_num (tag d)) day = day_to_str (tag d)
month = show (month_to_num (monat d)) month = month_to_str (monat d)
year = show (jahr d) year = show (jahr d)
vm = vm_to_ampm (uhrzeit_vornach u) vm = vm_to_ampm (uhrzeit_vornach u)
vhds = show (vhds_to_num (uhrzeit_vhds u)) vhds = vhds_to_str (uhrzeit_vhds u)
hour = (if vhds /= "0" then show (hour_to_num (uhrzeit_stunde u) - 1) else show (hour_to_num (uhrzeit_stunde u))) hour = (convert_hour (uhrzeit_stunde u) vhds)
date = year ++ "-" ++ month ++ "-" ++ day date = year ++ "-" ++ month ++ "-" ++ day
time = hour ++ ":" ++ vhds ++ ":00" time = hour ++ ":" ++ vhds ++ ":00"
datetime = date ++ " " ++ time ++ " " ++ vm datetime = date ++ " " ++ time ++ " " ++ vm
in in
understandTime datetime understandTime datetime
convert_hour :: Stunde -> String -> String
convert_hour s v
| v /= "00" =
if (hour_to_num s - 1) <= 9 then
"0" ++ show (hour_to_num s - 1)
else
show (hour_to_num s - 1)
| otherwise =
if hour_to_num s <= 9 then
"0" ++ show (hour_to_num s)
else
show (hour_to_num s)
vm_to_ampm :: VorNachMittag -> String vm_to_ampm :: VorNachMittag -> String
vm_to_ampm vm vm_to_ampm vm
| vm == VM = "am" | vm == VM = "am"
@ -153,58 +170,58 @@ hour_to_num Zehn = 10
hour_to_num Elf = 11 hour_to_num Elf = 11
hour_to_num Zwoelf = 12 hour_to_num Zwoelf = 12
vhds_to_num :: VHDS -> Nat1 vhds_to_str :: VHDS -> String
vhds_to_num Schlag = 0 vhds_to_str Schlag = "00"
vhds_to_num Viertel = 15 vhds_to_str Viertel = "15"
vhds_to_num Halb = 30 vhds_to_str Halb = "30"
vhds_to_num Dreiviertel = 45 vhds_to_str Dreiviertel = "45"
day_to_num :: Tag -> Nat1 day_to_str :: Tag -> String
day_to_num I = 1 day_to_str I = "01"
day_to_num II = 2 day_to_str II = "02"
day_to_num III = 3 day_to_str III = "03"
day_to_num IV = 4 day_to_str IV = "04"
day_to_num V = 5 day_to_str V = "05"
day_to_num VI = 6 day_to_str VI = "06"
day_to_num VII = 7 day_to_str VII = "07"
day_to_num VIII = 8 day_to_str VIII = "08"
day_to_num IX = 9 day_to_str IX = "09"
day_to_num X = 10 day_to_str X = "10"
day_to_num XI = 11 day_to_str XI = "11"
day_to_num XII = 12 day_to_str XII = "12"
day_to_num XIII = 13 day_to_str XIII = "13"
day_to_num XIV = 14 day_to_str XIV = "14"
day_to_num XV = 15 day_to_str XV = "15"
day_to_num XVI = 16 day_to_str XVI = "16"
day_to_num XVII = 17 day_to_str XVII = "17"
day_to_num XVIII = 18 day_to_str XVIII = "18"
day_to_num XIX = 19 day_to_str XIX = "19"
day_to_num XX = 20 day_to_str XX = "20"
day_to_num XXI = 21 day_to_str XXI = "21"
day_to_num XXII = 22 day_to_str XXII = "22"
day_to_num XXIII = 23 day_to_str XXIII = "23"
day_to_num XXIV = 24 day_to_str XXIV = "24"
day_to_num XXV = 25 day_to_str XXV = "25"
day_to_num XXVI = 26 day_to_str XXVI = "26"
day_to_num XXVII = 27 day_to_str XXVII = "27"
day_to_num XXVIII = 28 day_to_str XXVIII = "28"
day_to_num XXIX = 29 day_to_str XXIX = "29"
day_to_num XXX = 30 day_to_str XXX = "30"
day_to_num XXXI = 31 day_to_str XXXI = "31"
month_to_num :: Monat -> Nat1 month_to_str :: Monat -> String
month_to_num Jan = 1 month_to_str Jan = "01"
month_to_num Feb = 2 month_to_str Feb = "02"
month_to_num Mar = 3 month_to_str Mar = "03"
month_to_num Apr = 4 month_to_str Apr = "04"
month_to_num Mai = 5 month_to_str Mai = "05"
month_to_num Jun = 6 month_to_str Jun = "06"
month_to_num Jul = 7 month_to_str Jul = "07"
month_to_num Aug = 8 month_to_str Aug = "08"
month_to_num Sep = 9 month_to_str Sep = "09"
month_to_num Okt = 10 month_to_str Okt = "10"
month_to_num Nov = 11 month_to_str Nov = "11"
month_to_num Dez = 12 month_to_str Dez = "12"
-- Aufgabe A.2 -- Aufgabe A.2
{- {-
@ -291,13 +308,18 @@ calculate_time_diff u1 u2 =
-- Aufgabe A.3 -- Aufgabe A.3
--einzulassende :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> Einzulassende
{- Knapp, aber gut nachvollziehbar geht einzulassende folgendermassen vor: {- Knapp, aber gut nachvollziehbar geht einzulassende folgendermassen vor:
... ...
-} -}
einzulassende :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> Einzulassende
einzulassende p r k = allowed_people p r k []
allowed_people :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> [VorUndNachname] -> Einzulassende
allowed_people (p:ps) r k res
| (einzulassen (p, r, k)) == Einlassen = allowed_people ps r k (res ++ [person_to_string p])
| otherwise = allowed_people ps r k res
-- Aufgabe A.4 -- Aufgabe A.4
--einzulassende_abzuweisende :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> ([Einzulassende],[Abzuweisende]) --einzulassende_abzuweisende :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> ([Einzulassende],[Abzuweisende])