import 'dart:math'; import 'package:aoc2020/aocbase.dart'; import 'package:aoc2020/model/readdata.dart'; class AOC20201210 extends AOCBase { var mylist = []; var dest = []; void init(bool test) async { mylist = await ReadData.readFile(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 a({bool test}) async { await init(test); var hist = {}; for (var num in dest) { hist[num] = hist[num] == null ? 1 : hist[num] + 1; } // print(hist); answerA = hist[1] * hist[3]; } @override Future b({bool test}) async { var groups = {}; 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 = [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]); } } } }