The problem with puzzles is just that. You ask questions and hire candidates based on issues that have nothing related to the job. The end result is you up hiring the wrong people and then say you can't find good programmers.
You can't find good programmers because you are not asking questions meant to hire good programmers. You wanted puzzle experts and that is what you got.