import 'package:aoc2020/aocbase.dart'; import 'package:aoc2020/model/readdata.dart'; class AOC20201209 extends AOCBase { int testpreamble = 5; int runpreamble = 25; int preamble; int index; var mylist = []; void init(String filename, bool test) async { mylist = await ReadData.readFileNum(filename); preamble = test ?? false ? testpreamble : runpreamble; index = preamble; } bool testGroup(int index) { var val = mylist[index]; var sublist = Set.from(mylist.sublist(index - preamble, index)); var testset = Set.from(sublist.map((elem) => val - elem)); return testset.intersection(sublist).isNotEmpty; } List sumTest(num testcase, num start) { var sum = 0; var end = start; var group = []; do { end++; group = mylist.sublist(start, end); sum = group.fold(0, (prev, element) => prev + element); } while (sum < testcase); return sum == testcase ? group : []; } @override Future a({bool test}) async { var filename = (test ?? false) ? classStringTest : classString; await init(filename, test); for (index = preamble; index < mylist.length && testGroup(index); index++); if (index < mylist.length) { answerA = mylist[index]; } else { print('past end'); } } @override Future b({bool test}) async { var filename = (test ?? false) ? classStringTest : classString; await init(filename, test); index = 0; for (index = 0; index < mylist.length; index++) { var mysum = sumTest(answerA, index); if (mysum. isNotEmpty) { mysum.sort(); answerB = mysum.first + mysum.last; break; } } } }