module Waffle where import List ---------- fresh n m = replicate n (replicate m False) cols = length fliprow = reverse . map not showbd = map (map (\b -> if b then 'x' else 'o')) prtbd = putStrLn . unlines . showbd data Move = L Int | R Int | T Int | B Int deriving Read turn (T i) b = map fliprow (take i b) ++ drop i b turn (B i) b = take j b ++ map fliprow (drop j b) where j = cols b - i turn (L i) b = transpose (turn (T i) (transpose b)) turn (R i) b = transpose (turn (B i) (transpose b)) play b = do prtbd b move <- getLine if null move then putStrLn "Bye!" else play (turn (read move) b) waffle n m = play (fresh n m) ---------- -- extras run moves n m = prtbd (foldl (flip turn) (fresh n m) moves) -- middle = [H 2, H 3, V 2, H 2, H 3, V 2, H 2, H 3]