From d841d07c0b605d234380780486c4c3cc0ac74f0d Mon Sep 17 00:00:00 2001 From: Polesznyák Márk Date: Thu, 4 Dec 2025 07:14:49 +0100 Subject: feat: day3 part2 complete --- day3/part2/main.ha | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 day3/part2/main.ha (limited to 'day3/part2/main.ha') 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)!; +}; -- cgit v1.2.3