2007/11/06

FizzBuzz問題をちょっとひねくれて解くとこんな感じでしょうか

1..100|%{$t="";if($_ % 3 -eq 0){$t+="Fizz"};if($_ % 5 -eq 0){$t+="Buzz"};if($t -eq ""){$_}else{$t}}

3と5の倍数のとき、3の倍数と5の倍数の両方の結果をつなげて書けばいいということで、3と5の倍数の場合、という条件文を書かなくていいというのがFizzBuzzのポイントだと勝手に思ってます(もちろん素直に場合分けしてやってもよいです)。そこでそれを考慮しなければならないFizzBuzzDozz問題を出した、というのが出題意図だったんですね、実は。以下、解答例。

1..100|%{$t="";if($_ % 3 -eq 0){$t="Fizz"};if($_ % 5 -eq 0){$t="Buzz"};if($_ % 15 -eq 0){$t="Dozz"};if($t -eq ""){$_}else{$t}}

これを解くには素直に3の倍数、5の倍数、3と5の倍数を条件分けしないといけません。$_ % 15 -eq 0は最小公倍数という数学の概念を知っていないと出てこない解ですが、素直に$_ % 3 -eq 0 -and $_ % 5 -eq 0でも無論OKですが、少し冗長という気もします。ですが3と5の倍数は15の倍数だ、という「解釈」を人間がやるかコンピュータがやるか、どちらがいいかは議論の分かれるところだと思います。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/11/06/106291.aspx

古い記事へ | 新しい記事へ


プライバシーポリシー

Twitter

Books