IOCCC image by Matt Zucker

The International Obfuscated C Code Contest

2000/primenum - Best abuse of CPP

Source with English words that looks like a prime tester

Author:

To build:

    make

Bugs and (Mis)features:

The current status of this entry is:

STATUS: INABIAF - please DO NOT fix

For more detailed information see 2000/primenum in bugs.html.

To use:

    echo n | ./primenum n

NOTE: n is an integer.

Try:

    ./try.sh

Judges’ remarks:

Just stop and read the program; it won’t take long. Once you’ve figured out what it does, run it. It may surprise you.

This entry won, not because the obfuscation is impenetrable, but because it successfully fooled half of the judges, including me.

NOTICE to those who wish for a greater challenge:

If you want a greater challenge, don’t read any further: just try to understand the program via the source.

If you get stuck, come back and read below for additional hints and information.

Author’s remarks:

Description

For 15 years, IOCCC entries have obfuscated programs using esoteric, difficult-to-interpret, confusing algorithms. This entry finally bucks that trend and obfuscates in the most “obvious” way possible: by painstakingly describing the algorithm in clear pseudocode. Even novice programmers will recognize that the program should find and print prime numbers up to a given number (as specified on the command line).

But novice programmers especially know that mistakes are often made in translating pseudocode to real code, often resulting in programs with unexpected and confusing output. Clearly, the program contains several syntax “mistakes” (e.g. LessThanOrEqualTo) and blatant “errors” (e.g. Zero). This program clearly requires “debugging.”

As a result of these “bugs”, the program does not calculate primes at all. Instead, the program reads input from stdin and returns garbled text on stdout. Fortunately, you can recover the original message simply by running the program a second time. Try:

    ./primenum n < textfile | ./primenum n > textfile2
    diff textfile textfile2

where n is the same number (modulo 64). So, the prime number generator is actually a simple text encoder/decoder! Of course, don’t forget that argument, otherwise the “bugs” in the program will cause it to crash!

Features

Inventory for 2000/primenum

Primary files

Secondary files


Jump to: top