master amadaluzia/rosetta-collatz / d / source / app.d
 1import std.array;
 2import std.stdio;
 3import std.format;
 4
 5int collatz(int num) @safe
 6{
 7	if (num % 2 == 0)
 8	{
 9		return num / 2;
10	}
11	return 3 * num + 1;
12}
13
14size_t collatzSequence(char[] buf, int num) @safe
15{
16	auto cursor = buf;
17	size_t written = 0;
18	formattedWrite(cursor, "%d: ", num);
19	written = buf.length - cursor.length;
20	for (int i = collatz(num); i > 1; i = collatz(i))
21	{
22		formattedWrite(cursor, "%d, ", i);
23		written = buf.length - cursor.length;
24	}
25	formattedWrite(cursor, "1");
26	written = buf.length - cursor.length;
27	return written;
28}
29
30void main() @safe
31{
32	char[] buf = new char[2048];
33	for (int i = 1; i <= 10_000; i++)
34	{
35		size_t len = collatzSequence(buf, i);
36		writefln("%s", buf[0 .. len]);
37	}
38}