Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
32
Task/Topswops/Scala/topswops.scala
Normal file
32
Task/Topswops/Scala/topswops.scala
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
object Fannkuch extends App {
|
||||
|
||||
def fannkuchen(l: List[Int], n: Int, i: Int, acc: Int): Int = {
|
||||
def flips(l: List[Int]): Int = (l: @unchecked) match {
|
||||
case 1 :: ls => 0
|
||||
case (n :: ls) =>
|
||||
val splitted = l.splitAt(n)
|
||||
flips(splitted._2.reverse_:::(splitted._1)) + 1
|
||||
}
|
||||
|
||||
def rotateLeft(l: List[Int]) =
|
||||
l match {
|
||||
case Nil => List()
|
||||
case x :: xs => xs ::: List(x)
|
||||
}
|
||||
|
||||
if (i >= n) acc
|
||||
else {
|
||||
if (n == 1) acc.max(flips(l))
|
||||
else {
|
||||
val split = l.splitAt(n)
|
||||
fannkuchen(rotateLeft(split._1) ::: split._2, n, i + 1, fannkuchen(l, n - 1, 0, acc))
|
||||
}
|
||||
}
|
||||
} // def fannkuchen(
|
||||
|
||||
val result = (1 to 10).map(i => (i, fannkuchen(List.range(1, i + 1), i, 0, 0)))
|
||||
println("Computing results...")
|
||||
result.foreach(x => println(s"Pfannkuchen(${x._1})\t= ${x._2}"))
|
||||
assert(result == Vector((1, 0), (2, 1), (3, 2), (4, 4), (5, 7), (6, 10), (7, 16), (8, 22), (9, 30), (10, 38)), "Bad results")
|
||||
println(s"Successfully completed without errors. [total ${scala.compat.Platform.currentTime - executionStart} ms]")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue