Far from scientific analysis but using Unmask[1] I get a pretty low scare (109/300) comparing the first Michael Clear pre-print I could find against the Bitcoin paper.
One of my CS professors claimed he had a script to analyze all of his students' programming assignments to find possible instances of cheating. I have no idea how extensive his algorithm was: it could have been anything from a simple whitespace and variable name normalization to an analysis of the abstract syntax tree. Or he may have just been bluffing.
Here's a very simple trick that works for programming languages with a C-style syntax: strip out everything except parentheses, braces, and semicolons and compare. I know that it was used successfully in an algorithms course (shortest paths, flows, that kind of stuff) which had stand-alone implementations of the algorithms as assignments.
Edit: Of course there was a manual inspection step involved as well, this matching process was only used to flag suspicious instances.
And I wouldn't punish cheating in those courses directly: Just add the requirement that people need to be able to explain their solutions however they arrived at them. Being able to explain other people's code is a useful skill, too.
Comments
So, anyone written any software that compares two pieces of code and gives the odds of them both being written by the same person?
Far from scientific analysis but using Unmask[1] I get a pretty low scare (109/300) comparing the first Michael Clear pre-print I could find against the Bitcoin paper.
[1] http://immunityinc.com/downloads/unmask1.0.tar.gz
One of my CS professors claimed he had a script to analyze all of his students' programming assignments to find possible instances of cheating. I have no idea how extensive his algorithm was: it could have been anything from a simple whitespace and variable name normalization to an analysis of the abstract syntax tree. Or he may have just been bluffing.
Here's a very simple trick that works for programming languages with a C-style syntax: strip out everything except parentheses, braces, and semicolons and compare. I know that it was used successfully in an algorithms course (shortest paths, flows, that kind of stuff) which had stand-alone implementations of the algorithms as assignments.
Edit: Of course there was a manual inspection step involved as well, this matching process was only used to flag suspicious instances.
And I wouldn't punish cheating in those courses directly: Just add the requirement that people need to be able to explain their solutions however they arrived at them. Being able to explain other people's code is a useful skill, too.
It may be a useful skill, but it's also not what's being taught in an algorithms course.
Likely something like http://theory.stanford.edu/~aiken/moss/, I'd guess.
If not, software that does the same for plain text might work.