I could have said "in 454 characters of C" but that wouldn't have been as linkbaity. Thanks for clicking!
Yes, the aim was compression (golfing), not obfuscation. Compression of silly ASCII things has been sort of a hobby of mine for a while and I intend to blog about that in particular. Another little compressed snippet is my "email signature" at the bottom of my site root. Try clicking on it.
I treat obfuscated code as a kind of puzzle. "Given a crazy string of seemingly random semicolons and numbers, can you discover what it does and how it works?" It's like a magic eye puzzle for a programmer.
Obfuscation alone is not interesting, but 'code compression' (to achieve something using as few characters as possible) is a very interesting puzzle for the brain I think.
Personally, I think that using golf handicapped languages is the only way to keep it interesting. If you can choose the language, it gets too easy.
One could even implement 'cat' as a single character, provided his language of choice.
"It could be done in 1 line of C when he left out the line-breaks."
Yeah, exactly. It's incredibly silly when people "count" lines of code like this. If you want to talk about lines of code in any kind of practical way, the code you're referring to really needs to be at least somewhat sanely formatted according to the conventions of whatever language you're in. Otherwise, any given sample of code can be in {1,2,3,...,# of characters in program} lines of code. You should just count characters (which is the more appropriate thing to do when you're trying to write a compressed program anyway). A metric of lines of code = ceil(characters/80) is weird because a) it's relatively arbitrary (in that it has nothing to do with languages but with the conventions of terminals), and b) it goes against the more common understanding of "lines of code".
/rant
I think compressed (edit: golfed - new word of the day :) code in general is pretty cool, though.
I assume the line-breaks are to allow the code to fit within 80 columns to display on most standard terminals. If you look closely, they occur at places you wouldn't expect them to. I'm guessing they were placed by cat and not the author.
Interesting indeed. But weird that he uses obfuscated code when doing a piece of explaining how it's done. Or do people actually write for loops like those? :P
This is basically the a C equivalent of a JAPH. A JAPH is a usually short bit of perl code that prints "Just Another Perl Hacker", but it isn't obvious that that's what it does. Trying to figure out how it works without cheating is part of the fun.
main(l
,a,n,d)char**a;{
for(d=atoi(a[1])/10*80-
atoi(a[2])/5-596;n="@NKA\
CLCCGZAAQBEAADAFaISADJABBA^\
SNLGAQABDAXIMBAACTBATAHDBAN\
ZcEMMCCCCAAhEIJFAEAAABAfHJE\
TBdFLDAANEfDNBPHdBcBBBEA_AL\
H E L L O, W O R L D! "
[l++-3];)for(;n-->64;)
putchar(!d+++33^
l&1);}
$ gcc -o yanim yanim.c -lm
yanim.c:1:1: warning: data definition has no type or storage class [enabled by default]
yanim.c: In function ‘main’:
yanim.c:5:24: warning: incompatible implicit declaration of built-in function ‘cos’ [enabled by default]
yanim.c:5:33: warning: incompatible implicit declaration of built-in function ‘sin’ [enabled by default]
I'm not impressed. It could be done in 1 line of C when he left out the line-breaks.
I don't think obfuscated code is interesting. It's unreadable. And therefore it's hard to learn something from it.
But it's nice he is explaining the code. Now that is interesting!