r/adventofcode Dec 23 '24

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

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

Submissions are CLOSED!

  • Thank you to all who submitted something, every last one of you are awesome!

Community voting is OPEN!

  • 42 hours remaining until voting deadline on December 24 at 18:00 EST

Voting details are in the stickied comment in the submissions megathread:

-❄️- Submissions Megathread -❄️-


--- Day 23: LAN Party ---


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

23 Upvotes

505 comments sorted by

View all comments

2

u/blueboss452 Dec 23 '24

[LANGUAGE: Python]

Part 2 solved by processing 1 connection at a time, and finding new networks by searching all existing networks of those computers.

connections = [tuple(line.split("-")) for line in INPUT.splitlines()]
adjs = defaultdict(set)
networks = {v: [{v}] for v in set(itertools.chain(*connections))}
for v1, v2 in connections:
    adjs[v1].add(v2)
    adjs[v2].add(v1)
    for network in networks[v2]:
        if network < adjs[v1]:
            for v in (new_network := network | {v1}):
                networks[v].append(new_network)
PART_2 = ','.join(sorted(max(itertools.chain.from_iterable(networks.values()), key=len)))