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

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]);
}
}
}
}