From 0fa4a3174c3abb8dc0ef7016d484018c1cee1ab5 Mon Sep 17 00:00:00 2001 From: JS <1924550@stud.hs-mannheim.de> Date: Wed, 29 Jan 2025 11:03:04 +0100 Subject: [PATCH] block 1 exercises --- exercises/block1/1-leap/README.md | 11 +++++-- exercises/block1/2-bob/README.md | 34 ++++++++++++++++++++++ exercises/block1/2-bob/bob.hs | 41 +++++++++++++++++++++++++++ exercises/block1/2-bob/example-input | 10 +++++++ exercises/block1/2-bob/example-output | 10 +++++++ 5 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 exercises/block1/2-bob/example-input create mode 100644 exercises/block1/2-bob/example-output diff --git a/exercises/block1/1-leap/README.md b/exercises/block1/1-leap/README.md index 19aef83..05ef449 100644 --- a/exercises/block1/1-leap/README.md +++ b/exercises/block1/1-leap/README.md @@ -1,4 +1,7 @@ # Übungsaufgabe 1: Schaltjahr + +## Einführung + Eine Schaltjahr (im Gregorianischen Kalender) tritt auf: * In jedem Jahr, das ohne Rest durch 4 teilbar ist. @@ -10,12 +13,16 @@ Einige Beispiele: * ``1900`` war kein Schaltjahr, da es nicht durch ``400`` teilbar ist. * ``2000`` war ein Schaltjahr! +## Anweisungen + Deine Aufgabe ist es, zu bestimmen, ob ein gegebenes Jahr ein Schaltjahr ist. Um diese Aufgabe zu lösen, musst du die Funktion ``isLeapYear`` in der Datei ``leap.hs`` implementieren, die ein Jahr entgegennimmt und bestimmt, ob es ein Schaltjahr ist. +## Ausführen und Testen + Um die Funktion zu testen, kannst du durch die folgenden Commands in diesem Ordner auf der Kommandozeile das Programm compilen und ausführen: -``>ghc leap.hs leap.exe`` +``>ghc leap.hs -o leap.exe`` -``>./leap.exe`` \ No newline at end of file +``>./leap.exe`` diff --git a/exercises/block1/2-bob/README.md b/exercises/block1/2-bob/README.md index e69de29..bf5d23f 100644 --- a/exercises/block1/2-bob/README.md +++ b/exercises/block1/2-bob/README.md @@ -0,0 +1,34 @@ +# Übungsaufgabe 2: Bob +## Einführung + +Bob ist ein träger und fauler Teenager. Er hält sich für sehr cool. Und er zeigt definitiv keine Begeisterung – das wäre uncool. + +Wenn Leute mit ihm sprechen, sind seine Antworten ziemlich begrenzt. + +## Anweisungen + +Deine Aufgabe ist es, zu bestimmen, was Bob jemandem antwortet, wenn man ihn etwas fragt oder ihm etwas sagt. + +Bob gibt nur eine von fünf möglichen Antworten: + +- **"Klar."** Das ist seine Antwort, wenn man ihm eine Frage stellt, z. B. „Wie geht es dir?“. Fragen erkennt man daran, dass sie mit einem Fragezeichen enden. +- **"Whoa, entspann dich!"** Das sagt er, wenn man IHN ANSCHREIT. Schreien erkennt man daran, dass ALLE BUCHSTABEN GROßGESCHRIEBEN SIND. +- **"Chill mal, ich weiß, was ich tue!"** So antwortet er, wenn man ihn anschreit und gleichzeitig eine Frage stellt. +- **"Na gut. Dann eben nicht!"** Das ist seine Reaktion auf Stille. Stille bedeutet, dass nichts gesagt wird oder nur Leerzeichen vorhanden sind. +- **"Whatever."** Das ist seine Antwort auf alles andere. + +Du musst die Funktion `responseFor` implementieren, die Bobs Antwort für eine gegebene Eingabe zurückgibt. Falls du unsicher bist, kannst du die bereitgestellte Signatur verwenden, aber lass dich nicht in deiner Kreativität einschränken: + +```haskell +responseFor :: String -> String +``` + +Zur Lösung dieser Aufgabe können unter anderem die bereits behandelten **Guards** helfen. + +## Ausführen und Testen + +Um die Funktion zu testen, kannst du durch die folgenden Commands in diesem Ordner auf der Kommandozeile das Programm compilen und ausführen: + +``>ghc bob.hs -o bob.exe`` + +``>./bob.exe`` diff --git a/exercises/block1/2-bob/bob.hs b/exercises/block1/2-bob/bob.hs index e69de29..883130b 100644 --- a/exercises/block1/2-bob/bob.hs +++ b/exercises/block1/2-bob/bob.hs @@ -0,0 +1,41 @@ +import System.IO +import Data.Char ( isSpace, isAlpha, isUpper ) + + +isYelling :: [Char] -> Bool +isYelling stmt = any isAlpha stmt && all isUpper (filter isAlpha stmt) + +isQuestion :: [Char] -> Bool +isQuestion stmt = last (filter (not . isSpace) stmt) == '?' + +responseFor :: String -> String +responseFor prompt -- implement here + | all isSpace prompt = "Na gut. Dann eben nicht!" + | isQuestion prompt && isYelling prompt = "Chill mal, ich weiß, was ich tue!" + | isQuestion prompt = "Klar." + | isYelling prompt = "Whoa, entspann dich!" + | otherwise = "Whatever." + +main :: IO () +main = do + inputContent <- readFile "example-input" + outputContent <- readFile "example-output" + + let prompt = map read (lines inputContent) :: [String] + expectedResults = map read (lines outputContent) :: [String] + actualResults = map responseFor prompt + + let errors = [ (i, prompt, expected, actual) + | (i, (prompt, expected, actual)) <- zip3 [1..] prompts expectedResults actualResults + , expected /= actual ] + + if null errors + then putStrLn "All tests passed!" + else do + putStrLn "Errors detected:" + mapM_ (\(i, prompt, expected, actual) -> + putStrLn $ "Error in prompt " ++ show i ++ ": \"" ++ prompt ++ "\"\nExpected: \"" ++ expected ++ "\"\nGot: \"" ++ actual ++ "\"\n") errors + + -- let results = map (show . responseFor) (lines inputContent) + -- writeFile "example-output" (unlines results) + \ No newline at end of file diff --git a/exercises/block1/2-bob/example-input b/exercises/block1/2-bob/example-input new file mode 100644 index 0000000..66ac148 --- /dev/null +++ b/exercises/block1/2-bob/example-input @@ -0,0 +1,10 @@ +Wie geht es dir? +HAST DU MEINEN FILM GESCHAUT? +Kannst du mir bitte helfen? + +Was machst du heute? +WO WARST DU NUR?! +Na toll, jetzt ist es zu spät. + +Warum bist du so faul? +Okay, dann nicht. \ No newline at end of file diff --git a/exercises/block1/2-bob/example-output b/exercises/block1/2-bob/example-output new file mode 100644 index 0000000..d2cbe66 --- /dev/null +++ b/exercises/block1/2-bob/example-output @@ -0,0 +1,10 @@ +Klar. +Chill mal, ich wei\223, was ich tue! +Klar. +Na gut. Dann eben nicht! +Klar. +Whoa, entspann dich! +Whatever. +Na gut. Dann eben nicht! +Klar. +Whatever.