summaryrefslogtreecommitdiff
path: root/day5/part1/main.ha
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)!;
};