this post was submitted on 04 Dec 2023
47 points (98.0% liked)

Advent Of Code

770 readers
1 users here now

An unofficial home for the advent of code community on programming.dev!

Advent of Code is an annual Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.

AoC 2023

Solution Threads

M T W T F S S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25

Rules/Guidelines

Relevant Communities

Relevant Links

Credits

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient

console.log('Hello World')

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 6 points 11 months ago (4 children)

Day 1 wasn't so bad, depending on approach. People got tripped up hard with replacing strings because of the old "twone." If you didn't happen to do string replacements it wasn't so bad.

Day 3 absolutely wrecked me though - and my overall rank was still pretty significantly better than it had been on days 1 and 2.

[–] Pluckerpluck 5 points 11 months ago

If you didn’t happen to do string replacements it wasn’t so bad.

Yeah. I was using regex to find the numbers as a quick implementation before realizing that floor. Just switched it to use a positive lookahead to solve that issue.

Day 3 was one of those challenges that if you thought of a good method quickly it wasn't too bad. Ended up compiling strings and using regex again. Worked really well actually.

[–] whats_all_this_then 5 points 11 months ago

On the flip side, twone absolutely ruined my life. Worst part was that I was looking at it and thinking "yes I handled that edge case and am only taking the first number, why's it not working"

Everything else has been a breeze. I'm using typescript and it's been chill.

[–] [email protected] 1 points 11 months ago (1 children)

Not only replacing didn't work. I did it as a regex, but Rusts regex crate only supports non-overlapping matches.

[–] [email protected] 3 points 11 months ago (2 children)

Python's re also only supports non-overlapping matches and only one direction, so what I did was

spoilerI looked for the first digit/word using the regex. Then for the last digit/word, I inverted the string and the regex (so I was matching the words eno, owt, eerht, etc.) and took the first occurence, and inverted that in case it was a word, and then I had my last digit. I just had to pay attention to only include the |\d after inverting the regex, since d\| is not right.
There are probably more elegant ways, but I couldn't come up with anything as simple as this.

[–] dukk 2 points 11 months ago

Oh, cool, I did pretty much the same thing, just finding the words manually instead (didn’t want to use any external libraries, so I just wrote a function to search for me. Haskell doesn’t have much for OOT B functionality).

[–] [email protected] 2 points 11 months ago

Oh, nice.
I just replaced those compounded words with their non-overlapping counterparts.