solutions block 3

main
Jonathan Seltmann 2025-02-06 11:22:55 +01:00
parent babff7d797
commit 90d4ccd985
2 changed files with 44 additions and 0 deletions

View File

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

View File

@ -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!"