From 2d198cfd6fb4af45ebcdf3906d61975c6cfd4ffd Mon Sep 17 00:00:00 2001
From: FP10 Uebungsteilnehmer 0726236 <f0726236@g0.complang.tuwien.ac.at>
Date: Tue, 9 Nov 2010 14:21:59 +0100
Subject: [PATCH] Aufg 4 jan

---
 Aufgabe4.hs | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100755 Aufgabe4.hs

diff --git a/Aufgabe4.hs b/Aufgabe4.hs
new file mode 100755
index 0000000..2a13657
--- /dev/null
+++ b/Aufgabe4.hs
@@ -0,0 +1,72 @@
+import Prelude hiding (Ord)
+import List
+
+--Aufg 4.1a
+data Tree = Leaf Integer | Node Integer Tree Tree
+type Layer = [Integer]
+
+-- Ord datatype + show + compare
+data Ord = BottomUp | TopDown
+
+instance Show Ord where
+  showsPrec p (BottomUp) = showString "BottomUp"
+  showsPrec p (TopDown) = showString "TopDown"
+
+instance Main.Eq Ord where 
+  a == b = show a == show b
+
+-- Die eigentliche aufgabe
+writeLayer :: Tree -> Ord -> [Layer]
+writeLayer (Leaf x) o = [[x]]
+writeLayer (Node x l r) o | (o == BottomUp) = (mmerge (writeLayer l o) (writeLayer r o)) ++ [[x]]
+writeLayer (Node x l r) o | (o == TopDown) = [[x]] ++ (mmerge (writeLayer l o) (writeLayer r o))
+
+mmerge :: [[Integer]] -> [[Integer]] -> [[Integer]]
+mmerge x y = [x!!index ++ y!!index | index <- [0..(min (length x) (length y))-1]]
+
+
+
+--Aufg 4.1b
+data STree = Nil | SNode Integer STree STree deriving Show
+
+transform :: Tree -> STree
+--transform :: Tree -> [Integer]
+transform t = toStree (sort (undup (concat (writeLayer t BottomUp))))
+
+undup :: [Integer] -> [Integer]
+undup [] =  []
+undup (x:xs) = x : undup (filter (\y -> not (x == y)) xs)
+
+toStree :: [Integer] -> STree
+toStree [] = Nil
+toStree (x:xs) = SNode x Nil (toStree xs)
+
+
+
+--Aufg 4.2
+type Cost = Integer
+type Vertex = Integer
+newtype Graph = Graph [(Vertex,[(Vertex,Cost)])]
+
+instance Show Graph where
+  showsPrec p (Graph(x)) = showString "Graph(" . shows x . showChar ')'
+
+-- Aufg 4.2a
+data Result = Yes | No | Invalid
+instance Show Result where
+  showsPrec p (Yes) = showString "Yes"
+  showsPrec p (No) = showString "No"
+  showsPrec p (Invalid) = showString "Invalid"
+
+instance Main.Eq Result where
+  a == b = show a == show b
+
+
+--path :: Graph -> Vertex -> Vertex -> Cost -> Result
+--path _ _ _ _ = Invalid
+
+
+
+--Aufg 4.2b
+--minpath :: Graph -> Vertex -> Vertex -> ([Vertex],Cost)
+--minpath _ _ _ _ = ([],1337)
-- 
2.43.0