Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.57 KB | None | 0 0
  1. import System.Environment (getArgs)
  2. import Data.List (intersperse)
  3.  
  4. gray :: Int -> [[Bool]]
  5. gray 0 = []
  6. gray 1 = pure <$> [True, False]
  7. gray n | n > 0 = ((True :) <$> g) ++ ((False :) <$> reverse g)
  8. where g = gray $ pred n
  9.  
  10. getInts :: IO [Int]
  11. getInts = getArgs >>= mapM readIO
  12.  
  13. printBits :: [Bool] -> IO ()
  14. printBits = putStrLn . map (\x -> if x then '0' else '1')
  15.  
  16. printGray :: Int -> IO ()
  17. printGray = sequence_ . map printBits . gray
  18.  
  19. printGrays :: [Int] -> IO ()
  20. printGrays = sequence_ . intersperse (putStrLn "") . map printGray
  21.  
  22. main :: IO ()
  23. main = getInts >>= printGrays
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement