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.
43 lines
1.6 KiB
Dart
43 lines
1.6 KiB
Dart
import 'package:aoc2020/aocbase.dart';
|
|
import 'package:aoc2020/model/readdata.dart';
|
|
// import 'dart:mirrors';
|
|
|
|
class AOC20201202 extends AOCBase {
|
|
@override
|
|
Future<void> a({bool test}) async {
|
|
var filename = (test ?? false) ? classStringTest : classString;
|
|
var mylist = await ReadData.readFileString(filename);
|
|
var validPasswords = 0;
|
|
for (var index = 0; index < mylist.length; index++) {
|
|
var mysplit = mylist[index].split(' ');
|
|
var password = mysplit[2];
|
|
var testLetter = mysplit[1].split(':')[0];
|
|
var rangeCount = mysplit[0].split('-');
|
|
var minCount = int.parse(rangeCount[0]);
|
|
var maxCount = int.parse(rangeCount[1]);
|
|
var count = testLetter.allMatches(password).length;
|
|
if (count >= minCount && count <= maxCount) validPasswords++;
|
|
}
|
|
answerA = validPasswords;
|
|
}
|
|
|
|
@override
|
|
Future<void> b({bool test}) async {
|
|
var filename = (test ?? false) ? classStringTest : classString;
|
|
var mylist = await ReadData.readFileString(filename);
|
|
var validPasswords = 0;
|
|
for (var index = 0; index < mylist.length; index++) {
|
|
var mysplit = mylist[index].split(' ');
|
|
var password = mysplit[2];
|
|
var testLetter = mysplit[1].split(':')[0];
|
|
var rangeCount = mysplit[0].split('-');
|
|
var index1 = int.parse(rangeCount[0]) - 1;
|
|
var letter1 = password.substring(index1, index1+1) == testLetter;
|
|
var index2 = int.parse(rangeCount[1]) - 1;
|
|
var letter2 = password[index2] == testLetter;
|
|
if (letter1 ^ letter2) validPasswords++;
|
|
}
|
|
answerB = validPasswords;
|
|
}
|
|
}
|