From 90d4ccd9858dae97082bb45140e2be3ad27110c1 Mon Sep 17 00:00:00 2001 From: JS <1924550@stud.hs-mannheim.de> Date: Thu, 6 Feb 2025 11:22:55 +0100 Subject: [PATCH] solutions block 3 --- solutions/block3/maybe.hs | 17 +++++++++++++++++ solutions/block3/zauberschule.hs | 27 +++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 solutions/block3/maybe.hs create mode 100644 solutions/block3/zauberschule.hs diff --git a/solutions/block3/maybe.hs b/solutions/block3/maybe.hs new file mode 100644 index 0000000..b6a1a3c --- /dev/null +++ b/solutions/block3/maybe.hs @@ -0,0 +1,17 @@ +safeHead :: [a] -> Maybe a +safeHead [] = Nothing +safeHead (x:_) = Just x + +safeTail :: [a] -> Maybe [a] +safeTail [] = Nothing +safeTail (_:xs) = Just xs + +safeLast :: [a] -> Maybe a +safeLast [] = Nothing +safeLast[x] = Just x +safeLast (_:xs) = safeLast xs + +safeInit :: [a] -> Maybe [a] +safeInit [] = Nothing +safeInit [_] = Just [] +safeInit (x:xs) = fmap ([x] ++) (safeInit xs) diff --git a/solutions/block3/zauberschule.hs b/solutions/block3/zauberschule.hs new file mode 100644 index 0000000..49d1db1 --- /dev/null +++ b/solutions/block3/zauberschule.hs @@ -0,0 +1,27 @@ +-- 1. Definition der magischen Wesen +data MagicalCreature = Dragon String Int Int + | Unicorn String Int Int + | Wizard String Int Int + deriving (Show) + +-- 2. Beschreibung der magischen Wesen +describeMagicalCreature :: MagicalCreature -> String +describeMagicalCreature (Dragon name level experience) = name ++ " ist ein Drache mit Magielevel " ++ show level ++ " und " ++ show experience ++ " Erfahrungspunkten." +describeMagicalCreature (Unicorn name level experience) = name ++ " ist ein Einhorn mit Magielevel " ++ show level ++ " und " ++ show experience ++ " Erfahrungspunkten." +describeMagicalCreature (Wizard name level experience) = name ++ " ist ein Zauberer mit Magielevel " ++ show level ++ " und " ++ show experience ++ " Erfahrungspunkten." + +-- 3. Kräfte +class Fighter a where + power :: a -> Int + +instance Fighter MagicalCreature where + power (Dragon _ level experience) = (level + experience) * 3 + power (Unicorn _ level experience) = (level + experience) * 4 + power (Wizard _ level experience) = (level + experience) * 5 + +-- 4. Magisches Duell +duel :: (Fighter a) => a -> a -> Either String a +duel fighter1 fighter2 + | power fighter1 > power fighter2 = Right fighter1 + | power fighter1 < power fighter2 = Right fighter2 + | otherwise = Left "Unentschieden!"