github.com/cycloss/advent-of-code@v0.0.0-20221210145555-15039b95faa6/2021/day13/parser.dart (about) 1 class Parser { 2 final List<String> lines; 3 List<String> out = []; 4 Parser(this.lines); 5 6 int i = 0; 7 8 Problem processLines() { 9 var grid = generateGrid(); 10 var instructions = generateInstructions(); 11 return Problem(grid: grid, instructions: instructions); 12 } 13 14 List<List<bool>> generateGrid() { 15 var vectors = <Vector2>[]; 16 for (; i < lines.length; i++) { 17 var line = lines[i]; 18 if (line == '') { 19 i++; 20 break; 21 } 22 var split = line.split(","); 23 var vector = Vector2(x: int.parse(split[0]), y: int.parse(split[1])); 24 vectors.add(vector); 25 } 26 var largest = findLargest(vectors); 27 var grid = List.generate( 28 largest.y + 1, (_) => List.generate(largest.x + 1, (_) => false)); 29 addPointsToGrid(grid, vectors); 30 return grid; 31 } 32 33 Vector2 findLargest(List<Vector2> vectors) { 34 int maxX = 0; 35 int maxY = 0; 36 for (var v in vectors) { 37 if (v.x > maxX) { 38 maxX = v.x; 39 } 40 if (v.y > maxY) { 41 maxY = v.y; 42 } 43 } 44 return Vector2(x: maxX, y: maxY); 45 } 46 47 void addPointsToGrid(List<List<bool>> grid, List<Vector2> vectors) { 48 for (var v in vectors) { 49 grid[v.y][v.x] = true; 50 } 51 } 52 53 List<Instruction> generateInstructions() { 54 var instructions = <Instruction>[]; 55 for (; i < lines.length; i++) { 56 var line = lines[i]; 57 var split = line.split(" "); 58 var instructionStr = split[2]; 59 var split2 = instructionStr.split("="); 60 var instruction = Instruction(split2[0], int.parse(split2[1])); 61 instructions.add(instruction); 62 } 63 return instructions; 64 } 65 } 66 67 class Vector2 { 68 int x, y; 69 Vector2({ 70 required this.x, 71 required this.y, 72 }); 73 } 74 75 class Problem { 76 List<List<bool>> grid; 77 final List<Instruction> instructions; 78 Problem({ 79 required this.grid, 80 required this.instructions, 81 }); 82 } 83 84 class Instruction { 85 final String axis; 86 final int index; 87 88 Instruction(this.axis, this.index); 89 }