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/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
|
||||||
Reference in New Issue
Block a user