Skip to content

Instantly share code, notes, and snippets.

@lagenorhynque
Last active April 13, 2020 06:13
Show Gist options
  • Save lagenorhynque/1751b77180cceced6f58f6b33ed85fe4 to your computer and use it in GitHub Desktop.
Save lagenorhynque/1751b77180cceced6f58f6b33ed85fe4 to your computer and use it in GitHub Desktop.
FizzBuzz as infinite sequence in Clojure/Haskell
> fizzBuzz = map (\(f, b, n) -> maybe "" id f ++ maybe "" id b ++ (if null f && null b then show n else "")) $ zip3 (cycle [Nothing, Nothing, Just "Fizz"]) (cycle [Nothing, Nothing, Nothing, Nothing, Just "Buzz"]) [1..]
fizzBuzz :: [[Char]]
[Prelude]
> take 30 fizzBuzz
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz","16","17","Fizz","19","Buzz","Fizz","22","23","Fizz","Buzz","26","Fizz","28","29","FizzBuzz"]
it :: [[Char]]
[Prelude]
> import Data.Maybe
[Prelude Data.Maybe]
> fizzBuzz' = map (\(f, b, n) -> fromMaybe "" f ++ fromMaybe "" b ++ (if null f && null b then show n else "")) $ zip3 (cycle [Nothing, Nothing, Just "Fizz"]) (cycle [Nothing, Nothing, Nothing, Nothing, Just "Buzz"]) [1..]
fizzBuzz' :: [[Char]]
[Prelude Data.Maybe]
> take 30 fizzBuzz'
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz","16","17","Fizz","19","Buzz","Fizz","22","23","Fizz","Buzz","26","Fizz","28","29","FizzBuzz"]
it :: [[Char]]
[Prelude Data.Maybe]
> fizzBuzz'' = map (\(f, b, n) -> f ++ b ++ (if null f && null b then show n else "")) $ zip3 (cycle ["", "", "Fizz"]) (cycle ["", "", "", "", "Buzz"]) [1..]
fizzBuzz'' :: [[Char]]
[Prelude Data.Maybe]
> take 30 fizzBuzz''
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz","16","17","Fizz","19","Buzz","Fizz","22","23","Fizz","Buzz","26","Fizz","28","29","FizzBuzz"]
it :: [[Char]]
[Prelude Data.Maybe]
dev> (defn fizzbuzz-seq []
(map #(str %1 %2 (when-not (or %1 %2) %3))
(cycle [nil nil "Fizz"])
(cycle [nil nil nil nil "Buzz"])
(rest (range))))
#'dev/fizzbuzz-seq
dev> (take 30 (fizzbuzz-seq))
("1"
"2"
"Fizz"
"4"
"Buzz"
"Fizz"
"7"
"8"
"Fizz"
"Buzz"
"11"
"Fizz"
"13"
"14"
"FizzBuzz"
"16"
"17"
"Fizz"
"19"
"Buzz"
"Fizz"
"22"
"23"
"Fizz"
"Buzz"
"26"
"Fizz"
"28"
"29"
"FizzBuzz")
@lagenorhynque
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment