はてなワンライナーコンテストRubyだけまとめ

はてなブックマーク - どうしてプログラマに・・・プログラムが書けないのか?
記事よりみんなのサンプルコードの方が楽しい。
ワンライナーもいいけどこういう時ってコメント欄に書くんじゃなくて編集欄にみんなでガリガリ書くのはどうなんだろ。Wikiっぽく。
三項演算子はスペースのあるなしで結果が変わる(よね)のでコピペじゃ動かなかったりした。


自分が書いたらこうなった。

1.upto(100){|i|
  case 
  when i % 15 == 0
    puts "FizzBizz"
  when i % 5 == 0
    puts "Bizz"
  when i % 3 == 0
    puts "Fizz"
  else
    puts i
  end
}

面白さの欠片もない…。
でも三項演算子の連発は格好良く見せたいだけで構造はcase文と一緒なので個人的にはイマイチ。
面白かったのがid:chrc

1.upto(?d){|i|
  i % 3 < 1 ? x = :Fizz : x=nil
  puts i % 5 < 1 ? "#{x}Buzz" : x||i
}

かな。仕様通り動いてなかったので2行目の所を三項演算子に変えてるけど。
特に?dとか意味が分からなくてタイプしてみて笑った。文字コードなのね。


後、いぬビームの人のコード

require 'generator'
proc{|c,a|
  m =a.map{|n,s|
    Generator.new{|g|
      loop{
        n.times{|i|
          g.yield((i == n-1) ? s : '')
        }
      }
    }
  }
  
  c.times{|i|
    s=m.map{|g|
      g.next
    }.join
    puts s.empty? ? i+1 : s
  }
}.call 100,[ [3,'Fizz'],[5,'Buzz'] ]

ほんとに動くことにビックリ…。凄いなー。