Update
[less_retarded_wiki.git] / ioccc.md
bloba26b4dc9abcf0dd53e7cf38ecbb331672610f94c
1 # International Obfuscated C Code Contest
3 The International Obfuscated C Code Contest (IOCCC for short) is an annual online contest in making the most creatively [obfuscated](obfuscation.md) programs in [C](c.md). It's kind of a "just for [fun](fun.md)" thing but similarly to [esoteric languages](esolang.md) there's an element of [art](art.md) and clever [hacking](hacking.md) that carries a high value. While the [productivity freaks](productivity_cult.md) will undeniably argue this is nothing more than a waste of time, the true programmer appreciates the depth of knowledge and creative thinking required to develop a beautifully obfuscated program. The contest has been around since 1984 and was started by Landon Curt Noll and Larry Bassel.
5 Unfortunately some [shit](shit.md) is surrounding IOCCC too, for example confusing licensing -- having a [CC-BY-SA](cc_by_sa.md) license in website footer and explicitly prohibiting commercial use in the text, WTF? Also the team started to use [Microshit](microsoft.md)'s [GitHub](github.md). They also allow latest [capitalist](capitalist_software.md) C standards, but hey, this is a contest focused on ugly C, so perhaps that makes sense after all.
7 Hacking the rules of the contest is also encouraged and there is an extra award for "worst abuse of the rules".
9 To list a few common ideas/programs that have appeared let's mentioned these:
11 - formatting source code as [ASCII art](ascii_art.md)
12 - misleading identifiers and comments
13 - extreme [macro](macro.md)/[preprocessor](preprocessor.md) abuse
14 - abuse of compiler flags
15 - different behavior under different C standards/compilers
16 - doing simple things the hard way, e.g. by avoiding loops
17 - including weird files like `/dev/tty` or recursively including itself
18 - [code golfing](code_golf.md)
19 - weird stuff like the main function [recursion](recursion.md) or even using it as a signal handler :)
20 - doing funny stuff like computing [pi](pi.md) by calculating area of a circle that is physically drawn in the source code
21 - program whose source code is taken from its file name (using `__FILE__`)
22 - [ray tracer](ray_tracing.md) in < 30 LOC formatted as ASCII art
23 - operating system with multi-tasking, GUI and filesystem support
24 - [neural](neural_net.md) [machine learning](machine_learning.md) on text in < 4KB
25 - program printing "hello world" with error messages during compilation
26 - [X11](x11.md) Minecraft-like game
27 - [web browser](web_browser.md)
28 - self-replicating programs
29 - [chess](chess.md) programs
30 - ...
32 ## See Also
34 - [NaNoGenMo](nanogenmo.md)
35 - [SIGBOVIK](sigbovik.md)
36 - C [compiler bombs](compiler_bomb.md)