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+}