These are chat archives for scalajp/functional

11th
Jul 2016
suish
@y0ke
Jul 11 2016 03:04

某社のFizzBuzz 30byte以内なんて話を今更見つけてScala(cats/scalaz)でどこまで短く書けるかやっているのですが

  def a(i:Int)=1 to i map(x((x%3)0 option "Fizz")|+|((x%5)0 option "Buzz")|x+"")
  def b(i:Int)=1 to i map(x⇒(((x%3)≟0 option "Fizz")⊹((x%5)≟0 option "Buzz"))|x+"")

から縮まりません。catsはどうしてもscalazより長くなるようでscalazで書いていますがロジックの変更含めてどこか改善の余地はあったりしますでしょうか?

harry
@harry0000
Jul 11 2016 03:35
コードゴルフはまったくのド素人なのですが、引数部分の書き方を変えると3文字減りました?
  def a=1 to(_:Int)map(x((x%3)0 option "Fizz")|+|((x%5)0 option "Buzz")|x+"")
  def b=1 to(_:Int)map(x⇒(((x%3)≟0 option "Fizz")⊹((x%5)≟0 option "Buzz"))|x+"")
harry
@harry0000
Jul 11 2016 03:52
先ほど気づいた ) の後ならスペースもドットも不要、というのを使うと 0≟(x%3)option と書けて更に2文字
  def a=1 to(_:Int)map(x(0(x%3)option "Fizz")|+|(0(x%5)option "Buzz")|x+"")
  def b=1 to(_:Int)map(x⇒((0≟(x%3)option "Fizz")⊹(0≟(x%5)option "Buzz"))|x+"")
suish
@y0ke
Jul 11 2016 05:12
@harry0000 ありがとうございます。部分適用と(x%3)の括弧を利用してスペースの省略は完全に盲点でした。