diff options
| author | Polesznyák Márk <contact@pml68.dev> | 2025-12-05 14:12:26 +0100 |
|---|---|---|
| committer | Polesznyák Márk <contact@pml68.dev> | 2025-12-05 14:12:26 +0100 |
| commit | c3095c77b984900557255460363d858afc0bad42 (patch) | |
| tree | 26be56467980febac246808a4f1527fe70025d19 | |
| parent | feat: day4 part2 complete (diff) | |
| download | aoc-c3095c77b984900557255460363d858afc0bad42.tar.gz | |
feat: day5 part1 complete
| -rw-r--r-- | day5/part1/main.ha | 54 |
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)!; +}; |
