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 Kaart
ide 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