ENIGMA BOX is an educational software of logic puzzles, meticulously designed to develop and strengthen computational thinking and systematic problem-solving skills. The application consolidates three classic puzzles from computer science and logic, each focused on a distinct pillar of algorithmic reasoning. The central objective is to provide an interactive learning environment where users must apply strategic planning, pattern recognition, and state management to reach solutions, transitioning from concrete problems to abstract logical concepts.
The first challenge, the "15-Puzzle," confronts the user with a 4x4 board containing fifteen numbered pieces and a single empty space. The goal is to arrange the pieces in ascending sequential order, from 1 to 15, through sliding movements. This puzzle is a fundamental exercise in heuristics and search algorithms. Each move alters the state of the system, requiring the player to plan a sequence of actions and consider the "cost" of each step to find the most efficient path to the goal configuration.
The second component is the classic "Crossing" problem, focused on constraint logic. The player must help a farmer transport a wolf, a sheep, and a cabbage across a river, using a boat that can only carry the farmer and one other item at a time. The challenge is governed by two critical conditions: the wolf cannot be alone with the sheep, and the sheep cannot be alone with the cabbage. Success depends on the player's ability to manage finite states, ensuring that no constraints are violated on either bank of the river during the process.
Finally, the "Tower of Hanoi" presents the fundamental concept of recursion. Composed of three pillars and a set of discs of different sizes, the objective is to move the entire stack of discs from one pillar to another, following two strict rules: only one disc can be moved at a time, and a larger disc can never be placed on top of a smaller one. The optimal solution to this puzzle demonstrates the power of the "divide and conquer" strategy, where a complex problem is broken down into smaller, identical subproblems—a fundamental principle of algorithmic thinking.