block 1 exercises
parent
4792610971
commit
0fa4a3174c
|
@ -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``
|
|
@ -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