Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:io';
- import 'dart:math';
- import 'package:more/more.dart';
- import 'package:collection/collection.dart';
- parseLine(String l) => l.split('-').toList();
- late Set<Point> grid;
- late List<String> folds;
- Point pnt(Iterable l) => Point(l.first, l.last);
- parseLines(List<String> lines) {
- var ls = lines.splitBefore((e) => e.isEmpty).toList();
- grid = {for (var e in ls.first) pnt(e.split(',').map(int.parse))};
- folds = [for (var l in ls.last.skip(1)) l.substring(11)];
- }
- applyFolds(List<String> folds) {
- for (var f in folds) {
- int l = int.parse(f.substring(2));
- grid = <Point>{
- for (var k in grid)
- Point(f.startsWith('x') && k.x > l ? l - (k.x - l) : k.x,
- f.startsWith('y') && k.y > l ? l - (k.y - l) : k.y)
- };
- }
- }
- main() {
- var lines = File('data/data13_01.txt').readAsLinesSync();
- var t = DateTime.now();
- parseLines(lines);
- applyFolds(folds);
- print('${DateTime.now().difference(t).inMilliseconds} milliseconds');
- var h = grid.map((k) => k.y).max.toInt() + 1;
- var w = grid.map((k) => k.x).max.toInt() + 1;
- for (var r in 0.to(h)) {
- print([for (var c in 0.to(w)) grid.contains(Point(c, r)) ? '█' : ' ']
- .join(''));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement