diff options
| author | Polesznyák Márk <contact@pml68.dev> | 2025-12-07 01:38:47 +0100 |
|---|---|---|
| committer | Polesznyák Márk <contact@pml68.dev> | 2025-12-07 01:38:47 +0100 |
| commit | 729eb48e5855d10ce8e9ce5e3efb767fb3f7cebd (patch) | |
| tree | fb06367e6c48fa91fec606f8bfe2e50f8535dd7c | |
| parent | feat: day5 part2 complete (diff) | |
| download | aoc-729eb48e5855d10ce8e9ce5e3efb767fb3f7cebd.tar.gz | |
feat: day6 part1 complete
| -rw-r--r-- | day6/part1/main.ha | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/day6/part1/main.ha b/day6/part1/main.ha new file mode 100644 index 0000000..eb57bf0 --- /dev/null +++ b/day6/part1/main.ha @@ -0,0 +1,74 @@ +use errors; +use fmt; +use io; +use os; +use strconv::{stoi}; +use strings::{dupall, freeall, fromutf8_unsafe, split}; + +fn solve(problems: []([32]int, str)) (u64 | errors::invalid) = { + let result = 0u64; + + for (let (numbers, operation) .. problems) { + let problem_result = 1u64; + + if (operation == "*") { + for (let number .. numbers) { + if (number == 0) break; + problem_result *= number: u64; + }; + } else if (operation == "+") { + problem_result = 0; + + for (let number .. numbers) { + if (number == 0) break; + problem_result += number: u64; + }; + } else return errors::invalid; + + result += problem_result; + }; + + return result; +}; + +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")!; + delete(lines[len(lines) - 1]); + defer free(lines); + + let problems: []([32]int, str) = []; + defer free(problems); + + for (let i = 0z; i < len(lines); i += 1) { + let values = split(lines[i], " ")!; + defer free(values); + + let value_offset = 0z; + + for (let j = 0z; j < len(values); j += 1) { + if (values[j] == "") { + value_offset += 1; + continue; + }; + + if (i == 0) { + append(problems, ([0...], " "))!; + problems[j - value_offset].0[i] = stoi(values[j])!; + } else if (i == len(lines) - 1) { + problems[j - value_offset].1 = values[j]; + } else { + problems[j - value_offset].0[i] = stoi(values[j])!; + }; + }; + }; + + let answer = solve(problems)!; + + fmt::printfln("Answer: {}", answer)!; +}; |
