-
Notifications
You must be signed in to change notification settings - Fork 0
/
day04.dart
58 lines (43 loc) · 1.29 KB
/
day04.dart
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
55
56
57
58
import 'package:adventofcode2022/day.dart';
import 'package:adventofcode2022/helper/string_extensions.dart';
class Day4 implements Day {
@override
int get dayNumber => 4;
@override
String solveFirstPuzzle(String puzzleInput) {
final pairs = puzzleInput.splitPerLine().map((e) => Pair(e));
var result = pairs.where((element) => element.fullyContains());
return result.length.toString();
}
@override
String solveSecondPuzzle(String puzzleInput) {
final pairs = puzzleInput.splitPerLine().map((e) => Pair(e));
var result = pairs.where((element) => element.overlap());
return result.length.toString();
}
}
class Pair {
late Set<num> first;
late Set<num> second;
Pair(String rawPair) {
final rawParts = rawPair.split(',');
first = _parsePart(rawParts[0]);
second = _parsePart(rawParts[1]);
}
bool fullyContains() {
return first.containsAll(second) || second.containsAll(first);
}
bool overlap() {
return first.intersection(second).isNotEmpty;
}
Set<num> _parsePart(String rawPart) {
final startAndEndOfSections = rawPart.split('-');
Set<num> part = {};
for (var i = num.parse(startAndEndOfSections.first);
i <= num.parse(startAndEndOfSections.last);
i++) {
part.add(i);
}
return part;
}
}