## Day 15
This one is solved by a Dijksra algorithm. I use a `std.PriorityQueue` for
storing grid points to visit. I can not use `queue.update()` because of some
limitations in the std lib implementation, so I just keep adding the grid
points. It turns out to be faster than updating with `std.meta.eql()`. This
solution is ~240ms for the second part.
## Day 16
I convert from hex to binary as string with `switch`. Not sure if this is good
or bad. The rest if slicing and parsing. Nothing fancy.
## Day 17
This first part is a simple calculation. In second part I just brute force the
solutions with the following optimizations:
- I keep vx{min, max} and vy{min, max} limited to the interesting part.
- I also keep the time (steps) within useful range.
- I break the loop when it has no chance to come up with a hit.
## Day 18
### First solution: day18a_string.zig
My go solution uses strings to solve this with regexes and so. I have tried to
replicate that in zig, but it needs a regex lib (which is not in the `std`) and
turns out to be quite slow. The first part takes ~500ms on my
computer, so I have to find a better way.