Create the algorithm for splitting a given image into puzzles (at least 16). All puzzles are rectangles and they cannot intersect. Create a convenient way to hold information about puzzles.
Create a Web Application for displaying puzzles. There should be an opportunity to swap puzzles or turn them. Implement check if the puzzles make up a given image.
Create the algorithm for solving puzzles (make them up in order which represents the initial image). The solving algorithm should know nothing about previous tasks. This algorithm only knows about the size of the initial image and has only sub-images to operate with.