This blog series covers various algorithmic problems, as well as discusses their solutions. While the goal is not to teach Algorithms and Data Structures from ground up, these problems can help practice and brush up your algorithmic knowledge.
While programming language crystal is primarily used to solve problems, this blog does not attempt to teach the language itself. Thankfully, the language syntax is elegant enough that the reader does not necessarily need to know the language in order to walk through the solutions.