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
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
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; }