17/02/12 02:57:51.45 oncvvJ9K.net
剰余演算を全く使わないFizzBuzzがあったような…こうだっけ
import Data.List (zipWith3)
import Data.Monoid
data FizzBuzz = None | Fizz | Buzz | FizzBuzz | Number Int
deriving (Eq, Show)
instance Monoid FizzBuzz where
mempty = error "something wrong"
None `mappend` None = None
None `mappend` Buzz = Buzz
None `mappend` Number n = Number n
Fizz `mappend` Buzz = FizzBuzz
Fizz `mappend` _ = Fizz
Buzz `mappend` _ = Buzz
FizzBuzz `mappend` _ = FizzBuzz
_ `mappend` _ = mempty
toString :: FizzBuzz -> String
toString (Number n) = show n
toString fb = show fb
lis = zipWith3 (\x y z -> x <> y <> z)
(cycle [ None, None, Fizz ])
(cycle [ None, None, None, None, Buzz ])
[Number n | n <- [1..]]
main = mapM_ (putStrLn . toString) $ take 100 lis