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.
56 lines
1.6 KiB
Dart
56 lines
1.6 KiB
Dart
import 'dart:math';
|
|
import 'package:aoc2020/aocbase.dart';
|
|
import 'package:aoc2020/model/point.dart';
|
|
import 'package:aoc2020/model/readdata.dart';
|
|
|
|
class AOC20201205 extends AOCBase {
|
|
Point calcSeat(String row) {
|
|
var rmax = 127;
|
|
var cmax = 7;
|
|
for (var rowBin = 0; rowBin < 7; rowBin++) {
|
|
var range = 128 >> rowBin + 1;
|
|
rmax -= (row[rowBin] == 'F') ? range : 0;
|
|
}
|
|
for (var rowBin = 0; rowBin < 3; rowBin++) {
|
|
var range = 8 >> rowBin + 1;
|
|
cmax -= (row[rowBin + 7] == 'L') ? range : 0;
|
|
}
|
|
return Point(rmax, cmax);
|
|
}
|
|
|
|
@override
|
|
Future<void> a({bool test}) async {
|
|
var filename = (test ?? false) ? classStringTest : classString;
|
|
var mylist = await ReadData.readFileString(filename);
|
|
var maxSeatId = 0;
|
|
for (var row in mylist) {
|
|
var seat = calcSeat(row);
|
|
var val = seat.item1 * 8 + seat.item2;
|
|
maxSeatId = max(maxSeatId, val);
|
|
}
|
|
answerA = maxSeatId;
|
|
}
|
|
|
|
@override
|
|
Future<void> b({bool test}) async {
|
|
var filename = (test ?? false) ? classStringTest : classString;
|
|
var mylist = await ReadData.readFileString(filename);
|
|
var plane = List.generate(128, (i) => List.generate(8, (j) => false, growable: false), growable: false);
|
|
|
|
for (var row in mylist) {
|
|
var seat = calcSeat(row);
|
|
plane[seat.item1][seat.item2] = true;
|
|
}
|
|
|
|
for (var rowIndex = 0; rowIndex < plane.length; rowIndex++) {
|
|
var row = plane[rowIndex];
|
|
if (row[0] == false) continue;
|
|
if (row.contains(false)) {
|
|
var column = row.indexWhere((seat) => seat == false);
|
|
answerB = rowIndex * 8 + column;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|