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)!; };