Puzzle Algorithms