Advertisement
mykdavies

AOC 2022 Day 10

Dec 10th, 2022 (edited)
457
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 1.73 KB | None | 0 0
  1. /// A register gets updated by simple instructions
  2. /// 1) What is its value at certain times?
  3. /// 2) Draw a screen based on these. What letters can you see?
  4.  
  5. import 'package:more/more.dart';
  6. import 'package:collection/collection.dart';
  7.  
  8. List<int> processRegisters(List<String> lines) {
  9.   var screen = [1];
  10.   parseInstr(String s) {
  11.     screen.add(screen.last);
  12.     if (s.startsWith('noop')) return;
  13.     var n = int.parse(s.split(' ').last);
  14.     screen.add(screen.last + n);
  15.   }
  16.  
  17.   lines.forEach(parseInstr);
  18.   return screen;
  19. }
  20.  
  21. part1(List<String> lines) {
  22.   var sig = processRegisters(lines);
  23.   return [for (var i = 20; i < sig.length; i += 40) i * sig[i - 1]].sum;
  24. }
  25.  
  26. part2(List<String> lines) {
  27.   var sig = processRegisters(lines);
  28.   var scr = List.filled(240, false);
  29.   for (var i in 0.to(sig.length)) {
  30.     scr[i % scr.length] |= (sig[i] - (i % 40)).abs() <= 1;
  31.   }
  32.   for (var i in 0.to(scr.length, step: 40)) {
  33.     print(scr.sublist(i, i + 40).map((e) => e ? '#' : '.').join(''));
  34.   }
  35.   return readLetters(scr);
  36. }
  37.  
  38. // Parse an AoC output to find the letters encoded in it.
  39. readLetters(List<bool> l) {
  40.   var hexes = l
  41.       .chunked(5)
  42.       .map((e) => e.take(4))
  43.       .map((e) => int.parse(e.map((e) => e ? '1' : '0').join(''), radix: 2)
  44.           .toRadixString(16))
  45.       .toList();
  46.   var ll = hexes.length ~/ 6;
  47.   hex(x) => 0.to(hexes.length, step: ll).map((e) => hexes[x + e]).join('');
  48.   return 0.to(ll).map((e) => letters[hex(e)] ?? '?').join('');
  49. }
  50.  
  51. var letters = {
  52.   '699e99': 'A',
  53.   'e9e99e': 'B',
  54.   '698896': 'C',
  55.   'f8e88f': 'E',
  56.   'f8e888': 'F',
  57.   '698b97': 'G',
  58.   '99f999': 'H',
  59.   '311196': 'J',
  60.   '88888f': 'L',
  61.   'e99e88': 'P',
  62.   'e99ea9': 'R',
  63.   '999996': 'U',
  64.   'f1248f': 'Z',
  65. };
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement