In our world you have two kinds of people, programmers and software engineers. I don't believe in such a thing as a good programmer or a bad programmer because everyone judges in different ways and it its very big headed of them to consider another programmer when I am sure they have failings of their own. Such behaviour effects moral, team work and a persons confidence and achieves nothing. Those programmers that consider them selfs 'great and good' and can code amazing algos in 3 seconds can fail at code design and testing, while others can take a little longer but achieve good design, consideration of patterns and testability. Everyone is different and its more about where you want both your self (and prehaps your team) to be with out making it a witchhunt.
Every single programmer should aim to be a software engineer, write great code but consider everyone else, they can design their code in a paper or tdd way, they can test there code and consider testability in their code, they undertstand concepts like patterms and they can consider patterns in their code to help improve their code. These are just a few things but doing we do is much more than bashing the keyboard, even great programmers can churn out plates of pasta with no thought or consideration of anyone else coming to the code. A key example, in my own experince a fraction of programmers (a very small fraction) know how to unit test, a even smaller fraction know what TDD is let alone use it and even smaller fraction still know about BDD. Even so called great programmers do not write unit tests yet programmers who some may consider not so great do, I know who gets the vote there.
I don't believe in stupid interview questions or tests, while they are suppose to give you an idea of persons ability they can very quickly turn into a wits contest and do not reflect on a person at all. Every person is different, some may succeed at these sorts of questions at interview level and some may not. Does that make them a bad programmer, no it just means they need to carefully consider what they are doing. Prehaps rather than asking them to code something (and again everyone approaches a problem in a different way) ask them how they would approach a problem, what steps they would take and where they have used that approach before. It's all about attitude, for any given persons CV you can see if they go the extra miles in their spare time and career.
Let's also not pick on grads, every single grad I have worked with have been open minded, hard working and who are willing to push them selfs to be better and most important of all aim to be software engineers.