Haskell Quiz/FizzBuzz/Solution Ninju
From HaskellWiki
(Difference between revisions)
m |
|||
| Line 22: | Line 22: | ||
<haskell> | <haskell> | ||
| - | |||
| - | |||
main :: IO () | main :: IO () | ||
| - | main = mapM_ putStrLn $ zipWith3 join (loop 3 "Fizz") (loop 5 "Buzz") [1..100] | + | main = mapM_ putStrLn $ zipWith3 join (loop 3 "Fizz") (loop 5 "Buzz") [1..100 :: Int] |
where | where | ||
| + | xor s t = if null s then t else s | ||
loop n s = cycle $ replicate (n-1) [] ++ [s] | loop n s = cycle $ replicate (n-1) [] ++ [s] | ||
| - | join s t n = | + | join s t n = xor (s ++ t) (show n) |
</haskell> | </haskell> | ||
Revision as of 10:45, 8 July 2010
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:
main :: IO () main = mapM_ putStrLn $ zipWith3 join (loop 3 "Fizz") (loop 5 "Buzz") [1..100 :: Int] where xor s t = if null s then t else s loop n s = cycle $ replicate (n-1) [] ++ [s] join s t n = xor (s ++ t) (show n)
