pi的scala monte carlo估计量(尽可能短)

pi的scala monte carlo估计量(尽可能短),scala,Scala,祝大家节日快乐!毫无理由,我试图构造一个尽可能短的π的蒙特卡罗估计量。我们能构建一个适合推特的吗 这是我所拥有的 Seq.fill(1000)(Random.nextFloat).zip(Seq.fill(1000)(Random.nextFloat)).map{case (a,b) => a*a + b*b <1}.map(if (_) 1 else 0).reduce(_+_).toFloat / 1000 * 4 Seq.fill(1000)(Random.nextFloat

祝大家节日快乐!毫无理由,我试图构造一个尽可能短的π的蒙特卡罗估计量。我们能构建一个适合推特的吗

这是我所拥有的

Seq.fill(1000)(Random.nextFloat).zip(Seq.fill(1000)(Random.nextFloat)).map{case (a,b) => a*a + b*b <1}.map(if (_) 1 else 0).reduce(_+_).toFloat / 1000 * 4

Seq.fill(1000)(Random.nextFloat).zip(Seq.fill(1000)(Random.nextFloat)).map{case(a,b)=>a*a+b*b一个可能较短的解决方案(70个字符,没有不必要的空格)


defr=math.random;Seq.fill(1000)(r,r).count{case(a,b)⇒ a*a+b*b<1}/250d
为了将此响应保持在StackOverflow的范围内,以下是一些有用的Scala功能:

  • 用于生成随机双精度数字
  • (r,r)
    片段使用Scala
  • 方法
  • unicode符号的使用
    用于右双箭头
  • 250d
    中的
    d
    将创建一个Double而不是Int

我投票将这个问题作为离题题来结束,因为它似乎属于Stackoverflow,而不是Stackoverflow。似乎提问者对解决任何真正的问题都不感兴趣。Code Golf网站似乎正是解决这类问题的地方。你需要的唯一空白是else周围,你可以用usin替换.toFloatg
1F
,根据我的统计,这不包括导入
Random
,但是,这感觉像是作弊。这稍微短一点:
def xs=Seq.fill(1000)(util.Random.nextFloat);(xs,xs).zip.map((a,b)=>if(a*a+b*b<1)1F else 0F)。sum/1000*4
def r=math.Random;Seq.fill(1000)(r,r).map{情况(a,b)⇒ if(a*a+b*b<1)1 else 0}.sum/250d
仍然是要删除的if。没有if(84个字符):
defr=math.random;Seq.fill(1000)(r,r).map{case(a,b)⇒ ~(a*a+b*b-.5).整数+2}.sum/250d
我相信还有更优雅的。
def r = math.random; Seq.fill(1000)(r,r).count{case (a,b) ⇒ a*a + b*b < 1} / 250d