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