-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcollatz.scala
52 lines (32 loc) · 1.28 KB
/
collatz.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Part 1 about the 3n+1 conjecture
//=================================
object CW6a {
//(1) Complete the collatz function below. It should
// recursively calculate the number of steps needed
// until the collatz series reaches the number 1.
// If needed, you can use an auxiliary function that
// performs the recursion. The function should expect
// arguments in the range of 1 to 1 Million.
def collatz(n: Long) : Long = {
if(n == 1)
1
else {
if(n % 2 == 1) collatz(n*3 + 1) + 1
else collatz(n/2) + 1
}
}
//(2) Complete the collatz-bound function below. It should
// calculate how many steps are needed for each number
// from 1 up to a bound and then calculate the maximum number of
// steps and the corresponding number that needs that many
// steps. Again, you should expect bounds in the range of 1
// up to 1 Million. The first component of the pair is
// the maximum number of steps and the second is the
// corresponding number.
def collatz_max(bnd: Long) : (Long, Long) = {
val listOfCollatz = for (i<- (1 to bnd.toInt).toList) yield collatz(i.toLong)
val maxValue = listOfCollatz.max
val idx = listOfCollatz.indexOf(maxValue) + 1
(maxValue, idx)
}
}