I regularily used a similar exercise to weed out bad candidates. The task was to build a stack with based on a double linked. Looking up stuff was okay, but straight copy paste was not. I gave them half a day and told them to write the best code they can.
There where many discussions how that exercise is relevant to the junior PHP dev position we were hiring for (spoiler: it's not). But it gives you a good idea what the candidate considers good code (consistent code style, documentation, tests,...)
I might be completely wrong about documentation not being DRY, but this by itself could be a good conversation with a candidate .
I agree, rooting out people who can't do basic things like linked lists is desirable, however, if you're going to send a take home assignment, my point was, you're not going to get a very honest measurement of their capabilities on one that they can google in a few seconds. That's all I meant.
I'd enjoy a good debugging question for sure.
I graduated from CS, and the only reason I knew anything at all about how to handle multi-tier architecture is because I was employed previous to my graduation. How do you keep configuration from being a mess? Hard coded values all over the place, etc. CS courses give you the theory needed for getting started down a path of understanding, but it does not make you understand, nor does it actually prepare you for the real world. Data structures are one thing, micro services, unit testing, configuration management, dependency injection, and persistent storage are beasts all unto themselves.
I'd also pay them for their time, regardless if they got the job.