-
Notifications
You must be signed in to change notification settings - Fork 0
/
day02.dart
92 lines (67 loc) · 2.08 KB
/
day02.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import 'package:adventofcode2023/day.dart';
import 'package:adventofcode2023/helper/string_extensions.dart';
import 'package:collection/collection.dart';
class Day2 implements Day {
@override
int get dayNumber => 2;
@override
String solveFirstPuzzle(String puzzleInput) {
var games = puzzleInput.splitPerLine().map((e) {
return Game(e);
});
var possibleGames = games.where((element) => element.isPossibleToPlay());
var result = possibleGames.map((e) => e.id).sum;
return result.toString();
}
@override
String solveSecondPuzzle(String puzzleInput) {
var games = puzzleInput.splitPerLine().map((e) {
return Game(e);
});
var result = games.map((e) => e.power()).sum;
return result.toString();
}
}
class Game {
num id = 0;
List<Subset> subsets = [];
Game(String rawGame) {
var parts = rawGame.split(':');
id = num.parse(parts.first.split(' ').last);
subsets = parts.last.split(';').map((e) => Subset(e)).toList();
}
bool isPossibleToPlay() {
return subsets.every((element) => element.isPossibleToPlay());
}
int power() {
var red = subsets.map((e) => e.red).max;
var green = subsets.map((e) => e.green).max;
var blue = subsets.map((e) => e.blue).max;
return red * green * blue;
}
}
class Subset {
List<Cube> cubes = [];
int get red => cubes.where((element) => element.color == Color.red).length;
int get green => cubes.where((element) => element.color == Color.green).length;
int get blue => cubes.where((element) => element.color == Color.blue).length;
Subset(String rawSubset) {
rawSubset.trim().split(',').forEach((element) {
var amountAndColor = element.trim().split(' ');
var color = Color.values.byName(amountAndColor.last);
var amount = int.parse(amountAndColor.first);
cubes.addAll(List.generate(amount, (index) => Cube(color)));
});
}
bool isPossibleToPlay() {
if (red <= 12 && green <= 13 && blue <= 14) {
return true;
}
return false;
}
}
class Cube {
Color color;
Cube(this.color);
}
enum Color { red, green, blue }