Add day 9
This commit is contained in:
@@ -6,6 +6,7 @@ import 'package:aoc2020/aoc20201201.dart';
|
||||
import 'package:aoc2020/aoc20201206.dart';
|
||||
import 'package:aoc2020/aoc20201207.dart';
|
||||
import 'package:aoc2020/aoc20201208.dart';
|
||||
import 'package:aoc2020/aoc20201209.dart';
|
||||
import 'package:aoc2020/aocbase.dart';
|
||||
import 'dart:mirrors';
|
||||
|
||||
@@ -24,6 +25,7 @@ class aoc2020 {
|
||||
AOC20201206(),
|
||||
AOC20201207(),
|
||||
AOC20201208(),
|
||||
AOC20201209(),
|
||||
];
|
||||
|
||||
static void list() async {
|
||||
|
||||
@@ -2,15 +2,61 @@ 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;
|
||||
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
|
||||
Future<void> b({bool test}) async {
|
||||
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
|
||||
Reference in New Issue
Block a user