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替换.toFloat
g1F
,根据我的统计,这不包括导入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