All entries were scored on a combination of Creativity, Code Believability and lastly count accuracy: because if the numbers look approximately right, it's harder to discover that they are indeed wrong by a few percent. All grades are out of 10 . Enjoy reading the source, and let me know if I missed some critical trickery of the program in my one sentence explanation of the failure.
Paul Parkanzky and Michal Zalewski are our two winners! Congratulations to all who participated, and apologies for the final announcement taking so many months.
Date Specific Programs
7.0 Paul Parkanzky: pparkanzky: Uses the fact that the string "second" has more words than "first" or "third" to cause a buffer overrun and skew results. Just gives them to Bush, not uninitialized memory like Matt Eastman.
7.0 Jasvir Nagra: jnagra: Uses the fact that the string "second" has more words than "first" or "third" and the fact that the times between 10 and 12am have 2 characters to cause a buffer overrun and skew results. Just gives them to Bush, not uninitialized memory like Matt Eastman. (Submitted past deadline, no victory)
6.7 Matthew Eastman: meastman: pointer arithmetic, stack smashing
6.0 Jamie Strachan: sov.cpp: Uses shell script to compile a file, run it, morphing it into another file to run and skew the votes.
5.6 Chris Ruppert: cruppert: pushes bush to nader after nov2 deadline by #defining a strange macro that inserts itself into a case statement. #defining break, a language keyword, is pretty giveaway that something is up.
5.3 Michal Forisek: mforisek: Clever political messages, uses #define to change "another number" to number instead of another_number ,when verifying that the number of votes don't exceed the number of registered voters. the call to time could have been hidden better.
5.0 Scott Craver: scraver: Local variable l gets assigned to 104 on the big day. When l is laterr used in place of 1 to multiply bush's count by 104.
4.3 Corey Edwards: cedwards: #define madness
3.3 David Wheeler: dwheeler5: Uses different code on election day.
Date Agnostic Programs
7.3 Michal Zalewski: mzalewski: Gives 1/10 of the votes to bush. Relies on macro pasting to alter the apparent meaning of code (suddenly locally declared t hides t in the outer scope)
6.3 Kennisth Davis: kdavis: printf returns 0 or 1 depending on debug, so if debug is turned on it returns correct values, other moves values there.
6.0 Michael Moore: mmoore: Comments obfuscate ?: statement that blocks out index.
6.0 Jean-Philippe Martin: jmartin: query-replace 1 l where l==-1, buffer overrun
5.7 Kester Maddock: kmaddock: Arrays begin at 0, not 1; hence uninitialized memory for the initial bush tally.
5.7 Fredrick Oehrstroemfoehrstroem: misparenthesized #define statement causes ! to cancel out with !BUSH and makes it only true if !!BUSH==input
5.7 Adam Barth: abarth: #define, Order of Operations
5.7 Travis Fisher:tfisher:macro madness... replaces the unsigned char Vote with a crazy expression that does some vote skewing (this is done on the gcc command line). Unfortunately since the exact command line was lost to the sands of time, this one will need to suffice
gcc -Disspace="'K'==" macro_tfisher.c