annotate exercises/src/Exercise_9.hs @ 21:3fea6fff7265

week 9
author Markus Kaiser <markus.kaiser@in.tum.de>
date Wed, 12 Dec 2012 20:32:09 +0100
parents
children 498aea38199b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
1 module Exercise_9 where
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
2 import Test.QuickCheck
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
3 import Control.Monad
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
4
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
5 {- Library DO NOT CHANGE -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
6 data Tree a = Empty | Node a (Tree a) (Tree a)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
7 deriving (Eq, Show)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
8
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
9 data Tree23 a = Leaf a
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
10 | Branch2 (Tree23 a) a (Tree23 a)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
11 | Branch3 (Tree23 a) a (Tree23 a) a (Tree23 a)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
12 deriving Show
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
13
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
14 mirror :: Tree a -> Tree a
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
15 mirror Empty = Empty
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
16 mirror (Node x l r) = Node x (mirror r) (mirror l)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
17
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
18 flat :: Tree a -> [a]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
19 flat Empty = []
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
20 flat (Node x l r) = flat l ++ [x] ++ flat r
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
21
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
22 -- allow QuickCheck to generate arbitrary values of type Tree
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
23 instance Arbitrary a => Arbitrary (Tree a) where
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
24 arbitrary = sized tree
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
25 where
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
26 tree 0 = return Empty
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
27 tree n | n > 0 = oneof [return Empty,
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
28 liftM3 Node arbitrary (tree (n `div` 2)) (tree (n `div` 2))]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
29 shrink Empty = []
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
30 shrink (Node x l r) = l : r : map (\l' -> Node x l' r) (shrink l)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
31 ++ map (\r' -> Node x l r') (shrink r)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
32
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
33 -- examples for G9.2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
34 balancedTrees =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
35 [ Empty
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
36 , Node 0 Empty Empty
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
37 , Node 0 (Node 1 Empty Empty) Empty
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
38 , Node 4 (Node 2 Empty (Node 5 Empty Empty)) (Node 0 Empty Empty)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
39 , Node 1 (Node 0 Empty (Node 3 Empty Empty))
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
40 (Node 0 Empty (Node 3 Empty Empty))
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
41 ]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
42
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
43 unbalancedTrees =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
44 [ Node 3 (Node 2 Empty (Node 1 Empty Empty)) Empty
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
45 , Node 4 (Node 3 (Node 2 (Node 1 Empty Empty) Empty) Empty)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
46 (Node 3 Empty (Node 2 Empty (Node 1 Empty Empty)))
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
47 , Node 9 (Node 8 (Node 7 Empty Empty ) Empty)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
48 (Node 1 (Node 0 Empty (Node 3 Empty Empty))
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
49 (Node 0 Empty (Node 3 Empty Empty)))
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
50 ]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
51 {- End Library -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
52
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
53
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
54 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
55 {- Aufgabe G9.1 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
56
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
57 {-
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
58 Lemma mirror (mirror t) = t
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
59 Proof by structural induction on t
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
60
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
61 Base case:
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
62 To show:
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
63
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
64 Induction step:
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
65 IH1:
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
66 IH2:
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
67 To show:
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
68
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
69 QED?
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
70 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
71
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
72
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
73
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
74 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
75 {- Aufgabe G9.2 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
76
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
77 balanced :: Tree a -> Bool
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
78 balanced t = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
79
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
80
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
81
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
82 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
83 {- Aufgabe G9.3 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
84
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
85 type Coords = (Int, Int)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
86 data Shape = Missing
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
87
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
88 move :: Coords -> Shape -> Shape
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
89 move (x,y) _ = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
90
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
91 polygon :: [Shape] -> Bool
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
92 polygon _ = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
93
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
94
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
95
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
96 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
97 {- Aufgabe H9.1 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
98
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
99 {-
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
100 Proof me!
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
101 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
102
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
103
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
104
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
105 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
106 {- Aufgabe H9.2 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
107
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
108 inorder :: Tree a -> [a]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
109 inorder = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
110
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
111 preorder :: Tree a -> [a]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
112 preorder = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
113
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
114 postorder :: Tree a -> [a]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
115 postorder = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
116
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
117
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
118
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
119 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
120 {- Aufgabe H9.3 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
121
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
122 -- makeBalanced :: Int -> SkeleTree
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
123 -- makeBalanced = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
124 --
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
125 -- makeAllBalanced :: Int -> SkeleTree
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
126 -- makeAllBalanced = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
127
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
128
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
129
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
130 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
131 {- Aufgabe H9.4 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
132
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
133 find23 :: Ord a => a -> Tree23 a -> Bool
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
134 find23 = undefined