Neljas kodutöö
1. Ülesanne (2/5 punkti)
Genereerida lõpmatu list, mille elemendid on kasvavas järjestuses sellised mittenegatiivsed paarisarvude kuubid, mille ruudu täisarvulisel jagamisel seitsmega saadakse jääk kaks.
St. 64, 1000 jne. kuna 4^3=64, 4*4 =16, 16 `mod` 7 = 2
10^3=1000, 10*10=100, 100 `mod` 7 = 2.
kasutades listikomprehensiooni
arvud1 :: [Int] arvud1 = undefined
kasutades iterate, map ja filter funktsioone.
arvud2 :: [Int] arvud2 = undefined
2. Ülesanne (1/5 punkti)
Olgu binaarpuud defineeritud järgnevalt:
data BinTree a = Leaf (Maybe a) | Node (BinTree a) a (BinTree a)
deriving (Eq, Show)
Ehk siis puid esitatakse selliselt:
Node
/ | \
Leaf 2 Node
| / | \ = Node (Leaf (Just 1)) 2 (Node (Leaf (Just 3))
Just Leaf 4 Leaf 4 (Leaf (Just 5)))
| | |
1 3 5
Teha funktsioon, mis loob listist "vasakule kaldu" oleva puu, st.
Node
/ | \
vasak [1,2,3] = Node 1 Leaf
/ | \ |
Leaf 2 Leaf Nothing
| |
Just Nothing
|
3
Leaf
vasak [] = |
Nothing
vasak :: [Int] -> BinTree Int vasak = undefined
3. Ülesanne (2/5 punkti)
Kirjutada funktsioon maksimaalse arvu leidmiseks kahendpuust.
maks :: BinTree Int -> Maybe Int maks = undefined
4. Ülesanne (2/5 punkti)
Andke definitsioon standardsele 52-kaardiga kaardipakile. Kasutage listikomprehensiooni.
Kasutage järgnevaid definitsioone
data Arvud = Null | Yks | Kaks | Kolm | Neli | Viis | Kuus | Seitse | Kaheksa | Yheksa | Kymme deriving (Eq, Enum, Show)
data Mast = Ruutu | Risti | Artu | Poti deriving (Eq, Enum, Show)
data Pilt = Soldat | Emand | Kuningas | Ass deriving (Eq, Enum, Show)
data Kaart = N Mast Arvud | P Mast Pilt
deriving (Eq, Show)
kaardipakk :: [Kaart]
kaardipakk = undefined
5. Ülesanne (2/5 punkti)
Kirjutada funktsioon, mis arvutiab iga kahe kaardi kohta, kas esimene on tugevam kui teine. Kaartide tugevusjärjestus on alates tugevamast: äss, kuningas, emand, poiss, 10, 9, 8, 7, 6, 5, 4, 3, 2. Näiteks: Poti emand on tugevam, kui ruutu kaheksa.
v6idab :: Kaart -> Kaart -> Bool v6idab = undefined
6. Ülesanne (1/5 punkti)
Implementeeri Ord instants Kaartide jaoks. Kasuta eelmises ülesandes defineeritud järjestust.
Pane tähele et sama tugevusega aga eri masti kaardid peavad Ord funktsioonidel tagastama et nad on võrdsed:
compare (N Ruutu Viis) (N Poti Viis) == EQ compare (N Ruutu Viis) (N Poti Kuus) == LT compare (P Artu Kuningas) (N Ruutu Viis) == GT