Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Functional Programming
diff options
context:
space:
mode:
Commit40beec7e6c43e835f15340908cf2a2feb9ed8af0 (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-01-05 14:26:15 +0200
Committer
 Syndamia <kamen@syndamia.com>
2023-01-05 14:26:15 +0200
Files84154b5332a23b7529ccd8fc98c284d1b58f1448 /Year 2/Functional Programming
uni-projects-40beec7e6c43e835f15340908cf2a2feb9ed8af0.tar
uni-projects-40beec7e6c43e835f15340908cf2a2feb9ed8af0.tar.gz
uni-projects-40beec7e6c43e835f15340908cf2a2feb9ed8af0.zip
Parent40ffc86693349399c013de477a9e0341238c4129 (diff)
[FP/P12] Solved all exercises
1 files changed, 55 insertions, 1 deletions
-rw-r--r--Year 2/Functional Programming/12-Practice-05.01.2023.hs56
diff --git a/Year 2/Functional Programming/12-Practice-05.01.2023.hs b/Year 2/Functional Programming/12-Practice-05.01.2023.hs
index 93db0e5..637f6ee 100644
--- a/Year 2/Functional Programming/12-Practice-05.01.2023.hs
+++ b/Year 2/Functional Programming/12-Practice-05.01.2023.hs
@@ -1,4 +1,5 @@
-- Ex1
+
data BTree a = Nil | Node a (BTree a) (BTree a)
deriving (Eq,Show,Read)
@@ -14,6 +15,59 @@ sumTree :: BTree Int -> Int
sumTree Nil = 0
sumTree (Node n bt1 bt2) = n + sumTree bt1 + sumTree bt2
+sumLeaves :: BTree Int -> Int
+sumLeaves Nil = 0
+sumLeaves (Node n bt1 bt2)
+ | bt1 == Nil && bt2 == Nil = n
+ | otherwise = sumLeaves bt1 + sumLeaves bt2
+
+inorder :: BTree a -> [a]
+inorder Nil = []
+inorder (Node n bt1 bt2) = inorder bt1 ++ [n] ++ inorder bt2
+
+t1 :: BTree Int -- 5
+t1 = Node 5 (Node 2 Nil -- / \
+ (Node 3 Nil Nil)) -- 2 6
+ (Node 6 Nil Nil) -- \
+ -- 3
+
+t2 :: BTree Int -- 5
+t2 = Node 5 (Node 3 Nil Nil) -- / \
+ (Node 4 (Node 5 Nil Nil) -- 3 4
+ (Node 7 Nil Nil)) -- / \
+ -- 5 7
+
+-- Ex2
+
+getLevel :: Int -> BTree a -> [a]
+getLevel _ Nil = []
+getLevel 0 _ = []
+getLevel l (Node n bt1 bt2)
+ | l == 1 = [n]
+ | otherwise = getLevel (l - 1) bt1 ++ getLevel (l - 1) bt2
+
+-- Ex3
+
+avg :: [Int] -> Double
+avg [] = 0
+avg l = fromIntegral(sum l) / fromIntegral(length l)
+
+average :: BTree Int -> Double
+average bt = avg (inorder bt)
+
+-- Ex4
+
+mirrorTree :: BTree a -> BTree a
+mirrorTree Nil = Nil
+mirrorTree (Node n bt1 bt2) = (Node n (mirrorTree bt2) (mirrorTree bt1))
+
main :: IO()
main = do
- print("Hello World")
+ print("t1: " ++ show (size t1) ++ " " ++ show (height t1) ++ " " ++ show(sumTree t1) ++ " " ++ show(sumLeaves t1) ++ " " ++ show(inorder t1))
+ print("t2: " ++ show (size t2) ++ " " ++ show (height t2) ++ " " ++ show(sumTree t2) ++ " " ++ show(sumLeaves t2) ++ " " ++ show(inorder t2))
+ print(show(getLevel 1 t1) ++ show(getLevel 2 t1) ++ show(getLevel 3 t1))
+ print(show(getLevel 1 t2) ++ show(getLevel 2 t2) ++ show(getLevel 3 t2))
+ print(average t1)
+ print(average t2)
+ print(inorder(mirrorTree t1))
+ print(inorder(mirrorTree t2))