Difference between revisions of "Haskell Quiz/FizzBuzz/Solution Syzygies"

From HaskellWiki
Jump to navigation Jump to search
 
(Remove old, not very useful page)
Line 1: Line 1:
Fizz comes before Buzz comes before an integer. Fizz and Buzz stick to each other, but hide integers.
 
 
The lists for Fizz and Buzz are infinite, but zipping together with a finite list of integers, the result is finite.
 
 
<haskell>
 
module Main where
 
 
main :: IO ()
 
main = mapM_ putStrLn $ zipWith3 join (loop 3 "Fizz") (loop 5 "Buzz") [1..100]
 
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)
 
</haskell>
 
 
If one has enabled all warnings as errors, then the integers need an explicit type, as shown below.
 
 
The hiding logic can also be implemented by filtering for the first non-null element of a list:
 
 
<haskell>
 
module Main where
 
module Main where
 
 
main :: IO ()
 
main = sequence_ $ zipWith3 join (loop 3 "Fizz") (loop 5 "Buzz") [1..100 :: Int]
 
where
 
loop n s = cycle $ replicate (n-1) "" ++ [s]
 
join s t n = putStrLn . head $ filter (not . null) [s ++ t, show n]
 
</haskell>
 

Revision as of 14:23, 6 February 2021