Average loop length: Difference between revisions

Content added Content deleted
(Add Factor)
(→‎{{header|Scala}}: migrate to Scala 2.13)
Line 2,184: Line 2,184:
object AverageLoopLength extends App {
object AverageLoopLength extends App {


val factorial: Stream[Double] = 1 #:: factorial.zip(Stream.from(1)).map(n => n._2 * factorial(n._2 - 1))
val factorial: LazyList[Double] = 1 #:: factorial.zip(LazyList.from(1)).map(n => n._2 * factorial(n._2 - 1))
val results = for (n <- 1 to 20;
avg = tested(n, 1000000);
theory = expected(n)
) yield (n, avg, theory, (avg / theory - 1) * 100)


def expected(n: Int) = (for (i <- 1 to n) yield factorial(n) / Math.pow(n, i) / factorial(n - i)).sum
def expected(n: Int): Double = (for (i <- 1 to n) yield factorial(n) / Math.pow(n, i) / factorial(n - i)).sum


def trial(n: Int):Double = {
def tested(n: Int, times: Int): Double = (for (i <- 1 to times) yield trial(n)).sum / times

def trial(n: Int): Double = {
var count = 0
var count = 0
var x = 1
var x = 1
Line 2,200: Line 2,206:
count
count
}
}

def tested(n: Int, times: Int) = (for (i <- 1 to times) yield trial(n)).sum / times

val results = for (n <- 1 to 20;
avg = tested(n, 1000000);
theory = expected(n)
) yield (n, avg, theory, (avg / theory - 1) * 100)




Line 2,212: Line 2,211:
println("------------------------------------")
println("------------------------------------")
results foreach { n => {
results foreach { n => {
println(f"${n._1}%2d ${n._2}%2.6f ${n._3}%2.6f ${n._4}%2.3f%%")
println(f"${n._1}%2d ${n._2}%2.6f ${n._3}%2.6f ${n._4}%2.3f%%")
}
}
}
}