# RubyでFizzBuzz。こんな書き方があったか。。
_published: 2009/04/09_ 
dankogai氏が公開している、ブラウザでLLを実行するlleval。
- [lleval - run codes from your browser](http://colabv6.dan.co.jp/lleval.html)
- [404 Blog Not Found:Ajax - llevalのサポート言語がさらに増えました](http://blog.livedoor.jp/dankogai/archives/51192521.html)
FizzBuzzのサンプルがついているのですが、RubyのFizzBuzzがオモシロかったのでメモ。
```ruby
1.upto(30) do |i|
s = [ [:Fizz][ i % 3 ], [:Buzz][ i % 5 ] ] * '';
puts s[1] ? s : i
end
```
セミコロンが付いているのはともかく、配列の使い方がウマイ。
まず、 `:Fizz][ i % 3 ]` のところ。1つめの括弧が配列のリテラルで、2つめの括弧で配列にアクセス。で、インデックスが配列のサイズ以上だと `nil` が返ります。
```ruby
p [:Fizz][0] #=> :Fizz
p [:Fizz][1] #=> nil
```
配列の `*` は `join` と同じです。その後の文字列をセパレーターにして連結。
```ruby
p [:Fizz, :Buzz] * ', ' #=> "Fizz, Buzz"
p [:Fizz, :Buzz] * '' #=> "FizzBuzz"
```
`s[1]` は文字コードを返しますが、`s` が空文字列なら `nil` を返します。
というテクニックのコラボレーションで成り立っています。こんなの、思いつかないよ。。。