-
Notifications
You must be signed in to change notification settings - Fork 0
/
camp-cleanup.ts
45 lines (37 loc) · 1.39 KB
/
camp-cleanup.ts
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
import readInput from '../readInput.ts';
type Range = { start: number; end: number };
type Assignment = [Range, Range];
const inputString = await readInput('day-4/input.txt');
const assignments: Assignment[] = parseInput(inputString);
const contained = assignments.map(checkAssignment);
const result = contained.filter((isContained) => isContained === true).length;
console.log('🚀 ~ file: camp-cleanup.ts:10 ~ result', result);
function parseInput(inputString: string): Assignment[] {
const assignments: Assignment[] = [];
const rows = inputString.split('\n');
for (let index = 0; index < rows.length; index++) {
const row = rows[index].split(',');
assignments.push(toAssignment(row));
}
return assignments;
}
function checkAssignment(assignment: Assignment): boolean {
const [range1, range2] = assignment;
return overlapsRange(range2, range1);
}
function containsRange(range1: Range, range2: Range): boolean {
return range1.start <= range2.start && range1.end >= range2.end;
}
function overlapsRange(range1: Range, range2: Range): boolean {
return !(range1.end < range2.start || range1.start > range2.end);
}
function toAssignment(stringList: string[]): Assignment {
return stringList.map(toRange) as Assignment;
}
function toRange(input: string): Range {
const [startString, endString] = input.split('-');
return {
start: Number(startString),
end: Number(endString)
};
}