Contact/support | Changelog

/r/dailyprogrammer [difficult] 9 Feb 2012

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import Text.Printf (printf)
import System.IO

(lo, hi) = (1, 100) :: (Int, Int)

prompt :: String -> IO String
prompt str = putStr str >> putChar ' ' >> hFlush stdout >> getLine

main = do
  prompt $ printf "Pick a number between %d and %d [enter]" lo hi
  loop lo hi

loop :: Int -> Int -> IO ()
loop lo hi
  | lo == hi  = putStrLn $ printf "It has to be %d" lo
  | otherwise = do
    let guess = (lo + hi) `div` 2
    line <- prompt $ printf "Is it %d? (yes/lower/higher)" guess
    case line of
      "lower"  -> loop lo (guess - 1)
      "higher" -> loop (guess + 1) hi
      "yes"    -> printf "Sweet!\n"
      _ -> printf "wat\n" >> loop lo hi