diff options
| author | Polesznyák Márk <contact@pml68.dev> | 2025-12-04 07:14:49 +0100 |
|---|---|---|
| committer | Polesznyák Márk <contact@pml68.dev> | 2025-12-04 07:14:49 +0100 |
| commit | d841d07c0b605d234380780486c4c3cc0ac74f0d (patch) | |
| tree | 8bf924c8d008df94ff3fa690604e1f7bd09531ca | |
| parent | feat: day3 part1 complete (diff) | |
| download | aoc-d841d07c0b605d234380780486c4c3cc0ac74f0d.tar.gz | |
feat: day3 part2 complete
| -rw-r--r-- | day3/part2/main.ha | 53 |
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)!; +}; |
