Wanted to read it but all I get is a
NGINX 502 Error :/
@gereleth.bsky.social
Data scientist. I love coding and puzzles. Play my pipes game: https://hexapipes.vercel.app/play
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.
07.01.2025 13:24 β π 1 π 0 π¬ 0 π 0A 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)
Did you have prior experience with C++ before deciding to use it for the Advent? =)
26.12.2024 18:13 β π 1 π 0 π¬ 1 π 0Why 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)).
26.12.2024 08:45 β π 0 π 0 π¬ 0 π 0One 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.
25.12.2024 18:55 β π 1 π 0 π¬ 1 π 0I thought light grey was a background color, was pretty puzzled how the dark grey stuff could mean locks π . Almost asked you about that))
25.12.2024 14:59 β π 1 π 0 π¬ 1 π 0Fast 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.
25.12.2024 14:46 β π 0 π 0 π¬ 0 π 0I want to debug that circuit with real wires π
25.12.2024 08:57 β π 2 π 0 π¬ 0 π 0Pretty 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!
23.12.2024 20:37 β π 1 π 0 π¬ 0 π 0Well to be honest this is the first time I've imported numpy in this year's advent :)
23.12.2024 17:14 β π 1 π 0 π¬ 1 π 0I 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`
This looks like it scans something like
for a in path:
for b in path[from a]:
...
(probably?)
Maybe scanning around `a` in a diamond-pattern would be faster with fewer checks.
But this is my longest running task too so what do I know lol π
I think this "search for other point in the path" is what takes long.
`const index = pathStrings.indexOf(key)`
It can be just a Map lookup of distance to finish.
Hmm, I didn't realize the path from start to finish covered the whole maze!
I did it this way - get distances start-to-point and point-to-end for every traversable point. Iterate in a diamond around each point and check if dstart[p1]+manhattan(p1,p2)+dfinish(p2) is good enough. Runs in ~2s.
Cool stiched together look! But I struggle to understand what color means here.
What's your approach to part 2?
#AdventOfCode Day 19 - Linen Layout
Some dynamic programming if not dynamic visuals.
No idea how to show full input, there's 400 sequences there =).