Advertisement
mykdavies

AOC2021 Day13

Dec 13th, 2021 (edited)
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 1.21 KB | None | 0 0
  1. import 'dart:io';
  2. import 'dart:math';
  3. import 'package:more/more.dart';
  4. import 'package:collection/collection.dart';
  5.  
  6. parseLine(String l) => l.split('-').toList();
  7. late Set<Point> grid;
  8. late List<String> folds;
  9.  
  10. Point pnt(Iterable l) => Point(l.first, l.last);
  11. parseLines(List<String> lines) {
  12.   var ls = lines.splitBefore((e) => e.isEmpty).toList();
  13.   grid = {for (var e in ls.first) pnt(e.split(',').map(int.parse))};
  14.   folds = [for (var l in ls.last.skip(1)) l.substring(11)];
  15. }
  16.  
  17. applyFolds(List<String> folds) {
  18.   for (var f in folds) {
  19.     int l = int.parse(f.substring(2));
  20.     grid = <Point>{
  21.       for (var k in grid)
  22.         Point(f.startsWith('x') && k.x > l ? l - (k.x - l) : k.x,
  23.             f.startsWith('y') && k.y > l ? l - (k.y - l) : k.y)
  24.     };
  25.   }
  26. }
  27.  
  28. main() {
  29.   var lines = File('data/data13_01.txt').readAsLinesSync();
  30.   var t = DateTime.now();
  31.   parseLines(lines);
  32.   applyFolds(folds);
  33.   print('${DateTime.now().difference(t).inMilliseconds} milliseconds');
  34.   var h = grid.map((k) => k.y).max.toInt() + 1;
  35.   var w = grid.map((k) => k.x).max.toInt() + 1;
  36.   for (var r in 0.to(h)) {
  37.     print([for (var c in 0.to(w)) grid.contains(Point(c, r)) ? '█' : ' ']
  38.         .join(''));
  39.   }
  40. }
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement