Day 25: Code Chronicle

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

FAQ

  • mykl@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    1 day ago

    Dart

    Quick and dirty, and slightly tipsy, code.

    Happy Christmas everyone!

    Thanks to Eric and the team at Advent of Code, to @Ategon@programming.dev and @CameronDev@programming.dev for giving us somewhere to share and discuss our solutions, and to everyone here for the friendly and supportive community.

    See you all next year!

    import 'package:collection/collection.dart';
    import 'package:more/more.dart';
    
    part1(List<String> lines) {
      var (w, h) = (lines.first.length, lines.indexOf(''));
      var (falsey: keys, truthy: locks) = (lines..insert(0, ''))
          .splitBefore((l) => l.isEmpty)
          .map((g) => [
                for (var x in 0.to(w)) [for (var y in 1.to(h + 1)) g[y][x]]
              ])
          .partition((g) => g[0][0] == '#');
      return keys
          .map((l) => locks.count((k) =>
              0.to(w).every((r) => (l[r] + k[r]).count((e) => e == '#') < 8)))
          .sum;
    }