Add day 9

master
Peter Resch 5 years ago
parent 67d6b76449
commit 259f75df32

@ -6,6 +6,7 @@ import 'package:aoc2020/aoc20201201.dart';
import 'package:aoc2020/aoc20201206.dart'; import 'package:aoc2020/aoc20201206.dart';
import 'package:aoc2020/aoc20201207.dart'; import 'package:aoc2020/aoc20201207.dart';
import 'package:aoc2020/aoc20201208.dart'; import 'package:aoc2020/aoc20201208.dart';
import 'package:aoc2020/aoc20201209.dart';
import 'package:aoc2020/aocbase.dart'; import 'package:aoc2020/aocbase.dart';
import 'dart:mirrors'; import 'dart:mirrors';
@ -24,6 +25,7 @@ class aoc2020 {
AOC20201206(), AOC20201206(),
AOC20201207(), AOC20201207(),
AOC20201208(), AOC20201208(),
AOC20201209(),
]; ];
static void list() async { static void list() async {

@ -2,15 +2,61 @@ import 'package:aoc2020/aocbase.dart';
import 'package:aoc2020/model/readdata.dart'; import 'package:aoc2020/model/readdata.dart';
class AOC20201209 extends AOCBase { 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 @override
Future<void> a({bool test}) async { Future<void> a({bool test}) async {
var filename = (test ?? false) ? classStringTest : classString; var filename = (test ?? false) ? classStringTest : classString;
var mylist = await ReadData.readFileString(filename); 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 @override
Future<void> b({bool test}) async { Future<void> b({bool test}) async {
var filename = (test ?? false) ? classStringTest : classString; var filename = (test ?? false) ? classStringTest : classString;
var mylist = await ReadData.readFileString(filename); 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;
}
}
} }
} }

File diff suppressed because it is too large Load Diff

@ -0,0 +1,20 @@
35
20
15
25
47
40
62
55
65
95
102
117
150
182
127
219
299
277
309
576
Loading…
Cancel
Save