github.com/cycloss/advent-of-code@v0.0.0-20221210145555-15039b95faa6/2021/day13/day13.dart (about) 1 import 'dart:convert'; 2 import 'dart:io'; 3 4 import 'parser.dart'; 5 6 void main() async { 7 var lines = await File("day13.txt") 8 .openRead() 9 .transform(Utf8Decoder()) 10 .transform(LineSplitter()) 11 .toList(); 12 13 var solution = Solution(lines); 14 print("Part 1 Solution: ${solution.part1()}"); 15 16 var solution2 = Solution(lines); 17 solution2.part2(); 18 } 19 20 class Solution { 21 final Problem problem; 22 23 Solution(List<String> lines) : problem = Parser(lines).processLines(); 24 25 int part1() { 26 for (var ins in problem.instructions) { 27 if (ins.axis == 'x') { 28 problem.grid = foldXAxis(problem.grid, ins.index); 29 break; 30 } else { 31 problem.grid = foldYAxis(problem.grid, ins.index); 32 break; 33 } 34 } 35 return countVisibleDots(problem.grid); 36 } 37 38 List<List<bool>> foldXAxis(List<List<bool>> grid, int index) { 39 for (var c = grid[0].length - 1; c > index; c--) { 40 var rc = (grid[0].length - 1) - c; 41 for (var j = 0; j < grid.length; j++) { 42 var b = grid[j][c]; 43 if (b) { 44 grid[j][rc] = true; 45 } 46 } 47 } 48 var newRows = <List<bool>>[]; 49 50 for (var c = 0; c < index; c++) { 51 for (var j = 0; j < grid.length; j++) { 52 if (newRows.length - 1 < j) { 53 newRows.add([]); 54 } 55 newRows[j].add(grid[j][c]); 56 } 57 } 58 return newRows; 59 } 60 61 List<List<bool>> foldYAxis(List<List<bool>> grid, int index) { 62 for (var i = grid.length - 1; i > index; i--) { 63 var ri = (grid.length - 1) - i; 64 var row = grid[i]; 65 var rrow = grid[ri]; 66 for (var j = 0; j < row.length; j++) { 67 if (row[j]) { 68 rrow[j] = true; 69 } 70 } 71 } 72 var newRows = <List<bool>>[]; 73 for (var i = 0; i < index; i++) { 74 newRows.add(grid[i]); 75 } 76 return newRows; 77 } 78 79 int countVisibleDots(List<List<bool>> grid) { 80 return grid.fold(0, 81 (tot, row) => tot + row.fold(0, (tot2, dot) => tot2 + (dot ? 1 : 0))); 82 } 83 84 void part2() { 85 for (var ins in problem.instructions) { 86 if (ins.axis == 'x') { 87 problem.grid = foldXAxis(problem.grid, ins.index); 88 } else { 89 problem.grid = foldYAxis(problem.grid, ins.index); 90 } 91 } 92 for (var row in problem.grid) { 93 for (var b in row) { 94 stdout.write(b ? "#" : " "); 95 } 96 stdout.write("\n"); 97 } 98 } 99 }