block 1 exercises

pull/1/head
Jonathan Seltmann 2025-01-29 11:03:04 +01:00
parent 4792610971
commit 0fa4a3174c
5 changed files with 104 additions and 2 deletions

View File

@ -1,4 +1,7 @@
# Übungsaufgabe 1: Schaltjahr # Übungsaufgabe 1: Schaltjahr
## Einführung
Eine Schaltjahr (im Gregorianischen Kalender) tritt auf: Eine Schaltjahr (im Gregorianischen Kalender) tritt auf:
* In jedem Jahr, das ohne Rest durch 4 teilbar ist. * 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. * ``1900`` war kein Schaltjahr, da es nicht durch ``400`` teilbar ist.
* ``2000`` war ein Schaltjahr! * ``2000`` war ein Schaltjahr!
## Anweisungen
Deine Aufgabe ist es, zu bestimmen, ob ein gegebenes Jahr ein Schaltjahr ist. 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. 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: 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`` ``>./leap.exe``

View File

@ -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``

View File

@ -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)

View File

@ -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.

View File

@ -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.