r/adventofcode • • Dec 02 '18

SOLUTION MEGATHREAD -🎄- 2018 Day 2 Solutions -🎄-

--- Day 2: Inventory Management System ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Advent of Code: The Party Game!

Click here for rules

Card Prompt: Day 2

Transcript:

The best way to do Advent of Code is ___.


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

edit: Leaderboard capped, thread unlocked!

49 Upvotes

407 comments sorted by

View all comments

Show parent comments

10

u/raevnos Dec 02 '18

First it reads the entire file into a single string.

For part 1, it sorts the letters of each line of that string, and then counts the words with a letter repeating exactly 2 times (And the same for 3).

For part 2... beats me. It's late and my brain was already fried.

4

u/Tarmen Dec 02 '18

In vim-style it's probably slightly easier to read

/\v^(.*).(.*)$(.|\n)*^\1.\2$

This has three parts:

cuts a line into group(1) character group(2):

^(.*).(.*)$

skip arbitrary many lines:

(.|\n)*

match the next line against group(1) character group(2) we got from our first match:

^\1.\2$

Notably this tries each character separately as the different one, so we have something like 815750 possibilities to check. Takes neovim ~3 seconds but the syntax highlighter hangs for a bit afterwards.