summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPolesznyák Márk <contact@pml68.dev>2025-12-04 07:14:49 +0100
committerPolesznyák Márk <contact@pml68.dev>2025-12-04 07:14:49 +0100
commitd841d07c0b605d234380780486c4c3cc0ac74f0d (patch)
tree8bf924c8d008df94ff3fa690604e1f7bd09531ca
parentfeat: day3 part1 complete (diff)
downloadaoc-d841d07c0b605d234380780486c4c3cc0ac74f0d.tar.gz
feat: day3 part2 complete
-rw-r--r--day3/part2/main.ha53
1 files changed, 53 insertions, 0 deletions
diff --git a/day3/part2/main.ha b/day3/part2/main.ha
new file mode 100644
index 0000000..d05ff25
--- /dev/null
+++ b/day3/part2/main.ha
@@ -0,0 +1,53 @@
+use fmt;
+use io;
+use math;
+use os;
+use strconv::{stou8};
+use strings::{fromutf8_unsafe, split, sub};
+
+fn joltage(bank: str) u64 = {
+ let digits: [12]u8 = [0...];
+ let indexes: [12]size = [0...];
+
+ let total: u64 = 0;
+
+ for (let i: size = 0; i < 12; i += 1) {
+ let next_index: size = 0;
+
+ if (i > 0)
+ next_index = indexes[i - 1] + 1;
+
+ if (i > next_index)
+ next_index = i;
+
+ for (let j: size = next_index; j < len(bank); j += 1) {
+ let val = stou8(sub(bank, j, j + 1))!;
+
+ if (val > digits[i] && j < len(bank) - (11 - i)) {
+ digits[i] = val;
+ indexes[i] = j;
+ };
+ };
+
+ total += (digits[i]: u64 * math::powi64(10, 11 - i: uint): u64);
+ };
+
+ return total;
+};
+
+export fn main() void = {
+ let handle = os::open("input.txt")!;
+ defer io::close(handle)!;
+
+ let buf = io::drain(handle)!;
+ defer free(buf);
+
+ let lines = split(fromutf8_unsafe(buf), "\n")!;
+ let output: u64 = 0;
+
+ for (let line .. lines)
+ if (line != "")
+ output += joltage(line);
+
+ fmt::printfln("Answer: {}", output)!;
+};