Obfuscated C Code Contest Begins 227
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.
Re:This is flamebait, but what the hell... (Score:1)
That's not an obfuscated C entry... (Score:1)
C (Score:1)
First OO-Perl Post! (Score:1)
use Slashdot;
$sd = Slashdot->new();
if ($topic = $sd->newTopic() && ($topic->postCount() newPost('First', "First Post!\n", 'POT', 'nopreview');
die "Nyahhh! Server overloaded!\n" unless ($myPost);
}
else {
die "Someone beat you to it!\n";
}
Re:Obfuscated PERL contest? (Score:1)
What they ought to do is have an UNobfuscated perl contest.
Obfuscated C contest submission (Score:1)
Re:From the official rules (Score:1)
-----------
Re:www.ioccc.org (Score:1)
More to the point: Don't do any "optimizations" that screw things up for the compiler!
Please do reorganize your algorithms at the high level (using hashes instead of lists, for example).
Please don't perform your own common-subexpression-elimination and loop induction variable transformations. You are wasting your time and will probably only make things worse.
--
Re:For All You Young Bucks (Score:1)
PL/1 worked really hard to try to get you to make a valid program. Apparently some variants would try to autocorrect your code to a valid program, usually failing or generating weird code in the process of doing so.
---
pb Reply or e-mail; don't vaguely moderate [152.7.41.11].
Re:useful C obfuscation (Score:1)
--Phil (Sadly, I'm not twisted enough to submit anything creative enough to win...)
Re:first (Score:1)
--
Re:first (Score:1)
And it's perfectly easy (and quite common) to be object oriented without cout, and to not be object oriented with cout.
--
Re:From the official rules (Score:1)
--
Re:forget obfuscated C (Score:1)
Microsoft Windows (Score:1)
Re:first (Score:1)
Re:first (Score:1)
typedef struct {
FNPTR first;
} STRUCT;
void bob() {
return 1;
}
int main(void) {
STRUCT post;
post.first = bob;
if (post.first()) { printf("FIRST POST!!!"); }
}
/* that's C my friend. */
Re:first (Score:1)
Re:Au Contraire! (Score:1)
Re:first (Score:1)
Re:first (Score:1)
Call me paranoid,but the octal was disturbing (Score:1)
perl -e '@a=;foreach(@a){foreach(split(/,/,$_)){print chr(oct);}}'
Hm. A self-replicating program. Well, at least the rest isn't obfuscated.
useful C obfuscation (Score:1)
Re:first (Score:1)
#include <stdio.h>
int true(void) { return 1; }
int
main(void)
{
struct { int (*first)(void) } post = {true};
if (post.first()) printf("first post
}
Re:first (Score:1)
they're going about it all wrong (Score:1)
Re:first (Score:1)
Re:Writing Unintelligeable code (Score:1)
And the winner gets ... (Score:1)
Re:www.ioccc.org (Score:1)
If the chip changes in a way that makes your optimization suddenly less optimal, it makes no difference if the now less optimal machine code was generated by hand-coded assembly or by the C compiler. If you're trying to make some claim about what happens when you recompile the code, then you're missing the point of time critical code. If it's time critical, and I get a new processor that allows me to make it faster, rest assured I'll do so. Why sit around waiting for my compiler to be upgraded to be able to optimize for the new processor when I can do it right away?
<I>Assembly is like saying "Moore's Law doesn't apply to me".</I>
Err, huh? Sure, faster processors will eventually make my code faster without my needing to optimize it. If that's the case, why worry about optimizing at all?
I was talking specifically about time-critical code, where I'm trying to get every ounce of speed out I can. Moore's Law doesn't enter into it. I want it to be as fast as it can be <I>today</I>!
<I>Take your pick: Hand-optimized Pentium assembly, or EGCS code tuned for the Pentium II.
Oooh look, it's everyone's favorite logical falacy, the false dilemma. Why would I choose either of these two when hand-optimized Pentium II assembly would beat both?
--
Re:Anti-Obfuscated C (Score:1)
--
Gratuituous semicolons... (Score:1)
--
Re:Au Contraire! (Score:1)
--
Re:first (Score:1)
These errors are perfectly understandable. I've frequently noted that I'll type into web edit boxes or email bits of code I would NEVER type if I were actually entering real code into Emacs. I don't know why. I suspect I'm not perfectly modeless -- my C-mode syntax checker only functions while Emacs is also in C-mode.
--
Re:pascal rocks! (Score:1)
Err, umm, err. Oh, never mind. I could say something unkind about the readability of Smalltalk, but I know there are people who say the same about Lisp, the single most readable, understandable, and beautiful language ever made. So I'll keep my mouth shut.
I find it interesting that you still like your first language. I hate mine. But then, my first language was BASIC...
--
Re:www.ioccc.org (Score:1)
I don't know if I'd go that far. I would say don't worry about optimizing non-critical code. As for the critical parts, if it's that time-critical, it should probably be in assembly language.
--
Re:first (Score:1)
Bzzzzzzzzzzzzzz
thats C++ my friend.
You got a compile error!
Why do you say that's C++? Because of the "post.first()"? That's perfectly legal in C, assuming "post" is a structure that contains an element named "first" which is a function pointer.
One of the great lies of the 20th century was that C doesn't support polymorphism. Absolutely untrue.
Of course, he will get a compile error, but only due for calling printf with no parentheses.
--
Re:Gratuituous semicolons... (Score:1)
--
Re:Au Contraire! (Score:1)
I don't see how. I'd say the nice thing C++ gives you is true constructors (instead of having to roll your own), and it's nice how it automatically pushes the object pointer on the stack rather than having to explicitly declare a "this" parameter to your methods. Multiple inheritance is the third advantage. Beyond these, C++ has no real advantages over C for object oriented programming. And the first two of these are simply syntactic sugar.
--
Re:This is flamebait, but what the hell... (Score:1)
--
I vote for procmail! (Score:1)
goto
goto
AAAAaahhhh!
Re:Anti-Obfuscated C (Score:1)
Hehe, knew I'd make a mistake somewhere! It's been over four years since I've typed in the Ctrl-F9 combination to have my Borland TurboPascal compiler compile away! :) Ah, I miss those days. Pascal is a good mix of C and BASIC. It's both powerful and readable.
C is cool
BASIC is easy
Pascal is for those who like to make comprimises
COBOL is for those who like to type a lot
Obfuscated C code ? (Score:2)
first (Score:2)
Not really possible (Score:2)
Re:Not really possible (Score:2)
Given my druthers, I would use a modern language instead of either one. C is just too close to a macro assembler, neither is really good for graphics or networking and they're both showing their age by now. By now, programming in either one basically serves to remind me of why I prefer Java, PHP and Perl.
Re:LISP is readable? (Score:2)
Daniel
Re:For All You Young Bucks (Score:2)
*muttering something about silly F77 column positions that descended from punch cards*
Re:useful C obfuscation (Score:2)
Actually, a lot of them are useful programs, either original ones or re-implementations of standard utilities, but with absolutely horrifying things done in the code. Ideally, the obfuscations are not just there for puzzle value, but actually serve to optimize performance.
I wish I could come up with some stuff like this -- I have a few programs that I've written normally, but with some moderately funky techniques, that I've been thinking I might be able to obfuscatify into reasonable entries, but I'm unlikely to get them ready in time. One of these years...
David Gould
Re:One of my favorites... (Score:2)
Maybe that's a way to de-obfuscate programs. Just tell the compiler to assemble them, and the resulting assembler might be easier to understand than the source code. It would probably help to compile for a fairly simple RISC chip (eg ARM, MIPS) that has an easy-to-understand instruction set.
Better still, create a new target processor for gcc that is a simple stack machine or something. Then you could compile your code to this. I think the JVM fits this description, so you could use something which compiles C to Java bytecode, and then use a Java decompiler to spit out Java source. I have no idea if this would be more readable, but it could hardly be any worse...
Re:From the official rules (Score:2)
Why would anyone want to add newlines, tabs or whitespace?
Have you seen the previous entries? A great example is the pi program from 1988 (westley.c). Without whitespace the whole charm of the program would be lost.
Creative indentions can often make a program much sweeter in its source code appearance.
Re:A True Obfuscated function. (Score:2)
10a11
>begin
--
Fixes (Score:2)
#define end }
#define say if
#define yell printf
#define otherwise else
#define play_q3 exit
#define katz 1
#define @ ;
article has been posted */
ac_poster_screams()
begin
say(slash_posted)
begin
yell("FIRST POST!")@
play_q3@
end
otherwise
begin
yell("Bill Gates Naked and Petrified!")@
slash_posted = katz;
ac_poster_screams()@
end
end
That's the final version.. now the patch..
3c3
#define say if
5c5,7
#define otherwise else
> #define play_q3 exit
> #define katz 1
14a17
> play_q3@
18a22,23
> slash_posted = katz;
> ac_poster_screams()@
--
Re:Au Contraire! (Score:2)
logan
Where's my FORTH papers... (Score:2)
Agent 32
Re:css-auth anyone (Score:2)
Whatever the rules are gated wins (Score:2)
The problem here is that we have to cope with it for at least a few more months until zebra matures completely...
Re:Shortest Self Duplicating C program (Score:2)
It's hard to do a short quine which is also strictly-conforming.
Re:Shortest Self Duplicating C program (Score:2)
2. It's 5 lines, which is pretty long for "short" code.
3. Even if you think you can assume ASCII, you *CANNOT* have literal newlines in strings.
Try "-ansi -pedantic -Wall". It won't warn about the ASCII thing, but it'll catch the string with newlines.
I generally find you need something equivalent to
char b='\\',q='"',s='\'',n='\n';
to be able to reproduce all the stuff you end up needing.
Re:www.ioccc.org (Score:2)
Assembly is like saying "Moore's Law doesn't apply to me".
Take your pick: Hand-optimized Pentium assembly, or EGCS code tuned for the Pentium II.
Re:Anti-Obfuscated C (Score:2)
MAIN RETURNS INT YOU SIMPERING FOOLS!
:)
(No, really, it does. "void main" is Just Plain Wrong.)
Re:useful C obfuscation (Score:2)
"comprising" or "composed of".
Re:Shortest Self Duplicating C program (Score:2)
Re:www.ioccc.org (Score:2)
Look at kernel code. Lots of it. Across a number of OS's and platforms.
Assembly is *rare*, and for good reasons.
Re:Shortest Self Duplicating C program (Score:2)
google (Score:2)
Re:first language... (Score:2)
Very scary.
Re:For All You Young Bucks (Score:2)
You can see why not many people use it any more...
Greg
Kinds of obfuscation (Score:2)
There are several kinds of obfuscation. The ones you generally see in IOCCC's, e.g. using one-letter variable names, formatting in bizarre ways, making abstruse use of CPP, and so on, are IMHO far less interesting than true algorithmic obfuscation.
Some obfuscation is easy to produce algorithmically. For example, it is easy to have a program that will parse a C listing, replace variable names by things like O0O0Ooo, make white space come out in strange ways, and so on. Or, compile the program using gcc -O6, take the assembler output, and decompile it in an obvious way.
Much more interesting, I find, is the more ``algorithmic'' kind of obfuscation, where identifiers are not deliberately unclear, but where the overall pattern of execution is difficult to follow. Take the following Scheme example, and try to understand how it works: then you will see what I mean:
(((lambda (foo) (newline) foo)
(call-with-current-continuation (lambda (bar) bar)))
((lambda (foo) (write-char #\*) foo)
(call-with-current-continuation (lambda (bar) bar))))
There are programming languages where nearly every program is obfuscated (in both ways I descibed!), and it is very difficult to write one which is not. One such language I invented is Unlambda [eleves.ens.fr].
Re:useful C obfuscation (Score:2)
My favorite still has to be this one [rutgers.edu] which translates the imput into pig latin while being itself an ascii pig comprised of pig-latin'ed code. I'd inline it, but slashdot munges the extra spacing.
Re:From the official rules (Score:2)
Apart from some programs requiring white space in order to work (especially in printed strings), Sometimes it makes it prettier (This [ioccc.org] or This [ioccc.org], you might need to view the source, as some browsers may reformat this on their rendered views).
Re:Au Contraire! (Score:2)
first language... (Score:2)
I wrote the word game of boggle in batch (6500 lines), and a batch script that randomly replied to questions. Random number generation in Batch was about 200 lines.
Just a couple of weeks ago I wrote a calendar for a PS/2 in batch as we have a macintosh functioning as a clock, and a formerly abandonned ps/2 on the windowsill in our club office
I even wrote a TSR manager in batch which allowed me, to the best of the programme's abilities, to load and unload TSRs, complete with a menu.
All you need? getkey.com: B4 00 CD 16 B4 4C CD 21
(ok ok so i have too much free time...had.....have)
#include <signal.h> \ #include <stdlib.h> \ int main(void){signal(ABRT,SIGIGN);while(1){abort(-1)
Found this on my HD (Score:2)
main(t,_,a)char *a;{return!0 main(-86,0,a+1)+a)):1,t main(2,_+1,"%s %d %d\n"):9:16: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;
}'+}##(!!/")
Nice and christmasy. Disclaimer: I used a perl script to escape it. Here's the perl script escaped to itself :-) #!/usr/bin/perl -p
#
# code2html - convert code to html for posting to slashdot
#
# tchrist@perl.com
# Sunday, December 19th, 1999
BEGIN { print "\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/ s/>/>/g;# don't close too early
s/"/"/g;# only in embedded tags, i guess
# make lines break where they should
s/^\s*$/
/ || s/$/ ...shall be with us always
/;
# make sure spaces aren't squishticated so we
# can do indentation and properly align comments
s/( {2,})/'' x length($1)/ge;
END { print "\n" }#
---
Re:Let the IOCCC grade your students! (Score:2)
[BS MODE ON]
'The [platform] C compiler limits the number of possible outstanding user-iterated conditionals to 32, unless you use a double-stage switch conditional, in which case you can stretch the number of allowed outstanding conditionals to 64. Remember, you're using a monolithic 32 bit compiler generating octal, okay? I think you can get around it by custom compiling GCC for [platform], but you have to hand-edit the sub-parser source. Just do a egrep in the appropriate source directory and change all of the 32s to 64s, and then go through again to change all of the 64s to 128'
I used that on a family member that thought one huge 200 line case statement was the way to handle a command line interface efficiently. After I actually caught him peeking at GCC, I just wrote him a 20 line interpreter using a tree.
Let the IOCCC grade your students! (Score:2)
Re:For All You Young Bucks (Score:2)
Maybe old COBOL programmers too!
The - Completely Obfuscated COBOL Code Contest
Hmm... or maybe thats too obfusctated.
The Tick - "Spoon!"
IOCCC is just a front for a secret plot! (Score:2)
why this is a good thing (Score:2)
Many people will argue that this contest is a bad thing(tm), but I think without seeing totally unreadable code it's harder to appreciate truly beautiful code.
My all time favorite was a program that solved the 8 queens problem in the while condition of a for loop.
It looked *something* like this..
for(i=zx=
f+d^q*df*&g==m&c-=44(x=5%b;
g=&g=*b!b%t^l=h&g!g^==0;x++)
;
I love the semicolon on it's own line
Shortest Self Duplicating C program (Score:2)
Moderation (Score:2)
Please notice that that was msg #23, posted at 16:19 UTC and the only one comment under that thread that said something similar was posted at 16:18 UTC, so we couldn't see each other.
Take a bit more care next time.
New contest (Score:3)
Oh yeah, so where's the obfuscated Intercal [tuxedo.org] code contest?
Oh, maybe we should drop that...
A True Obfuscated function. (Score:3)
#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
--
Obfuscated PERL contest? (Score:3)
I can code that in three APL glyphs!
Re:Shortest Self Duplicating C program (Score:3)
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
past winners (Score:3)
Have fun
Single entries to multiple contests? (Score:3)
Re:One of my favorites... (Score:3)
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.
--
That was easy :) (Score:3)
20 goto 10
For All You Young Bucks (Score:3)
I can see it now "The Grande Olde Obfuscated FORTRAN Code Contest"
css-auth anyone (Score:4)
Unfortunately... (Score:4)
Re:One of my favorites... (Score:4)
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
www.ioccc.org (Score:4)
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!
Re:Writing Unintelligeable code (Score:4)
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)
forget obfuscated C (Score:4)
Re:Found this on my HD (Score:4)
#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" }#
---
Writing Unintelligeable code (Score:4)
http://mindprod.com/unmain.html [mindprod.com]
Quite intriguing if you ask me
1988 Best Abuse Of The Rules (Score:5)
In full:
One of my favorites... (Score:5)
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.
--