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}