You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.7 KiB
Dart
69 lines
1.7 KiB
Dart
import 'dart:math';
|
|
import 'package:aoc2020/aocbase.dart';
|
|
import 'package:aoc2020/model/readdata.dart';
|
|
|
|
class AOC20201210 extends AOCBase {
|
|
var mylist = <num>[];
|
|
var dest = <num>[];
|
|
|
|
void init(bool test) async {
|
|
mylist = await ReadData.readFile<num>(classString, test: test);
|
|
mylist.sort();
|
|
mylist.insert(0, 0);
|
|
mylist.add(mylist.last + 3);
|
|
dest = [];
|
|
for (var index = 1; index < mylist.length; index++) {
|
|
dest.add(mylist[index] - mylist[index - 1]);
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<void> a({bool test}) async {
|
|
await init(test);
|
|
|
|
var hist = <num, num>{};
|
|
for (var num in dest) {
|
|
hist[num] = hist[num] == null ? 1 : hist[num] + 1;
|
|
}
|
|
// print(hist);
|
|
answerA = hist[1] * hist[3];
|
|
}
|
|
|
|
@override
|
|
Future<void> b({bool test}) async {
|
|
var groups = <int, int>{};
|
|
|
|
await init(test);
|
|
|
|
// Count groups
|
|
var groupStart = false;
|
|
var groupCount = 0;
|
|
for (var index = 0; index < dest.length; index++) {
|
|
if (!groupStart && dest[index] == 1) {
|
|
groupStart = true;
|
|
groupCount = 0;
|
|
}
|
|
if (groupStart) {
|
|
if (dest[index] != 1) {
|
|
groupStart = false;
|
|
groups[groupCount] = groups[groupCount] == null ? 1 : groups[groupCount] + 1;
|
|
} else {
|
|
groupCount++;
|
|
}
|
|
}
|
|
}
|
|
var multiplier = <num>[1, 2, 4];
|
|
for (var index = 3; index < 30; index++) {
|
|
multiplier.add(multiplier[index-1] + multiplier[index-2] + multiplier[index-3]);
|
|
}
|
|
// print(groups);
|
|
answerB = 1;
|
|
for (var group in groups.keys) {
|
|
if (group > 1) {
|
|
// print('for group $group ${multiplier[group]} ^ ${groups[group]}');
|
|
answerB = answerB * pow(multiplier[group-1], groups[group]);
|
|
}
|
|
}
|
|
}
|
|
}
|