Obfuscated C Code Contest Begins
slashdot-me writes "The International Obfuscated C Code Contest (IOCCC) has begun. See the rules at the IOCCC homepage. The contest runs from Feb. 1 to March 31. " As always, the results will be only readable by Martians.
Oh yeah, so where's the obfuscated Intercal code contest?
Oh, maybe we should drop that...
#define begin {
#define end }
#define if say
#define yell printf
#define else otherwise
#define @ ;
/* slash_posted returns a 1 if a new slashdot
article has been posted */
ac_poster_screams()
say(slash_posted)
begin
yell("FIRST POST!")@
end
otherwise
begin
yell("Bill Gates Naked and Petrified!")@
end
end
--
No need! It already comes that way!!
I can code that in three APL glyphs!
-- What you do today will cost you a day of your life.
Check out the Intercal quine. It's the most painful piece of source I've ever seen (and I keep up with the ioccc).
--neil
Since www.ioccc.org seems to be unreachable at the moment (at least for me), you can amuse yourself by looking at previous winning entries
:)
Have fun
The net will not be what we demand, but what we make it. Build it well.
By the way, I just tried it under gcc (I haven't tried it in a long time), and unfortunately it doesn't appear to work anymore. :(
Anyone want to take a crack at debugging it? :)
For you young 'uns, tiny basic took line numbers. The following should work:
10 for i = 0 to 10
20 print i
30 next i
run
I think it also has a full expression evaluator built in, so you can do some "let j = i * 10" type thing also.
--
10 print "In reality I'm an obfuscated version of msvcrt.dll"
20 goto 10
Never underestimate the relief of true separation of Religion and State.
Perhaps the same website should have an "old timer's league" as well.
I can see it now "The Grande Olde Obfuscated FORTRAN Code Contest"
-ShelbyCobra
Living life in the right side of the s-plane
I don't have the time, but an obviscated css-auth formated in the shape of the DVD logo would be neat. You could print it on t-shirts and the like without people realizing what they are looking at.
The Martian entry, due to be received by the Mars Lander and beamed back to Earth in time for this year's contest, was disqualified on account of being too obscure, causing the main on-board computer to explode.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
5th line after the #defines is
(!Q(s,"\"")){U("",'#');U("=",'!');}d=B;while(*F=*s ){*s=='"'&&j
after that it should compile with a few warnings
reminder to use uppercase, most of the computers that ran this stuff didn't have working shift keys
- MbM
- MbM
And yes, we're late. Sorry! It takes some coordination getting things set up.
We've already got a number of entries. Remember, you can enter as often as you like.
Many will enter! Some will win! Some will elicit reactions of abject terror!
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
Here's the core of an email I just sent as an update to the unmaintainable code document.
y (pSuccImpact))
// Act 1.2.4.6.4.11.7 recompute firing degrees, given different predecessors
// (this is identical to Act 1.2.4.6.3.13)
// Then propagate I2, given that its firing degrees may have changed
// No other predecessors, so depropagate I2 also (recursion)
// Act 1.2.4.6.4.11.10 Then kill impact I2
But my experience is so awful I must share the agony with as many as possible. So here you are - another way to write unmaintainable code...
(cue creepy music)
--------------------------------------
When implementing a very complicated algorithm, use the classic software engineering principles of doing a sound design before beginning coding. Write an extremely detailed design document that describes each step in a very complicated algorithm. The more detailed this document is, the better.
In fact, the design doc should break the algorithm down into a hierarchy of structured steps, described in a hierarchy of auto-numbered individual paragraphs in the document. Use headings at least 5 deep. Make sure that that when you are done, you have broken the structure down so completely that there are over 500 such auto-numbered paragraphs. For example, one paragraph might be: (this is a real example)
1.2.4.6.3.13 - Display all impacts for activity where selected mitigations can apply
(short pseudocode omitted).
THEN... (and this is the kicker) when you write the code, for each of these paragraphs you write a corresponding global function named:
Act1_2_4_6_3_13()
Do not document these functions. After all, that's what the design document is for! HAHAHAHAHAHA!
Since the design doc is auto-numbered, it will be extremely difficult to keep it up to date with changes in the code (because the function names, of course, are static, not auto-numbered.) This isn't a problem for you because you will not try to keep the document up to date. In fact, do everything you can to destroy all traces of the document.
Those who come after you should only be able to find one or two contradictory, early drafts of the design document hidden on some dusty shelving in the back room near the dead 286 computers.
---------------------------
Here's a real-life typical code snippet produced using this diabolical method:
if (pProject->GetSecImpactStore()->ConnectedToPrimar
{
wPrevFD= pSuccImpact->GetFD();
wPrevECD= pSuccImpact->GetECD();
wPrevEUCD= pSuccImpact->GetEUCD();
Act1_2_4_6_3_13(pSuccImpact, pProject->GetSecImpactStore());
Act1_2_4_6_4(pSuccImpact, wPrevFD, wPrevECD, wPrevEUCD, pInfEng, pProject, pSecRules);
}
else
{
if (!pStack->IsMember(pSuccImpact))
{
Act1_2_4_6_4_11( pInfEng, pProject, pSuccImpact, pSecRules, pStack );
Act1_2_4_6_4_11_10( pInfEng, pProject, pSuccImpact, pProject->GetSecImpactStore() );
}
}
This goes on for thousands of lines.
--------------------------------------
Thank you for sharing my pain.
Torrey Hoffman (Azog)
Torrey Hoffman (Azog)
"HTML needs a rant tag" - Alan Cox
I'm more interested in the obfuscated-justice contest they're having over at the Superior Court of the State of California County of Santa Clara. I keep trying to compile their efforts, but all I get is "error: INJUSTICE". Maybe I'm using the wrong Constitution? Does anyone have a totalitarian-state constitution I can link against? Maybe the old CCCP constitution?
"If one is really a superior person, the fact is likely to leak out without too much assistance" -- John Andrew Holmes
#include <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-9
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}
){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i;
}'+}##(!!/")
#!/usr/bin/perl -p
#
# code2html - convert code to html for posting to slashdot
#
# tchrist@perl.com
# Sunday, December 19th, 1999
BEGIN { print "<TT>\n" }# and the spirit of awk...
# first kill all the tabs
1 while s{ \t + }
{ " " x (length($&)*8 - length($`)%8) }ex;
# then the four standard naughty bits
s/&/&/g;# must remember to do this one first!
s/</</g;# this is the most important one
s/>/>/g;# don't close too early
s/"/"/g;# only in embedded tags, i guess
# make lines break where they should
s/^\s*$/<P>/ || s/$/<BR>/;
# make sure spaces aren't squishticated so we
# can do indentation and properly align comments
s/( {2,})/' ' x length($1)/ge;
END { print "</TT>\n" }#
---
--
Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
Here's a site for some pointers:
:)
http://mindprod.com/unmain.html
Quite intriguing if you ask me
In full:
Behold! A tiny BASIC interpreter that fits on one 24x80 screen:
#define O(b,f,u,s,c,a)b(){int o=f();switch(*p++){X u:_ o s b();X c:_ o a b();default:p--;_ o;}} ;break;casei le(l){while(!(s=m[l]))l++;if} d=B;while(*F=*s){*s=='"'& ;&j* B){X'E':l=-1P [*d]=S():(*(q=Q(B,"TH"))=0,ps (B+6):(p=B+5,printf("%d\n",S, "\n")=0,G()))X 0:default:G()
;}_ 0;}G(){l=atoi(B);m[l]&&free(m[l]);(p=Q(B," "))?strcpy(m[l]=malloc(strlen(p, <,'>',>)O(K,V,'$',<=,'!', >=)] ;}
#define t(e,d,_,C)X e:f=fopen(B+d,_);C;fclose(f)
#define U(y,z)while(p=Q(s,y))*p++=z,*p=' '
#define N for(i=0;i<11*R;i++)m[i]&&
#define I "%d %s\n",i,m[i]
#define X
#define _ return
#define R 999
typedef char*A;int*C,E[R],L[R],M[R],P[R],l,i,j;char B[R],F[2];A m[12*R],malloc
(),p,q,x,y,z,s,d,f,fopen();A Q(s,o)A s,o;{for(x=s;*x;x++){for(y=x,z=o;*z&&*y==
*z;y++)z++;if(z>o&&!*z)_ x;}_ 0;}main(){m[11*R]="E";while(puts("OK"),gets(B)
)switch(*B){X'R':C=E;l=1;for(i=0;i<R;P[i++]=0);wh
(!Q(s,"\"")){U("<>",'#');U("<=",'$');U(">=",'!');
++;if(j&1||!Q(" \t",F))*d++=*s;s++;}*d--=j=0;if(B[1]!='=')switch(
X'R':B[2]!='M'&&(l=*--C)X'I':B[1]=='N'?gets(p=B),
=B+2,S()&&(p=q+4,l=S()-1))X'P':B[5]=='"'?*d=0,put
()))X'G':p=B+4,B[2]=='S'&&(*C++=l,p++),l=S()-1 X'F':*(q=Q(B,"TO"))=0;p=B+5;P[i
=B[3]]=S();p=q+2;M[i]=S();L[i]=l X'N':++P[*d]<=M[*d]&&(l=L[*d]);}else p=B+2,P[
*B]=S();l++;}X'L':N printf(I)X'N':N free(m[i]),m[i]=0 X'B':_ 0 t('S',5,"w",N
fprintf(f,I))t('O',4,"r",while(fgets(B,R,f))(*Q(B
)),p+1):(m[l]=0,0);}O(S,J,'=',==,'#',!=)O(J,K,'<'
O(V,W,'+',+,'-',-)O(W,Y,'*',*,'/',/)Y(){int o;_*p=='-'?p++,-Y():*p>='0'&&*p<=
'9'?strtol(p,&p,0):*p=='('?p++,o=S(),p++,o:P[*p++
I hope that translated right... Slashdot "Plain Old Text" option is a little broken, so I had to do some HTML translation. Oh well, it gives you the flavor of the IOCCC, anyway.
--