-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday3.dart
36 lines (31 loc) · 950 Bytes
/
day3.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
import 'dart:io';
void day3() {
var lines = File("inputs/day3").readAsLinesSync();
var totalScore1 = 0;
for (var line in lines) {
var chars = line.split("");
var section1 = chars.sublist(0, chars.length ~/ 2);
var section2 = chars.sublist(chars.length ~/ 2, chars.length);
var common = section1.toSet().intersection(section2.toSet()).first;
totalScore1 += getPriorityScore(common);
}
print("Part 1: $totalScore1");
var totalScore2 = 0;
var bags = <Set<String>>[];
for (var i = 0; i < lines.length; i++) {
bags.add(lines[i].split("").toSet());
if ((i + 1) % 3 == 0) {
var common = bags[0].intersection(bags[1]).intersection(bags[2]).first;
bags.clear();
totalScore2 += getPriorityScore(common);
}
}
print("Part 2: $totalScore2");
}
int getPriorityScore(String char) {
var ascii = char.codeUnits[0];
if (ascii < 91) {
return ascii - 64 + 26;
}
return ascii - 96;
}