Algorithmic Thinking: A Problem-Based Introduction (2023)