http://www.firstcoding.co.uk/a-puzzle-challenge/puzzle-design/