progs/collatz_sol.scala
changeset 15 52713e632ac0
parent 11 417869f65585
child 17 ecf83084e41d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/progs/collatz_sol.scala	Tue Nov 08 10:30:42 2016 +0000
@@ -0,0 +1,31 @@
+// Part 1 about the 3n+1 conceture
+//=================================
+
+
+//(1) Complete the collatz function below. It should
+//recursively calculates the number of steps needed 
+//number until a series ends with 1
+
+def collatz(n: Long): List[Long] = ...
+
+
+// an alternative that calculates the steps directly
+def collatz1(n: Long): Int =
+  if (n == 1) 1 else
+    if (n % 2 == 0) (1 + collatz1(n / 2)) else 
+      (1 + collatz1(3 * n + 1))
+
+
+//(2)
+def collatz_max(bnd: Int): Int = {
+  (for (i <- 1 to bnd) yield collatz(i).length).max
+}
+
+
+val bnds = List(10, 100, 1000, 10000, 100000, 1000000, 10000000)
+
+for (bnd <- bnds) {
+  val max = collatz_max(bnd)
+  println(s"In the range of 1 - ${bnd} the maximum steps are ${max}")
+}
+