diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/collatz.cff | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/examples/collatz.cff b/examples/collatz.cff new file mode 100644 index 0000000..65b504a --- /dev/null +++ b/examples/collatz.cff @@ -0,0 +1,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); +} |