LoginSignup
5
5

More than 5 years have passed since last update.

条件文を使用しないFizzBuzz

Last updated at Posted at 2015-03-28

条件文を使用しない*FizzBuzzです、加えて状態(state)が一切ありません。

applicators = {3 => "fizz", 5 => "buzz"}
fizzbuzz =
  (1..100).map do |n|
    fb = applicators.
             select{|a| n % a == 0}.
             values.join
    [n.to_s, fb].max # "1" > "" and "fizz" > "100000" since "1" < "a"
  end
puts fizzbuzz

例えばFizzBuzzの亜種にはFizzBuzzWoofと言うのがありますが、こういうアプローチだとapplicators"woof" => 7と記入するだけで動作を拡大。もしくはapplicatorsごとデータベースに移せます。こうすることによってコードはデータを変更する最低限のロジックを実装し、簡単に新しいケースを処理できます*。

*一応Rubyの場合selectはCコードレベルでは条件文がありますが理論上select,filter等は条件を必要としません。例えばHaskellではパターンマッチングを使って実装されています。

*条件文のある基本的なFizzBuzzだと新しいケースごとにコード自体を書き換えなければいけません。

5
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5