annotate exercises/src/Exercise_7.hs @ 16:7acf82c8fb3a

week 7
author Markus Kaiser <markus.kaiser@in.tum.de>
date Wed, 28 Nov 2012 22:42:29 +0100
parents
children 73170284e009
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
1 {-# LANGUAGE DeriveGeneric #-}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
2 module Exercise_7 where
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
3 import Data.List hiding (insert)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
4 import Data.Char
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
5 import Test.QuickCheck
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
6
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
7 {- Library DO NOT CHANGE -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
8 data Tree a =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
9 Empty |
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
10 Node a (Tree a) (Tree a)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
11 deriving (Eq, Show)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
12
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
13 data Html =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
14 Text String |
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
15 Block String [Html]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
16
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
17 swissLetters :: [(Int, String)]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
18 swissLetters =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
19 [(196, "Auml"), (214, "Ouml"), (220, "Uuml"),
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
20 (228, "auml"), (246, "ouml"), (252, "uuml")]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
21
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
22 grueezi =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
23 Block "html"
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
24 [Block "head"
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
25 [Block "author" [Text "der MC"],
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
26 Block "date" [Text "27.11.2012"],
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
27 Block "topsecret" []],
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
28 Block "body"
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
29 [Block "h1" [Text "Gr\252ezi!"],
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
30 Block "p" [Text "\196b\228, genau. Sal\252. Bis sp\246ter!"]]]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
31
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
32 data DirTree a =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
33 File a |
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
34 Dir a [DirTree a]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
35 deriving (Eq, Show)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
36
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
37 exDir :: DirTree String
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
38 exDir =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
39 Dir "" [Dir "usr" [Dir "lib" [File "vim"], Dir "include" [File "string.h"]],
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
40 Dir "bin" $ [File "ls", File "cat"]]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
41 {- End Library -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
42
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
43
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
44 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
45 {- Aufgabe G7.1 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
46
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
47 {- 1. -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
48 data WildChar =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
49 Missing
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
50
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
51
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
52 data WildPat =
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
53 WildPat [WildChar]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
54
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
55
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
56 {- 2. -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
57 stringFromWildChar :: WildChar -> String
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
58 stringFromWildChar = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
59
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
60
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
61 stringFromWildPat :: WildPat -> String
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
62 stringFromWildPat (WildPat ws) = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
63
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
64
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
65 {- 3. -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
66 instance Show WildChar where
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
67 show = stringFromWildChar
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
68
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
69 instance Show WildPat where
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
70 show = stringFromWildPat
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 {- 4. -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
74 wildCharsFromString :: String -> [WildChar]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
75 wildCharsFromString = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
76
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
77 wildPatFromString :: String -> WildPat
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
78 wildPatFromString cs = WildPat (wildCharsFromString cs)
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 {- 5. -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
82 prop_stringFromWildPatFromString s = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
83
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
84 prop_wildPatFromStringFromWildPat p = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
85
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
86
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
87 {- 6. -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
88 {-
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
89 G4.4
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
90
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
91 match [] ys = null ys
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
92 match ('?':ps) (y:ys) = match ps ys
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
93 match ('*':ps) [] = match ps []
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
94 match ('*':ps) (y:ys) = match ps (y:ys) || match ('*':ps) ys
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
95 match (p:ps) (y:ys) = p == y && match ps ys
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
96 match ps [] = False
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
97 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
98
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
99 matchWildChars :: [WildChar] -> String -> Bool
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
100 matchWildChars = undefined
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 matchWildPat :: WildPat -> String -> Bool
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
104 matchWildPat (WildPat ws) = matchWildChars ws
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
105
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
106 match = matchWildPat . wildPatFromString
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
107
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
108
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
109
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
110 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
111 {- Aufgabe G7.2 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
112
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
113 insert :: Ord a => a -> Tree a -> Tree a
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
114 insert x Empty = Node x Empty Empty
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
115 insert x (Node a l r)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
116 | x < a = Node a (insert x l) r
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
117 | a < x = Node a l (insert x r)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
118 | otherwise = Node a l r
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
119
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
120
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
121 treeSort :: Ord a => [a] -> [a]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
122 treeSort = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
123
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
124
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
125
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
126 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
127 {- Aufgabe G7.3 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
128
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
129 plainHtml :: Html -> String
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
130 plainHtml = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
131
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
132
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
133
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
134 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
135 {- Aufgabe H7.1 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
136
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
137 prettyHtml :: Int -> Html -> String
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
138 prettyHtml = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
139
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
140
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
141
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
142 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
143 {- Aufgabe H7.2 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
144
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
145 plainDirTree :: Show a => DirTree a -> String
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
146 plainDirTree = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
147
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
148
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
149 prettyDirTree :: Show a => DirTree a -> String
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
150 prettyDirTree = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
151
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
152
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
153
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
154 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
155 {- Aufgabe H7.3 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
156
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
157 {-WETT-}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
158 unscrambleWords :: [String] -> [String] -> [String]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
159 unscrambleWords = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
160 {-TTEW-}