fizzbuzz書いてみた

FizzBuzzまったく書けない人がいるとか、じゃんけんの方がルール難しいしおかしいだろとかバカにしてたけど、一度も書いたことなかったので書いてみた
chatに残ってたログといっしょにコピペする


まず原型

#!/usr/bin/env ruby
(1...100).each do |i|
 (puts 'FizzBuzz'; next) if i%15 == 0
 (puts 'Fizz'; next) if i%3 == 0
 (puts 'Buzz'; next) if i%5 == 0
 puts i
end

しゃお先生がいってたみたいに、if文のかわりに&&を使うか

#!/usr/bin/env ruby
(1...100).each do |i|
 i%15==0 and (puts 'FizzBuzz'; next)
 i%3==0 and (puts 'Fizz'; next)
 i%5==0 and (puts 'Buzz'; next)
 puts i
end
#!/usr/bin/env ruby
(1...100).each do |i|
 (i%15==0)&&(puts 'FizzBuzz'; next)
 (i%3==0)&&(puts 'Fizz'; next)
 (i%5==0)&&(puts 'Buzz'; next)
 puts i
end
#!/usr/bin/env ruby
(1...100).each do |i|
 puts lambda{|i|
   (i%15==0)&&(return 'FizzBuzz')
   (i%3==0)&&(return 'Fizz')
   (i%5==0)&&(return 'Buzz')
   return i
 }.call(i)
end

ここからどうしよう
returnを取れるようにしたい


いいかんじ・・

#!/usr/bin/env ruby
(1...100).each do |i|
 puts lambda{|i|
   (i%15==0)&&('FizzBuzz')||
   (i%3==0)&&('Fizz')||
   (i%5==0)&&('Buzz')||
   i
 }.call(i)
end

かっこいらなかった

#!/usr/bin/env ruby
(1...100).each do |i|
 puts lambda{|i|
   (i%15==0)&&'FizzBuzz'||
   (i%3==0)&&'Fizz'||
   (i%5==0)&&'Buzz'||
   i
 }.call(i)
end

つかーなんでlamba使ってるんだ

#!/usr/bin/env ruby
(1...100).each do |i|
 puts ((i%15==0)&&'FizzBuzz'||
   (i%3==0)&&'Fizz'||
   (i%5==0)&&'Buzz'||
   i)
end

<1採用しました

#!/usr/bin/env ruby
(1...100).each do |i|
 puts ((i%15<1)&&'FizzBuzz'||
   (i%3<1)&&'Fizz'||
   (i%5<1)&&'Buzz'||
   i)
end
#!/usr/bin/env ruby
(1...100).each{|i|
 puts ((i%15<1)&&'FizzBuzz'||
   (i%3<1)&&'Fizz'||
   (i%5<1)&&'Buzz'||
   i)
}

doやめた

#!/usr/bin/env ruby
p (1..100).map{|i|
 ((i%15<1)&&'FizzBuzz'||
  (i%3<1)&&'Fizz'||
  (i%5<1)&&'Buzz'||
  i)
}

15で割ってるのなんとかなんねーの



かっこけっこういらなかった

#!/usr/bin/env ruby
p (1..100).map{|i|
 i%15<1&&'FizzBuzz'||
 i%3<1&&'Fizz'||
 i%5<1&&'Buzz'||
 i
}

文字をsymbolに変えても67文字か
このへんで30分たった

#!/usr/bin/env ruby
p (1..100).map{|i|
 s=i%3<1&&'Fizz'||nil
 i%5<1&&"#{s}Buzz"||
 s||i
}

15の判定なくせた
63文字だ


#!/usr/bin/env ruby
p (1..100).map{|i|
 s="#{i%3<1&&'Fizz'||nil}#{i%5<1&&"Buzz"||nil}"
 s.empty? ? i : s
}

へんなのできた



emptyやめて空文字列と比較、3項演算もスペースが無駄

#!/usr/bin/env ruby
p (1..100).map{|i|
 s=(i%3<1&&'Fizz'||'')+(i%5<1&&'Buzz'||'')
 s>''&&s||i
}

67文字だ


いまのところ63文字が自己最高だった
ここまで来て60文字切っているのを見たらけっこういい線いってたことがわかった