RubyでFizzBuzzみじかいのに挑戦した

[Ruby]RubyでFizzBuzzみじかいのに挑戦した

FizzBuzz自体は組んだことあるけど、短いのは考えたことがなかったのでこれを機会に挑戦。

一つ目

101.times{|i|p(i%15==0?'FizzBuzz':i%3==0?'Fizz':i%5==0?'Buzz':i)}
101.times{ |i|
    p (
        i % 15  == 0 ? 'FizzBuzz' 
            : i % 3  == 0 ? 'Fizz'
                    : i % 5  == 0 ? 'Buzz' : i
    )
}
  • do~endが文字数消費するので{}を使った
  • if~elseが文字数消費するので三項演算子を使った
  • アウトプットをpにして文字数を稼いだ

三項演算子の入れ子なんて初めて使ったからどうインデントしたら綺麗に見えるのかもわからん! しかもこれで66byte…某Y!社に入れないなぁ。

また、どうもFizzBuzzって1から100でやるらしく、上記のソースだと0から100まで実行してしまうので他の部分も含めてちょっと考え直し……。

二つ目

(1..100).each{|i|p(i%15>0?i%5>0?i%3>0?i:'Fizz':'Buzz':'FizzBuzz')}
(1..100).each{ |i|
    p (
        i % 15  > 0 ?
            i % 5  > 0 ?
                i % 3  > 0 ? i
                : 'Fizz'
            : 'Buzz'
        : 'FizzBuzz'
    )
}
  • eachにしてループを1から100までにした
  • 条件を割り切れたら(i%15==0)から割り切れなかったら(i%15>0)に変更

条件式で3byte縮めたけどtimesからeachに交えたせいで67byteに増えた……。

その後、最短方法をいろいろググッてみると配列使うテクニックとかがあるみたいすなあ。”FizzBuzz”の出力の仕方でもうちょい短縮できそうかな。

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2011/12/27 [Evernote] [Ruby] [API] EvernoteのAPIをRubyから叩きたい
  2. 2011/12/26 [Ruby] [Haml] [Sinatra] SinatraでHaml入門
  3. 2011/12/21 [Ruby] Ruby実行時のオプションをよろしく解析してくれるoptparseを使ってみる
  4. 2011/12/15 [Ruby] [Solaris] [Redmine] RedmineとApacheを連携させるPassengerをインストールできなかった
  5. 2011/12/07 [Ruby] ZenTestでRSpecを自動実行できるようにした
  6. 2011/12/05 [Ruby] [Redmine] RedmineでプラグインインストールしたらTemplateErrorが出た
  7. 2011/12/04 [Ruby] [Mac] [Unix] 複数のRuby環境の管理・切替ができるrvmをインストールした
  8. 2011/11/30 [Ruby] [Heroku] rvm環境でRuby実行時にReadlineエラーが起きた時の対処法
  9. 2011/11/29 [Ruby] pikでインストールしたRubyでbundle exec rubyしたらエラーになった 解決編
  10. 2011/11/28 [Ruby] pikでインストールしたRubyでbundle exec rubyしたらエラーになった
  11. 2011/11/27 [Ruby] [Heroku] [Lokka] LokkaをインストールしてHerokuにデプロイした
  12. 2011/11/26 [Ruby] [Sinatra] [Heroku] HerokuにWebアプリ(Sinatra)をデプロイする手順をまとめた
  13. 2011/11/24 [Ruby] 複数のRuby環境の管理・切替ができるpikを実行できた nyaos編
  14. 2011/10/04 [Ruby] 複数のRuby環境の管理・切替ができるpikを実行できた
  15. 2011/10/03 [Ruby] Rubyのgemバージョン管理ができるBundlerを実行できなかった