commit 9136b02

Artur Manuel  ·  2025-08-31 23:15:24 +0000 UTC
parent 66f0049
feat(hare): add hare
3 files changed,  +54, -0
+7, -0
1@@ -0,0 +1,7 @@
2+[*.nix]
3+indent_size = 2
4+indent_style = space
5+
6+[{*.ha,Makefile}]
7+indent_size = 8
8+indent_style = tab
+13, -0
 1@@ -0,0 +1,13 @@
 2+HARE=hare
 3+HAREFLAGS=
 4+
 5+DESTDIR=
 6+PREFIX=/usr/local
 7+BINDIR=$(PREFIX)/bin
 8+
 9+rosetta-collatz: cmd/rosetta-collatz/main.ha
10+	$(HARE) $(HAREFLAGS) build -o $@ $<
11+
12+install: rosetta-collatz
13+	mkdir -p $(DESTDIR)$(BINDIR)
14+	install -Dm755 rosetta-collatz $(DESTDIR)$(BINDIR)
+34, -0
 1@@ -0,0 +1,34 @@
 2+use fmt;
 3+use io;
 4+
 5+fn collatz(x: i32) i32 = {
 6+	if (x % 2 == 0) {
 7+		return x / 2;
 8+	};
 9+	return 3 * x + 1;
10+};
11+
12+fn collatzSequence(buf: *str, x: i32) void = {
13+	if (x == 1) {
14+		*buf = "1: 1";
15+		return;
16+	};
17+
18+	let i = collatz(x);
19+	*buf = fmt::asprintf("{}: {}", x, i);
20+	for (i >= 1) {
21+		*buf = fmt::asprintf("{}, {}", *buf, i);
22+		if (i == 1) {
23+			return;
24+		};
25+		i = collatz(i);
26+	};
27+};
28+
29+export fn main() void = {
30+	let buf: str = "";
31+	for (let i = 1; i <= 10_000; i += 1) {
32+		collatzSequence(&buf, i);
33+		fmt::printfln("{}", buf)!;
34+	};
35+};