I'm on the computer a little later than usual, so I thought I'd get the post for tomorrow up now so I don't have to do it in the morning, since it's past midnight on the East coast anyway.
The Puzzle
Oh my gosh, today’s puzzle is a parsing, dependency graph nightmare. Maybe I'm just tired and overcomplicating things in my head, but I'm thinking that's the case. Our input is a series of lines describing how certain colors of bag (e.g. "vivid plum") can contain certain quantities of other bags (e.g. "shiny gold"). We are to decide which bags can contain our bag, the shiny gold one. Yoy.
The Leaderboards
As always, this is the spot where I’ll plug any leaderboard codes shared from the community.
Ryan's Leaderboard: 224198-25048a19
If you want to generate your own leaderboard and signal boost it a little bit, send it to me either in a DEV message or in a comment on one of these posts and I'll add it to the list above.
Yesterday’s Languages
Updated 03:08PM 12/12/2020 PST.
Language | Count |
---|---|
JavaScript | 4 |
Ruby | 3 |
Haskell | 2 |
Clojure | 2 |
Python | 2 |
Rust | 1 |
TypeScript | 1 |
COBOL | 1 |
Elixir | 1 |
C# | 1 |
Go | 1 |
C | 1 |
Merry Coding!
Latest comments (19)
Urgh this was horrible. I should have taken the opportunity to learn some kind of graph library to do this, but I've spent way enough time looking at it now.
Sweet mother of everything, I've walked a graph in COBOL.
F#:
Solution for C# (part 2).
Just wanted to finish it, so don't expect any beauty :) :
`
Python
My cleanest solution! Wrote more about it, even tested networkx in my blogpost.
I'm not happy with this javascript solution. Part 1 is very slow, and part 2 is not regexy enough. I'll hide it behind this gist.
Struggled on this one more than I probably should have. I started with a recursion bug that was right in front of my eyes, then went on to part2 to realize that I would need to re-think my model (can't say I didn't see that one coming).
Part 1
Part2
Node
I pull out that PEG parser again to handle my input, I feel it's more readable than a full regex solution, since you define the entire syntax of the input file up-front for everyone to see. But it's not as compact as a pure regex solution, and there's a lot of extra nodes (could probably golf it, but it would be less readable). One benefit is the NodeVisitor is already doing a depth-first visit of the generated AST, so you can piggy back the graph generation in there to save a loop or two.
I used the NetworkX graph library in Python to get the
ancestors
for free, but unfortunately still had to write a recursive traversal of the DAG to get the sums for Part 2.Made some nice graphs while I was at it too, more on my post

Ruby, part 2. Oddly much easier than part 1. Parsing modified to suit the problem better: