From 5b09fc7b2eb739104f62f576a2da421dff0158a1 Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Sun, 24 Oct 2021 12:25:01 +0200 Subject: [PATCH] Add initial implementation for UE2 A1, begin A2 --- code/Angabe2.hs | 90 +++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 37 deletions(-) diff --git a/code/Angabe2.hs b/code/Angabe2.hs index ae42c78..4c095ae 100644 --- a/code/Angabe2.hs +++ b/code/Angabe2.hs @@ -14,33 +14,45 @@ module Angabe2 where type Nat1 = Int -newtype Vorname = Vorname String deriving Show -newtype Nachname = Nachname String deriving Show -data VHDS = Viertel | Halb | Dreiviertel | Schlag deriving (Eq,Ord) +newtype Vorname = Vorname String deriving (Eq,Show,Ord) +newtype Nachname = Nachname String deriving (Eq,Show,Ord) +data VHDS = Viertel | Halb | Dreiviertel | Schlag deriving (Eq,Ord,Show) data Stunde = Eins | Zwei | Drei | Vier | Fuenf | Sechs - | Sieben | Acht | Neun | Zehn | Elf - | Zwoelf deriving (Eq,Ord) -data VorNachMittag = VM | NM deriving (Eq,Ord) -newtype Uhrzeit = U (VHDS,Stunde,VorNachMittag) deriving (Eq,Ord) + | Sieben | Acht | Neun | Zehn | Elf + | Zwoelf deriving (Eq,Ord,Show) +data VorNachMittag = VM | NM deriving (Eq,Ord,Show) +newtype Uhrzeit = U (VHDS,Stunde,VorNachMittag) deriving (Eq,Ord,Show) data Tag = I | II | III | IV | V | VI | VII | VIII | IX | X - | XI | XII | XIII | XIV | XV | XVI | XVII | XVIII + | XI | XII | XIII | XIV | XV | XVI | XVII | XVIII | XIX | XX | XXI | XXII | XXIII | XXIV | XXV - | XXVI | XXVII | XXVIII | XXIX | XXX - | XXXI deriving (Eq,Ord) -data Monat = Jan | Feb | Mar | Apr | Mai | Jun - | Jul | Aug | Sep | Okt | Nov | Dez deriving (Eq,Ord) + | XXVI | XXVII | XXVIII | XXIX | XXX + | XXXI deriving (Eq,Ord,Show) +data Monat = Jan | Feb | Mar | Apr | Mai | Jun + | Jul | Aug | Sep | Okt | Nov | Dez deriving (Eq,Ord,Show) type Jahr = Nat1 -data Datum = D Tag Monat Jahr deriving Eq -data Testart = PCR | Antigen deriving Eq -data Impfstoff = AstraZeneca | BioNTec | JundJ | Moderna - | Sputnik | Sinovac deriving (Eq,Show) -data Anzahl = Einmal | Zweimal deriving Eq -data DreiG_Status = Geimpft (Impfstoff,Anzahl) | Genesen - | Getestet Testart Datum Uhrzeit - | Udrei deriving (Eq,Show) +data Datum = D Tag Monat Jahr deriving (Eq,Show,Ord) +data Testart = PCR | Antigen deriving (Eq,Show,Ord) +data Impfstoff = AstraZeneca | BioNTec | JundJ | Moderna + | Sputnik | Sinovac deriving (Eq,Show,Ord) +data Anzahl = Einmal | Zweimal deriving (Eq,Show,Ord) +data DreiG_Status = Geimpft { + impfstoff :: Impfstoff, + anzahl :: Anzahl + } + | Genesen + | Getestet { + testart :: Testart, + datum :: Datum, + uhrzeit :: Uhrzeit + } + | Udrei deriving (Eq,Show,Ord) -- Udrei: Ungetestet, Ungenesen, Ungeimpft data Regel = DreiG | ZweieinhalbG | ZweiG deriving Eq -data Person = P Vorname Nachname DreiG_Status deriving (Eq,Ord) +data Person = P { + vorname :: Vorname, + nachname :: Nachname, + dreig_status :: DreiG_Status + } deriving (Eq,Ord) type Einlassbegehrende = [Person] type VorUndNachname = String type Einzulassende = [VorUndNachname] @@ -50,47 +62,51 @@ data Kontrollergebnis = Einlassen | Abweisen | Ungueltig deriving (Eq,Show) -- Aufgabe A.2 - -einzulassen :: (Person,Regel,Kontrollzeitpunkt) -> Kontrollergebnis - - {- Knapp, aber gut nachvollziehbar geht einzulassen folgendermassen vor: ... -} +einzulassen :: (Person,Regel,Kontrollzeitpunkt) -> Kontrollergebnis +einzulassen (p, r, k) + | dreig_status p == Udrei = Abweisen + | r == ZweiG = + if testart (dreig_status p) == Antigen then Abweisen + else Einlassen + | otherwise = Einlassen + -- Aufgabe A.3 -einzulassende :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> Einzulassende +--einzulassende :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> Einzulassende -{- Knapp, aber gut nachvollziehbar geht einzulassende folgendermassen vor: - ... +{- Knapp, aber gut nachvollziehbar geht einzulassende folgendermassen vor: + ... -} -- Aufgabe A.4 -einzulassende_abzuweisende :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> ([Einzulassende],[Abzuweisende]) +--einzulassende_abzuweisende :: Einlassbegehrende -> Regel -> Kontrollzeitpunkt -> ([Einzulassende],[Abzuweisende]) -{- Knapp, aber gut nachvollziehbar geht einzulassende_abzuweisende folgendermassen vor: - ... +{- Knapp, aber gut nachvollziehbar geht einzulassende_abzuweisende folgendermassen vor: + ... -} -- Aufgabe A.5 -instance Show Uhrzeit where - show ... +--instance Show Uhrzeit where + --show ... -{- Knapp, aber gut nachvollziehbar geht die Implementierung von show fuer Uhrzeit +{- Knapp, aber gut nachvollziehbar geht die Implementierung von show fuer Uhrzeit folgendermassen vor: ... -} -instance Show Datum where - show ... +--instance Show Datum where +-- show ... -{- Knapp, aber gut nachvollziehbar geht die Implementierung von show fuer Datum +{- Knapp, aber gut nachvollziehbar geht die Implementierung von show fuer Datum folgendermassen vor: ... -}