commit 9c5c2f1

Artur Manuel  ·  2025-09-07 01:33:05 +0000 UTC
parent 9136b02
feat(d): write collatz conjecture in dlang
5 files changed,  +83, -0
+7, -0
1@@ -0,0 +1,7 @@
2+[*.nix]
3+indent_size = 2
4+indent_style = space
5+
6+[*.d]
7+indent_size = 4
8+indent_style = space
+17, -0
 1@@ -0,0 +1,17 @@
 2+.dub
 3+docs.json
 4+__dummy.html
 5+docs/
 6+/rosetta-collatz
 7+rosetta-collatz.so
 8+rosetta-collatz.dylib
 9+rosetta-collatz.dll
10+rosetta-collatz.a
11+rosetta-collatz.lib
12+rosetta-collatz-test-*
13+*.exe
14+*.pdb
15+*.o
16+*.obj
17+*.lst
18+out
+12, -0
 1@@ -0,0 +1,12 @@
 2+D= 	ldc2
 3+DFLAGS= 	-O --fcf-protection=all
 4+
 5+PREFIX?= 	/usr/local
 6+BINDIR= 	$(PREFIX)/bin
 7+
 8+all:
 9+	env DFLAGS=$(DFLAGS) dub build --compiler=$(D)
10+
11+install: all
12+	mkdir -p $(BINDIR) || true
13+	cp rosetta-collatz $(BINDIR)
+9, -0
 1@@ -0,0 +1,9 @@
 2+{
 3+	"authors": [
 4+		"amadaluzia"
 5+	],
 6+	"copyright": "Copyright © 2025, amadaluzia",
 7+	"description": "The collatz conjecture in D",
 8+	"license": "GPL-3.0-only",
 9+	"name": "rosetta-collatz"
10+}
+38, -0
 1@@ -0,0 +1,38 @@
 2+import std.array;
 3+import std.stdio;
 4+import std.format;
 5+
 6+int collatz(int num) @safe
 7+{
 8+	if (num % 2 == 0)
 9+	{
10+		return num / 2;
11+	}
12+	return 3 * num + 1;
13+}
14+
15+size_t collatzSequence(char[] buf, int num) @safe
16+{
17+	auto cursor = buf;
18+	size_t written = 0;
19+	formattedWrite(cursor, "%d: ", num);
20+	written = buf.length - cursor.length;
21+	for (int i = collatz(num); i > 1; i = collatz(i))
22+	{
23+		formattedWrite(cursor, "%d, ", i);
24+		written = buf.length - cursor.length;
25+	}
26+	formattedWrite(cursor, "1");
27+	written = buf.length - cursor.length;
28+	return written;
29+}
30+
31+void main() @safe
32+{
33+	char[] buf = new char[2048];
34+	for (int i = 1; i <= 10_000; i++)
35+	{
36+		size_t len = collatzSequence(buf, i);
37+		writefln("%s", buf[0 .. len]);
38+	}
39+}