pre_testing1/collatz.scala
changeset 373 d29cd5883c7b
parent 363 e5c1d69cffa4
equal deleted inserted replaced
372:e87462c9b895 373:d29cd5883c7b
     4 // generate jar with
     4 // generate jar with
     5 //   > scala -d collatz.jar  collatz.scala
     5 //   > scala -d collatz.jar  collatz.scala
     6 
     6 
     7 object CW6a { // for purposes of generating a jar
     7 object CW6a { // for purposes of generating a jar
     8 
     8 
     9 /*
       
    10 def collatz(n: Long): Long =
     9 def collatz(n: Long): Long =
    11   if (n == 1) 0 else
    10   if (n == 1) 0 else
    12     if (n % 2 == 0) 1 + collatz(n / 2) else 
    11     if (n % 2 == 0) 1 + collatz(n / 2) else 
    13       1 + collatz(3 * n + 1)
    12       1 + collatz(3 * n + 1)
    14 */
       
    15 
    13 
    16 def aux(n: Long, acc: Long) : Long =
       
    17   if (n == 1) acc else
       
    18     if (n % 2 == 0) aux(n / 2, acc + 1) else
       
    19       aux(3 * n + 1, acc + 1)
       
    20 
       
    21 
       
    22 def collatz(n: Long): Long = aux(n, 0)
       
    23 
    14 
    24 def collatz_max(bnd: Long): (Long, Long) = {
    15 def collatz_max(bnd: Long): (Long, Long) = {
    25   val all = for (i <- (1L to bnd)) yield (collatz(i), i)
    16   val all = for (i <- (1L to bnd)) yield (collatz(i), i)
    26   all.maxBy(_._1)
    17   all.maxBy(_._1)
    27 }
    18 }