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.

63 lines
1.7 KiB
Dart

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 = <num>[];
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<num> sumTest(num testcase, num start) {
var sum = 0;
var end = start;
var group = <num>[];
do {
end++;
group = mylist.sublist(start, end);
sum = group.fold(0, (prev, element) => prev + element);
} while (sum < testcase);
return sum == testcase ? group : [];
}
@override
Future<void> 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<void> 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;
}
}
}
}