annotate exercises/src/Exercise_2.hs @ 5:f1a337c9f260

week 2 tutorial
author Markus Kaiser <markus.kaiser@in.tum.de>
date Sun, 28 Oct 2012 18:47:36 +0100
parents 243f6cfa029a
children 50f08a46ea10
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
1 module Exercise_2 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 Data.List
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
4
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
5 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
6 {- Aufgabe G2.1 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
7 all_sums :: [Integer] -> [Integer] -> [Integer]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
8 all_sums xs ys = [x + y | x <- xs, y <- ys]
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
9
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
10
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
11 evens :: [Integer] -> [Integer]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
12 evens xs = [x | x <- xs, even x]
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
13
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
14
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
15 n_lists :: [Integer] -> [[Integer]]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
16 n_lists xs = [[1..x] | x <- xs]
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
17
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
18
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
19 all_even_sum_lists :: [Integer] -> [Integer] -> [[Integer]]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
20 all_even_sum_lists xs ys = [[1..(x+y)] | x <- xs, y <- ys, even (x+y)]
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
21
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
22
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
23
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
24 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
25 {- Aufgabe G2.2 -}
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
26 union'' :: [Integer] -> [Integer] -> [Integer]
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
27 union'' xs ys = xs ++ ys
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
28
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
29
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
30 intersection :: [Integer] -> [Integer] -> [Integer]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
31 intersection xs ys = [x | x <- xs, x `elem` ys]
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
32 -- Alternativ ohne elem:
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
33 -- intersection xs ys = [x | x <- xs, y <- ys, x == y]
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
34
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
35
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
36 diff :: [Integer] -> [Integer] -> [Integer]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
37 diff xs ys = [x | x <- xs, not(x `elem` ys)]
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
38
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
39
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
40 elem' :: Integer -> [Integer] -> Bool
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
41 elem' x xs = [y | y <- xs, y == x] /= []
2
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 union' :: [Integer] -> [Integer] -> [Integer]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
45 union' xs ys = diff xs ys ++ ys
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
46
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
47
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
48
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
49 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
50 {- Aufgabe G2.3 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
51 eq_frac :: (Integer,Integer) -> (Integer,Integer) -> Bool
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
52 eq_frac (a,b) (c,d) = a * d == c * b
2
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 intersection_frac :: [(Integer,Integer)] -> [(Integer,Integer)] -> [(Integer,Integer)]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
56 intersection_frac xs ys = [x | x <- xs, y <- ys, x `eq_frac` y]
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
57
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
58
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 {- Aufgabe G2.4 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
62 pow2_slow :: Integer -> Integer
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
63 pow2_slow 0 = 1
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
64 pow2_slow n | n > 0 = 2 * pow2_slow (n - 1)
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
65
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
66
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
67 pow2 :: Integer -> Integer
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
68 pow2 0 = 1
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
69 pow2 n
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
70 | n < 0 = error "Postive n only"
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
71 | even n = pow2 (n `div` 2) ^ 2
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
72 | otherwise = 2 * pow2 (n - 1)
2
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
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
76 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
77 {- Aufgabe G2.5 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
78 reachable :: [(Integer, Integer)] -> Integer -> [(Integer, Integer)]
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
79 reachable graph 0 = nub $ concat [[(u, u), (v, v)] | (u, v) <- graph]
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
80 reachable graph 1 = graph
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
81 reachable graph n | n > 0 = [(u, x) | (u, v) <- graph, (w, x) <- reachable graph (n-1), v == w]
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
82
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
83
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
84
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
85 {---------------------------------------------------------------------}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
86 {- Aufgabe H2.1 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
87 factorials :: [Integer] -> [Integer]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
88 factorials ns = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
89
5
f1a337c9f260 week 2 tutorial
Markus Kaiser <markus.kaiser@in.tum.de>
parents: 2
diff changeset
90
2
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
91 count :: [Char] -> Char -> Integer
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
92 count cs c = 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 H2.2 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
98 lookupTab :: [Integer] -> [(Integer, [Char])] -> [[[Char]]]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
99 lookupTab keys tab = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
100
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 {- Aufgabe H2.3 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
105 wordsOfLength :: [Char] -> Integer -> [[Char]]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
106 wordsOfLength alphabet n = undefined
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 H2.4 -}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
112 {-WETT-}
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
113 perms :: [Char] -> [[Char]]
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
114 perms [] = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
115 perms xs = undefined
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
116 {-TTEW-}