I would love to do that with some students of mine. Only thing is, I'm not very good at it, so I can't always figure out what the underlyong principles are.
Is there a place where someone (website, blog, github, erc), much better than I, explains each puzzle, how it's solved, which algorithm is used, what underlying principles you can learn from this?
I can’t give you what you’re looking for, but the great part about challenges like this is that they are real problems to solve with input data to deal with.
You might try reorienting yourself, then. Instead of trying to teach your students the perceived “point” of each problem, use the problems to teach them about common design patterns and any algorithm that might apply that they don’t already know about. It’s not necessary to present the “best” solution and algorithm to each problem and only teach that, in other words.
I used one from a couple of years ago to practice dealing with first class functions. Would’ve been wildly inefficient at run time, but I had a fun time returning functions from functions and trying to use that to make really modular, overengineered code. And I feel I have a better grasp of that concept because of that experience even though it probably wasn’t how that problem was intended to be solved or even a good solution to it by any stretch.