1 import Prelude hiding (Ord)
5 data Tree = Leaf Integer | Node Integer Tree Tree
8 -- Ord datatype + show + compare
9 data Ord = BottomUp | TopDown
11 instance Show Ord where
12 showsPrec p (BottomUp) = showString "BottomUp"
13 showsPrec p (TopDown) = showString "TopDown"
15 instance Main.Eq Ord where
16 a == b = show a == show b
18 -- Die eigentliche aufgabe
19 writeLayer :: Tree -> Ord -> [Layer]
20 writeLayer (Leaf x) o = [[x]]
21 writeLayer (Node x l r) o | (o == BottomUp) = (mmerge (writeLayer l o) (writeLayer r o)) ++ [[x]]
22 writeLayer (Node x l r) o | (o == TopDown) = [[x]] ++ (mmerge (writeLayer l o) (writeLayer r o))
24 mmerge :: [[Integer]] -> [[Integer]] -> [[Integer]]
25 mmerge x y = [x!!index ++ y!!index | index <- [0..(min (length x) (length y))-1]]
30 data STree = Nil | SNode Integer STree STree deriving Show
32 transform :: Tree -> STree
33 --transform :: Tree -> [Integer]
34 transform t = toStree (sort (undup (concat (writeLayer t BottomUp))))
36 undup :: [Integer] -> [Integer]
38 undup (x:xs) = x : undup (filter (\y -> not (x == y)) xs)
40 toStree :: [Integer] -> STree
42 toStree (x:xs) = SNode x Nil (toStree xs)
49 newtype Graph = Graph [(Vertex,[(Vertex,Cost)])]
51 instance Show Graph where
52 showsPrec p (Graph(x)) = showString "Graph(" . shows x . showChar ')'
55 data Result = Yes | No | Invalid
56 instance Show Result where
57 showsPrec p (Yes) = showString "Yes"
58 showsPrec p (No) = showString "No"
59 showsPrec p (Invalid) = showString "Invalid"
61 instance Main.Eq Result where
62 a == b = show a == show b
65 --path :: Graph -> Vertex -> Vertex -> Cost -> Result
66 --path _ _ _ _ = Invalid
71 --minpath :: Graph -> Vertex -> Vertex -> ([Vertex],Cost)
72 --minpath _ _ _ _ = ([],1337)