It has always bothered me why CS assignments in some classes are so strangely off from what is supposedly being learned. Often there is some trick and the solution can be found only by not being deceived by the weaselly wording of the assignment, nor by being misled by the current subject matter in the class.
If you are already a successful programmer, these CS projects seem especially surreal given that "cheating" is the label given for all those things you would do in real life to learn and solve, including collaboration and seeking example code.
As an assignment in a computer ethics class I gave a talk on how the internet was going to bring college level CS education, especially self-education, to global masses. (Some universities even put their class materials online and available to everyone.) The idea was that once these useful information and materials got out there, they become part of a more advanced world culture.
During Q and A the teacher criticized that I didn't account for how hard it was to come up with new problems year after year to test and grade CS students, and that putting everything online made this only more difficult. The teacher was actually advocating holding information back to make it easier to rate students.
I answered by saying that there are two competing motivations for teaching methods in university classes: one is to enlighten, feed and grow minds, especially all the minds that paid through the nose for the service; the other was to "weed out," and to grade--like putting the class into a series of sifting screens--the course objects getting removed first and labeled low grade, and the finest ones coming out the end and getting labeled "academic excellence." I asked how much the former was to be sacrificed for the latter.
Didn't finish that class.