blob: d3505de7fc3d019aa0957abcbf21313c61e1472e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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)!;
};
|