block 1 exercises
parent
4792610971
commit
0fa4a3174c
|
@ -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``
|
|
@ -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``
|
|
@ -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)
|
||||
|
|
@ -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.
|
|
@ -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.
|
Loading…
Reference in New Issue