this post was submitted on 03 Dec 2023
93 points (92.7% liked)

Advent Of Code

768 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
 

Thanks Homer.

all 31 comments
sorted by: hot top controversial new old
[–] [email protected] 20 points 11 months ago

I thought Alexandria Ocasio Cortez had done something scandalous at first reading

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

2D grids and parsing data from them in all manner of interesting ways is a real AoC staple.

I'm still hoping to be met with a problem at some point which can be solved by handling it as a type of funge program.

[–] [email protected] 4 points 11 months ago* (last edited 11 months ago) (1 children)

Oh indeed, but it’s normally quite straightforward in the first few days. Certainly my terrible solution today is longer than any in the first maybe 10 days of last year.

What’s a “funge program”? [edit, oh befunge-like I guess]

[–] [email protected] 6 points 11 months ago* (last edited 11 months ago) (1 children)

Yep, funge has been used to describe any kind of multi-dimensional programming language - often with self-modifying code, I've personally found both 3D and 4D funge languages.

There's just something with the whole concept that amuses me, I've been trying to build some kind of funge-style programming puzzle game for a while now, but haven't figured out a good hook to take it past being just a PoC yet.

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

I’m not sure whether to be intrigued or horrified at the idea of an AoC type challenge where we slowly build up a 4D “FungeCode” interpreter like 2019’s IntCode series (which I notice I still haven’t completed!)

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

Writing and debugging 4D code is... interesting.

When your code can't just run forwards and backwards, but also left and right, up and down, and even inwards and outwards.

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

I think the best description I saw was "Advent of Parsing"

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

Haha, that’s funny now but let’s see how we all feel in a couple of weeks…

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

Is there usually less parsing? I haven't participated in previous years. (I guess I can just check the previous years' problems, but there are a lot of those.)

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

So far I've usually had success with just going for regex, but the second challenge today bacfired quite spectacullary. I'm still postponing having to rewrite my solution, because unfortunately it's not really possible to have 2D regex (as far as I know, would be awesome).

I guess just going with some kind of flood algorithm will be the way to go, but that's effort

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

Day one really got me with those pesky overlapping words like eightwo or twone.

Today was actually really easy the way I did it.
I searched through all the characters of the lines and when I got one that wasn't a number or a period, I looked at all the 8 places around to find the numbers. The numbers I completed by looking in both directions until I got a non-number.
Then I put all numbers and their starting positions in an array, deleted the duplicates and summed them.

By doing this, question 2 only took me 4 minutes.

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

Yeah it looks like the better solutions generally took that route. I convinced myself that the symbols were going to all have different rules in part 2, so ended up thinking about it way too hard for day 3 😀

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

Thought so too, but for me it was a simple match statement (rust), which then became a glorified if statement. 😂

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

Hmm, I did it the opposite. Found every number and passed a list of every adjacent position of the number to check for non-digit/dot/non-whitespace.

Took a bit longer to solve part 2 due to that approach though.

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

In that case I was kinda lucky.

But it looked more second-partly to do it that way. 😂

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

I don't want to read the number string from both left to right and Ruth to left. So, I

  1. iterate through each row and read the number string from left to right
  2. Store each number along with its cell range. ie: 467 is 0-2.
  3. Then from each symbol, find out if the position of the symbol +/-1 falls into any range. If so then sum that number.
[–] [email protected] 3 points 11 months ago (2 children)

I haven't been parsing the input string character by character and instead have been parsing into native data structures. It makes the code more verbose but it's how I want to do it. Unfortunately it does mean most of the time coming up with a solution is structuring the data so I'm hoping I come up with a faster way after a few days.

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

Yeah, I couldn’t see a nice approach today so I fell back on an existing Grid class I’ve used in previous years. Having those existing tools helps a lot.

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

I'm still working on my part 1 😭 string parsing makes me feel so stupid haha. But I'm adamant on coming up with a "nice" solution even if the number of lines aren't minimal. I've got something quite nice at the moment and I anticipate coming in under 100 lines (including whitespace, comments, and formatting).

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

I went with a matrix approach and was just planning to handle it through indexes but kinda gave up halfway implementing the finding of numbers, their start/end positions... I'm guessing a regex but that might have issues if we have identical numbers later, so not sure. Will surely go back to it eventually though :P

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

I have a Grid class from previous years so I sort of fell into that approach too. Once you’ve got the groundwork into place the solution is not so hard to get to. Hopefully I won’t have to think so hard tomorrow!

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

Having a prepared grid helper for AoC is a 150IQ move 😁

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

Haha yes, I copied the idea from the 150IQ people.