summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPolesznyák Márk <contact@pml68.dev>2025-12-07 01:38:47 +0100
committerPolesznyák Márk <contact@pml68.dev>2025-12-07 01:38:47 +0100
commit729eb48e5855d10ce8e9ce5e3efb767fb3f7cebd (patch)
treefb06367e6c48fa91fec606f8bfe2e50f8535dd7c
parentfeat: day5 part2 complete (diff)
downloadaoc-729eb48e5855d10ce8e9ce5e3efb767fb3f7cebd.tar.gz
feat: day6 part1 complete
-rw-r--r--day6/part1/main.ha74
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)!;
+};