The assignments that follow are small programming projects that go beyond the exercises given at the end of the chapters. To complete them you have to implement an algorithm, as described, which is not one of the algorithms given in the book. The purpose is to exercise algorithmic thinking: are you able to solve a problem, even though the algorithm is described in less detail than in the book?

At the time the assignments were written, there were no ready-made solutions available online. This may no longer be true. That is the situation in most programming exercises today: a competent solution may be just a web search away. If you are tempted to do so, take a step back and ask yourself why. You may be able to find a solution to a problem, but this will not help you master the art. If you do want to master the art, you will have to sweat for it. If you do not, you may be happier doing something else altogether.


To indicate the relative difficulty of the assignments, a scale using chess pieces has been adopted: the difficulty ranges from the pawn (♙) to the bishop (♗), then the rook (♖) and finally the queen (♕). That does not mean that all, say, pawn assignments are of exactly the same difficulty; but it does mean that they are all qualitatively different from those of the bishop difficulty (and even more, from rooks and queens). As a general guideline, the scale should not be understood as following the chess piece relative value system, where a bishop assignment would be on average three times as difficult as a pawn, a rook five times, and a queen nine times.