Day 7: Bridge Repair

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
    2
    ·
    edit-2
    15 days ago

    Dart

    Suspiciously easy, so let’s see how tomorrow goes… (edit: forgot to put the language! Dart for now, thinking about Uiua later)

    import 'package:more/more.dart';
    
    var ops = [(a, b) => a + b, (a, b) => a * b, (a, b) => int.parse('$a$b')];
    
    bool canMake(int target, List<int> ns, int sofar, dynamic ops) {
      if (ns.isEmpty) return target == sofar;
      for (var op in ops) {
        if (canMake(target, ns.sublist(1), op(sofar, ns.first), ops)) return true;
      }
      return false;
    }
    
    solve(List<String> lines, dynamic ops) {
      var sum = 0;
      for (var line in lines.map((e) => e.split(' '))) {
        var target = int.parse(line.first.skipLast(1));
        var ns = line.skip(1).map(int.parse).toList();
        sum += (canMake(target, ns.sublist(1), ns.first, ops)) ? target : 0;
      }
      return sum;
    }
    
    part1(List<String> lines) => solve(lines, ops.sublist(0, 2));
    part2(List<String> lines) => solve(lines, ops);