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.

54 lines
1.5 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 mylist = await ReadData.readFile<String>(classString, test: test);
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 mylist = await ReadData.readFile<String>(classString, test: test);
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;
}
}
}
}