changeset 34:f62e3ed2c90d

week 13 tutorial
author Markus Kaiser <markus.kaiser@in.tum.de>
date Wed, 30 Jan 2013 22:07:58 +0100
parents 71b56f8b3069
children 782323a762a2
files exercises/src/Exercise_13.hs
diffstat 1 files changed, 73 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/exercises/src/Exercise_13.hs	Wed Jan 23 23:22:07 2013 +0100
+++ b/exercises/src/Exercise_13.hs	Wed Jan 30 22:07:58 2013 +0100
@@ -4,22 +4,89 @@
 import System.Random (randomRIO)
 import Test.QuickCheck
 
-{---------------------------------------------------------------------}
-{- Aufgabe G13.1 -}
+
+helloWorld :: IO ()
+helloWorld = putStrLn "Hello, World!"
+
 
-nRandomR :: (Int, Int) -> Int -> IO [Int]
-nRandomR lowhigh = undefined
+greeter :: IO ()
+greeter = do
+        putStr "Tell me your name: "
+        name <- getLine
+        if name == "bye"
+        then putStrLn "Goodbye!"
+        else do
+                putStrLn $ "Ah, hi there, " ++ name ++ "!"
+                greeter
 
 
+randomisator :: IO Int
+randomisator = do
+        let bs = (1, 10)
+        a <- randomRIO bs
+        b <- randomRIO bs
+        c <- randomRIO bs
+        return $ a + b + c
+
 
 {---------------------------------------------------------------------}
 {- Aufgabe G13.1 -}
 
+nRandomR :: (Int, Int) -> Int -> IO [Int]
+nRandomR lowhigh n = randHelp [] n
+        where
+        randHelp :: [Int] -> Int -> IO [Int]
+        randHelp xs 0 = return xs
+        randHelp xs n = do
+                x <- randomRIO lowhigh
+                if x `elem` xs
+                then randHelp xs n
+                else randHelp (x : xs) (n-1)
+
+
+nRandomR' :: (Int, Int) -> Int -> IO [Int]
+nRandomR' _ 0 = return []
+nRandomR' lowhigh n = do
+        i <- randomRIO lowhigh
+        is <- nRandomR' lowhigh (n-1)
+        if i `elem` is
+        then nRandomR' lowhigh n
+        else return (i:is)
+
+
+
+{---------------------------------------------------------------------}
+{- Aufgabe G13.2 -}
+
 getLineInt :: IO Int
-getLineInt = undefined
+getLineInt = do
+        putStr "Enter a Number: "
+        line <- getLine
+        if (not . null) line && all isDigit line
+        then return $ read line
+        else do
+                putStrLn "Not a nonnegative number!"
+                getLineInt
+
 
 guessNum :: IO Int
-guessNum = undefined
+guessNum = do
+        rnd <- randomRIO (0, 100)
+        putStrLn "Guess my number!"
+        doGuessNum rnd 1
+        where
+        doGuessNum :: Int -> Int -> IO Int
+        doGuessNum rnd n = do
+                x <- getLineInt
+                if x < rnd then do
+                        putStrLn "Blubberlutsch."
+                        doGuessNum rnd (n+1)
+                else if x > rnd then do
+                        putStrLn "Brawarkl"
+                        doGuessNum rnd (n+1)
+                else do
+                        putStrLn "(...)"
+                        return n