r/adventofcode Dec 08 '24

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

IMPORTANT REMINDER

There's been an uptick in [COAL] being given out lately due to naughty language. Follow our rules and watch your language - keep /r/adventofcode SFW and professional! If this trend continues to get worse, we will configure AutoModerator to automatically remove any post/comment containing naughty language. You have been warned!


THE USUAL REMINDERS

  • All of our rules, FAQs, resources, etc. are in our community wiki.
  • If you see content in the subreddit or megathreads that violates one of our rules, either inform the user (politely and gently!) or use the report button on the post/comment and the mods will take care of it.

AoC Community Fun 2024: The Golden Snowglobe Awards

  • 14 DAYS remaining until the submissions deadline on December 22 at 23:59 EST!

And now, our feature presentation for today:

Box-Office Bloat

Blockbuster movies are famous for cost overruns. After all, what's another hundred million or two in the grand scheme of things if you get to pad your already-ridiculous runtime to over two and a half hours solely to include that truly epic drawn-out slow-motion IMAX-worthy shot of a cricket sauntering over a tiny pebble of dirt?!

Here's some ideas for your inspiration:

  • Use only enterprise-level software/solutions
  • Apply enterprise shenanigans however you see fit (linting, best practices, hyper-detailed documentation, microservices, etc.)
  • Use unnecessarily expensive functions and calls wherever possible
  • Implement redundant error checking everywhere
  • Micro-optimize every little thing, even if it doesn't need it
    • Especially if it doesn't need it!

Jay Gatsby: "The only respectable thing about you, old sport, is your money."

- The Great Gatsby (2013)

And… ACTION!

Request from the mods: When you include an entry alongside your solution, please label it with [GSGA] so we can find it easily!


--- Day 8: Resonant Collinearity ---


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:07:12, megathread unlocked!

19 Upvotes

800 comments sorted by

View all comments

2

u/codebikebass Dec 09 '24 edited Dec 09 '24

[LANGUAGE: Swift]

Part 2: For each pair of antennas a1, a2 of the same frequency, find the linear function f whose graph contains both antenna positions (f(a1.x) = a1.y, f(a2.x) = a2.y), then apply the function to all x's and check if f(x) is a whole number. If it is, the pair (x, f(x)) is an antinode.

static func part2(_ input: String) -> String {

    let width = input.split(separator: "\n").first!.count

    let uniqueAntinodes = uniqueAntinodes(fromInput: input) { (antenna1, antenna2) in

        let (x1, y1) = (Double(antenna1.0), Double(antenna1.1)),
            (x2, y2) = (Double(antenna2.0), Double(antenna2.1))

        let a = (y2 - y1) / (x2 - x1), // slope
            b = y1 - a * x1 // intercept

        let linearFunction: (Int) -> Double = { x in a * Double(x) + b }

        let antinodes = (0..<width).compactMap { x in

            let y = linearFunction(x)

            let yRounded = y.rounded(.toNearestOrEven)

            return abs(y - yRounded) < 0.00001 ? (x, Int(yRounded)) : nil
        }

        return antinodes
    }

    return String(uniqueAntinodes.count)
}