summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPolesznyák Márk <contact@pml68.dev>2025-12-05 14:12:26 +0100
committerPolesznyák Márk <contact@pml68.dev>2025-12-05 14:12:26 +0100
commitc3095c77b984900557255460363d858afc0bad42 (patch)
tree26be56467980febac246808a4f1527fe70025d19
parentfeat: day4 part2 complete (diff)
downloadaoc-c3095c77b984900557255460363d858afc0bad42.tar.gz
feat: day5 part1 complete
-rw-r--r--day5/part1/main.ha54
1 files changed, 54 insertions, 0 deletions
diff --git a/day5/part1/main.ha b/day5/part1/main.ha
new file mode 100644
index 0000000..d3505de
--- /dev/null
+++ b/day5/part1/main.ha
@@ -0,0 +1,54 @@
+use fmt;
+use io;
+use os;
+use strconv::{stou64};
+use strings::{cut, fromutf8_unsafe, split};
+
+fn is_fresh(fresh_ranges: [](u64, u64), ingredient: u64) bool = {
+ for (let range .. fresh_ranges) {
+ if (ingredient >= range.0 && ingredient <= range.1)
+ return true;
+ };
+
+ return false;
+};
+
+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 ranges: [](u64, u64) = [];
+ let available: []u64 = [];
+ let passed_ranges = false;
+
+ let fresh_ingredients: u64 = 0;
+
+ for (let line .. lines) {
+ if (passed_ranges) {
+ if (line != "")
+ append(available, stou64(line)!)!;
+ } else {
+ if (line != "") {
+ let range = cut(line, "-");
+
+ let start = stou64(range.0)!;
+ let end = stou64(range.1)!;
+
+ append(ranges, (start, end))!;
+ } else {
+ passed_ranges = true;
+ };
+ };
+ };
+
+ for (let ingredient .. available)
+ if (is_fresh(ranges, ingredient))
+ fresh_ingredients += 1;
+
+ fmt::printfln("Answer: {}", fresh_ingredients)!;
+};