aboutsummaryrefslogtreecommitdiff
path: root/examples/collatz.cff
blob: 65b504ac838d4f4a6b65a063997cc2df29acc392 (plain) (blame)
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
import "libc.hff";

extern fn main() void {
   let mem *int = malloc(sizeof int * 4000);

   let cmax = 0;
   for let nv = 1; nv < 1000; ++nv {
      let n = nv, 
      c = 0;
      while n != 1 {
         if n < nv {
            c += mem[n];
            break;
         }
         if (n & 1) != 0 {
            n = (3 * n) + 1;
         } else {
            n /= 2;
         }
         ++c;
      }
      mem[nv] = c;
      if c > cmax {
         cmax = c;
      }
   }
   printf("should print 178: %d\n", cmax);
}