Daria
gereleth.bsky.social
Daria
@gereleth.bsky.social
42 followers 45 following 60 posts
Data scientist. I love coding and puzzles. Play my pipes game: https://hexapipes.vercel.app/play
Posts Media Videos Starter Packs
Wanted to read it but all I get is a
NGINX 502 Error :/
My pipes game just got two new grids =)

I like the mix of hexagons, triangles and squares - hexapipes.vercel.app/rhombitrihex...

And the triangular grid is just pure minimalism - three distinct tiles and that's it hexapipes.vercel.app/triangular/5
Saint Petersburg at night as seen from an airplane window on my recent flight. Spectacular view.
A playlist of all the animations I made for #AdventOfCode 2024:
www.youtube.com/playlist?lis...

Managed to do a total of 14 days with #py5. Curiously the number is exactly the same as in '23 when I used #pygame. Each video has a link to the animation source code if you wanna see the messy plumbing)
Advent of Code 2024 Visualisations - YouTube
Animations illustrating the solutions to Advent of Code problems of 2024.
www.youtube.com
Did you have prior experience with C++ before deciding to use it for the Advent? =)
Why are some points going blue? Are those part 2 obstacle locations? The animation makes me think there is some trick to finding them that I'm not aware of)).
One other thing I tried before was to represent a sequence of changes as a single large number (like 4 digits in base 19 because there are 19 possible changes in -9..9)
Then the 5d array can be a 2d array, where the other dimension is 19**4. But timings were about the same as 5d approach.
I just tried line profiling and indeed the last line with `sequences.clip().sum().max()` takes 50% of total part2 time. I tried putting the buyers dimension last - no change in performance.
It's just a heavy operation however you slice it I think =).
I was wrong here, numpy is also very good for day20 (Race Condition). If distances from starting point are a 2d numpy array then for every cheating offset you can get the gains for the whole grid at once. My solution time went from 1.7s to 100ms when I switched to this approach.
I thought light grey was a background color, was pretty puzzled how the dark grey stuff could mean locks 😅. Almost asked you about that))
Fast solutions aren't general, they use some properties of the input that aren't in the task description. I studied the input program's flow on paper to figure out a shortcut for part 2. A direct "black box" approach does take forever.
I want to debug that circuit with real wires 😄
Pretty proud of solution times this year - all days run in just ~2.5s.
Day 20 Race Condition used to take almost 2s before I gave it some numpy love.

#python solutions and animations code here: github.com/gereleth/aoc...
All done with #AdventOfCode 2024. Fun ride as always!

Most memorable days for me:
- Day 14 (find the tree)
- Day 21 (robots inception)
- Day 24 (so that's how binary addition works!)

#py5 was very nice for making animations and I learned to use a statemachine to manage vis data
Thanks, #AdventOfCode, now I know how to construct a binary addition apparatus from logic gates 🤯

I submitted a handcrafted part2 answer earlier but I've now written some code that finds the swaps. Who knows if it works on other inputs =)
github.com/gereleth/aoc...
They are clumped together rather nicely!
Well to be honest this is the first time I've imported numpy in this year's advent :)
I made a couple of manual adjustments to avoid white edges intersecting).
And 0.5px stroke weight is great for hiding the outer hairyness.
I couldn't untangle the crowded third layer, some connections through the center are unavoidable.
I was randomly throwing networkx layouts at the problem, and spectral clustering split nodes into sort of growing layers:
..
|\
....
|\\\\
.......
Where the max clique was the tight group on top. So I made these concentric circles going in bfs layers from max clique.
I had a similar solution at first, only I had a dict with total sequence profits and a separate "seen" set that I reset between buyers. Ran in ~6s.

Then I switched to a 5d numpy array for sequence results and worked on buyers in a vectorized way. Takes ~0.7s now. github.com/gereleth/aoc...
Cutesy structure this graph has. Outer layers are still hairy, I haven't figured them out =).

#AdventOfCode Day 23 LAN Party
#AdventOfCode Day 20 - Race Condition

Showing millions of cheats is tricky so this one turned out a little weird =). In part 2 it repaints the points by their total possible cheat gains. Pretty neat structure shows up.

#py5 animation code: github.com/gereleth/aoc...
#AdventOfCode Day 21 - Keypad Conundrum

The robots almost broke my brain this morning, this was super hard for some reason.
But at least the solution works pretty much instantly.

#python solution code: github.com/gereleth/aoc...

#py5 animation code github.com/gereleth/aoc...
Isn't Manhattan distance just abs(xa-xb) + abs(ya-yb)? Why walk the path at all to find it?
Or maybe your data is stored differently, linked list style...
I have points as tuples (y,x) so Md calculation is just arithmetic and so is the diamond loop.
I'm talking about this difference:

for every node in path after a:
is it close enough?
is the gain good?
=> median ~5000 iterations for various `a`s

vs

for every node within 20 manhattan of a:
is it in the path?
is the gain good?
=> ~400 iterations for every `a`