Complete day 4 part 1

This commit is contained in:
2025-12-09 14:27:01 -06:00
parent 8a0e23c941
commit 016f8405e7
2 changed files with 246 additions and 0 deletions

View File

@@ -3,6 +3,27 @@ import "dart:io";
import "package:args/command_runner.dart";
List getAdjacent(List<List<bool>> map, int idx, int idy) {
var adjacentValues = [];
for (int x in [-1, 0, 1]) {
for (int y in [-1, 0, 1]) {
if (x == 0 && y == 0) {
continue;
}
var xSlewed = idx + x;
var ySlewed = idy + y;
//print("$xSlewed, $ySlewed");
try {
//print(map[ySlewed][xSlewed]);
adjacentValues.insert(adjacentValues.length, map[ySlewed][xSlewed]);
} on RangeError {
continue;
}
}
}
return adjacentValues;
}
class Day4Command extends Command {
// The [name] and [description] properties must be defined by every
// subclass.
@@ -32,5 +53,36 @@ class Day4Command extends Command {
var filePath = argResults!.rest[0];
print("Parsing file: $filePath");
var inputFile = File(filePath);
var paperRollMap = await inputFile
.openRead()
.transform(utf8.decoder)
.transform(LineSplitter())
.map((line) {
return line
.split('')
.map((ch) => (ch == "@") ? true : false)
.toList(growable: false);
})
.toList();
//print(paperRollMap);
//print(getAdjacent(paperRollMap, 0, 0));
int accumulator = 0;
for (var (y, row) in paperRollMap.indexed) {
for (var (x, columnValue) in row.indexed) {
if (columnValue == true) {
var numAdjacent = getAdjacent(
paperRollMap,
x,
y,
).where((value) => value).length;
if (numAdjacent < 4) {
accumulator++;
}
}
}
}
print("Part 1 Result: $accumulator");
}
}