Haskell Quiz/FizzBuzz/Solution Ninju

From HaskellWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


I think this is probably what I'd do in the interview situation - i.e. the first and most obvious thing that comes to mind. (Alex Watt)

module Main where

main :: IO ()
main = printAll $ map fizzBuzz [1..100]
       where
       printAll [] = return ()
       printAll (x:xs) = putStrLn x >> printAll xs

fizzBuzz :: Integer -> String
fizzBuzz n | n `mod` 15 == 0 = "FizzBuzz"
           | n `mod` 5  == 0 = "Fizz"
           | n `mod` 3  == 0 = "Buzz"
           | otherwise       = show n

An alternate solution:

module Main where

main :: IO ()
main = do
  mapM_ putStrLn $ zipWith xor fizzbuzz $ map show [1..100 :: Int]
  where
    loop n s = cycle $ replicate (n-1) "" ++ [s]
    fizzbuzz = zipWith (++) (loop 3 "Fizz") (loop 5 "Buzz")
    xor s t = if null s then t else s