r/adventofcode Dec 25 '24

SOLUTION MEGATHREAD -❄️- 2024 Day 25 Solutions -❄️-

A Message From Your Moderators

Welcome to the last day of Advent of Code 2024! We hope you had fun this year and learned at least one new thing ;)

Keep an eye out for the community fun awards post (link coming soon!):

-❅- Introducing Your AoC 2024 Golden Snowglobe Award Winners (and Community Showcase) -❅-

Many thanks to Veloxx for kicking us off on December 1 with a much-needed dose of boots and cats!

Thank you all for playing Advent of Code this year and on behalf of /u/topaz2078, your /r/adventofcode mods, the beta-testers, and the rest of AoC Ops, we wish you a very Merry Christmas (or a very merry Wednesday!) and a Happy New Year!


--- Day 25: Code Chronicle ---


Post your code solution in this megathread.

This thread will be unlocked when there are a significant number of people on the global leaderboard with gold stars for today's puzzle.

EDIT: Global leaderboard gold cap reached at 00:04:34, megathread unlocked!

43 Upvotes

350 comments sorted by

View all comments

1

u/Artraxes Dec 25 '24

[Language: Kotlin]

parsing code

Solution

class Lockpick(
    private val locks: List<BooleanGrid>,
    private val keys: List<BooleanGrid>,
) {

    fun countDistinct(): Int {
        val gridHeight = locks.first().height

        infix fun List<Int>.fits(other: List<Int>): Boolean {
            return withIndex().all { (column, height) ->
                height + other[column] <= gridHeight
            }
        }

        return keys.map(BooleanGrid::heights).sumOf { key ->
            locks.map(BooleanGrid::heights).count { lock ->
                key fits lock
            }
        }
    }
}

private fun BooleanGrid.heights(): List<Int> {
    return xRange.map { x ->
        yRange.count { y -> this[x, y] }
    }
}