master amadaluzia/rosetta-collatz / zig / src / main.zig
 1const std = @import("std");
 2
 3const Io = std.Io;
 4
 5fn collatz(n: u32) u32 {
 6    if (n % 2 == 0) {
 7        return @divFloor(n, 2);
 8    }
 9    return 3 * n + 1;
10}
11
12fn collatzSequence(gpa: std.mem.Allocator, n: u32) ![]u8 {
13    var result = std.ArrayList(u8).empty;
14    var i = collatz(n);
15    while (i != 1) {
16        try result.print(gpa, "{d}, ", .{i});
17        i = collatz(i);
18    }
19    try result.appendSlice(gpa, "1");
20    return try result.toOwnedSlice(gpa);
21}
22
23pub fn main(init: std.process.Init) !void {
24    const gpa = init.arena.allocator();
25    var buffer: [16384]u8 = undefined;
26    var stdout = Io.File.stdout().writer(init.io, &buffer);
27    var i: u32 = 1;
28    while (i < 10001) {
29        const sequence = try collatzSequence(gpa, i);
30        try stdout.interface.print("{d}: {s}\n", .{ i, sequence });
31        i += 1;
32    }
33    try stdout.interface.flush();
34    _ = init.arena.reset(.free_all);
35}