这就是我拥有的东西
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
因此,这正确地估计了Pi,但是大约15个字符太长,不适合推文。我们可以做得更好吗?显而易见的问题(对我而言)是产生随机数Seq.fill(1000)(Random.nextFloat)
的冗长,任何巧妙的方法都可以解决这个问题?
答案 0 :(得分:1)
一种可能的较短解决方案(70个字符,没有不必要的空格)。
def r = math.random; Seq.fill(1000)(r,r).count{case (a,b) ⇒ a*a + b*b < 1} / 250d
要将此响应保留在StackOverflow的范围内,以下是一些有用的Scala功能:
math.random
生成随机双数字; (r,r)
代码段使用Scala automatic tupling; count()
方法; ⇒
作为右双箭头; d
中的250d
将创建一个Double而不是Int。