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  }