Note by the Moderators: This topic is to talk about Day 3 of the Advent of Code.
For general discussion about the Advent of Code 2018 and links to topics of the other days, see this topic.
And day 3 is solved as well.
On my VM in the office both parts take about 1 to 1.25 seconds. Thats OK for me today. But the first iteration I used to get the actual solutions has some repitions in it, which I do not like.
I really have to iterate on those, and perhaps I’ll be even able to get them more efficient?
Finding a timely solution for Day 03 took me a little bit. Originally I wanted to use a range to detect overlap, but that wasn’t available so I moved on to constructing sets and counting from there. That wasn’t ideal either, and in the end using a simple map to count tuples was quick enough.
Day 3 was the most time consuming so far but also the most satisfying because I’m getting a bit more confident with Enum and I’m also picking up ideas from @josevalim’s daily Twitch streams.
My main concern with all of my code so far is that I need to break it into smaller chunks and/or add more comments because I’m not entirely sure that I’ll understand it all by the end of the challenges. Or maybe I will because I’ll be much more familiar with Elixir than I am right now.
I approached Day 3 as a set intersection problem, the only issue was finding a data structure to represent the claims that would be usable as set elements (i.e. comparable for uniqueness). I realized I could cleanly map each claim to a set of coordinates of the exact square inches of that claim; after that the solution fell into place as a series of set intersections and unions.
(I spent quite a bit of time trying to learn how to use the Tensor library (Tensor.Matrix provides matrix operations). I also looked at Matrex, but failed to install it.
In the end I used a simple sparse matrix representation using a map with {row, col} => 1 items to represent the matrix. Using the regex named captures was fun — it was something I learned the hard way from a personal project previously.)
(Haven’t been able to look at Part 2 yet — its late night already, will look at it tomorrow)