2016/11/25

剰余を使わないFizzBuzz

先日ESMで開かれたよちよち.hsに参加しました.
そこで剰余を使わずにzip3と無限リストを使ってFizzBuzzを書く話があったので書いてみました.

fizzbuzz = map fizzbuzz' $ zip3 [1..] (cycle ["","","Fizz"]) (cycle ["", "", "", "","Buzz"])
  where fizzbuzz' (_, "Fizz", "Buzz") = "FizzBuzz"
        fizzbuzz' (_, "Fizz", _) = "Fizz"
        fizzbuzz' (_, _, "Buzz") = "Buzz"
        fizzbuzz' (n, _, _) = show n
*Main> take 100 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","31","32","Fizz","34","Buzz","Fizz","37","38","Fizz","Buzz","41","Fizz","43","44","FizzBuzz","46","47","Fizz","49","Buzz","Fizz","52","53","Fizz","Buzz","56","Fizz","58","59","FizzBuzz","61","62","Fizz","64","Buzz","Fizz","67","68","Fizz","Buzz","71","Fizz","73","74","FizzBuzz","76","77","Fizz","79","Buzz","Fizz","82","83","Fizz","Buzz","86","Fizz","88","89","FizzBuzz","91","92","Fizz","94","Buzz","Fizz","97","98","Fizz","Buzz"]

無限リストが扱いやすくていいですね.
こういう書き方もあったとは


© 2022 wat-aro