-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday02.groovy
67 lines (56 loc) · 1.38 KB
/
day02.groovy
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
59
60
61
62
63
64
65
66
67
def input = new File("input/day02.txt").readLines();
def parseCubeSet(input) {
return input.trim().split(", ").collectEntries { cubes ->
def cube = cubes.split(" ");
return [cube[1], cube[0].toInteger()];
}
}
def cubeBag = [
"red": 12,
"green": 13,
"blue": 14,
];
def cubeSetFits(input, bag) {
for (entry in input) {
if (entry.value > bag[entry.key]) {
return false;
}
}
return true;
}
def minRequiredCubes(game) {
def cubeBag = [
"red": 0,
"green": 0,
"blue": 0,
];
game.each{ cubeSet ->
for (entry in cubeSet) {
if (cubeBag[entry.key] < entry.value) {
cubeBag[entry.key] = entry.value;
}
}
}
return cubeBag;
}
def games = input.collectEntries { line ->
def matcher = line =~ /^Game ([0-9]+): (.*)$/
def gameId = matcher[0][1];
def cubeSets = matcher[0][2].split(";").collect { parseCubeSet(it) };
return [gameId, cubeSets];
};
def day1 = 0;
games.each { key, value ->
def validGame = value.every { cubeSetFits(it, cubeBag) };
if (validGame) {
day1 += key.toInteger();
}
}
println(day1);
def day2 = 0;
games.each { key, value ->
def gameBag = minRequiredCubes(value);
def cubePower = gameBag.inject(1) { acc, it -> acc * it.value };
day2 += cubePower;
}
println(day2);