Behold! The interesting little programs thread.
category: code [glöplog]
Quote:
It's not about "being clever" (unless using ternary operators counts as "clever" in your book).
I'm sorry but if you consider the following as more readable or, let me quote, "quite clear":
Quote:
(inp[i]=='0')? outp[i-1]='0'+rand()%10: (inp[i]=='x')? outp[i-1]='a'+rand()%26:0;
when compared to:
Quote:
if (inp[i] == '0')
{
outp[i-1]='0' + rand() % 10;
}
else
if (inp[i]=='x')
{
outp[i-1]='a'+rand()%26;
}
(yeah, indents devoured by <quote>, sorry)
then I need your autograph, now.
If indents get devoured by <quote>, why don't you use <code> instead? :P
Kinda self-defeating indeed. ;) Also optimized for posting size != optimized for readability. :P
And about the whole "being clever" thing: Isn't that part of the demoscene DNA? To write stuff that is not exactly by the book all the time and kinda throw away most of the time? It's the strangest insult(?) in a community like this.
the challenge isn't about making the source code smaller, not unless you use javascript anyway!111 (harrrrrrrrrr)
Quote:
If indents get devoured by <quote>, why don't you use <code> instead? :P
Note taken :D
Discarding the the return value of ternary expression is bad style unless you're obfuscating
Code:
outp[i-1] =
inp[i]=='0' ? '0'+rand()%10 :
inp[i]=='x' ? 'a'+rand()%26 : 0;
But that's like 3 lines!! That's not in the budget. One thing leads to another and you end up using the scroll wheel. ;)
216: ... or unless you're one of the Boost guys and regularly need to have types resolved without evaluating the actual expression. But yes. :)
And otherwise what xwize said. The "clever" part applies to what the code DOES, not how it LOOKS. A good compiler should optimize away any significant difference between ternary operators and if/else chains anyway, and even if it doesn't get it all, the OOO execution of the host CPU will most probably level the last few remaining bumps in the playing field. And the demoscene was always about how the final result looks on the screen, not about being fluent in every Turing Tarpit on earth. :)
And otherwise what xwize said. The "clever" part applies to what the code DOES, not how it LOOKS. A good compiler should optimize away any significant difference between ternary operators and if/else chains anyway, and even if it doesn't get it all, the OOO execution of the host CPU will most probably level the last few remaining bumps in the playing field. And the demoscene was always about how the final result looks on the screen, not about being fluent in every Turing Tarpit on earth. :)
Point taken about the return value, although I think it should be...
instead.
Code:
outp[i-1] =
(inp[i]=='0')? outp[i-1]='0'+rand()%10:
(inp[i]=='x')? outp[i-1]='a'+rand()%26: inp[i];
instead.
Quote:
what the code DOES, not how it LOOKS
As far as scene stuff goes: Exactly my point. Also, sure, otherwise most democoders would be in trouble. :)
And the choice of TOs vs. if/else is - in this context - basically an aesthetic one. I often tend to the former, rather than the latter, at least for short & lazy code snippets on the intertubes. :) If you're going for readability in real projects(tm), you'd probably avoid them altogether.
Working Boggle game (but without dictionary :)
Code:
/* Mini boggle by Sasq 200x */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
static char board[49], *b = board + 8;
int check_board(char *w, int i, int v) {
int *p, offs[] = {-9,-8,-7,-1,1,7,8,9,0};
for(p = offs; *p; p++)
if((!*w) || ((*w == b[*p+i]) && !(v&1<<(*p+i)) && check_board(w+1, *p+i, v|1<<i)))
return 1;
return 0;
}
int main() {
int i, dn=6, used[] = {4,3,4,2,2,1,0};
char input[80], *dice = "aeiouyaeiouetdbtgprlhmnkcswfhsqxzjkv";
srand(time(NULL));
for(i=0; i<=49; i++) board[i] = 0;
for(i=0; i<16; used[dn]--, dn=6, i++) {
while(!used[dn]) dn = rand()%6;
b[i+(i&12)] = dice[dn*6+rand()%6];
}
while(1) {
for(i=0; i<4; i++) puts(&b[i*8]);
gets(input);
for(i=0; i<16; i++)
if(b[i+(i&12)] == *input && check_board(input+1, i+(i&12), 0))
printf("Found at (%d,%d)\n", i%4+1, i/4+1);
}
return 0;
}
A simple game I coded in an hour or so, a long time ago. A simple experiment in random level generation. :)
Enjoy.
To compile (for example):
Enjoy.
Code:
#include <SDL/SDL.h>
SDL_Surface*e;SDL_Rect f;SDL_Rect k={0,0,7,7};int p(int x,int y){return*((int*)
e->pixels+x+y*480)==874069;}void g(){f.x=f.y=1,f.w=f.h=7;SDL_FillRect(e,0,5824\
849);for(;f.x<480;f.x+=8){for(;f.y<480;f.y+=8)SDL_FillRect(e,&f,874069);f.y=1;}
f.x=(rand()%60)*8+1;srand(time(0));f.y=(rand()%60)*8+1;int h=0;int i=rand()%23\
99;while(h<2400){switch(rand()%4){case 0:if(f.y>9){f.y-=8;break;}continue;case
1:if(f.x<465){f.x+=8;break;}continue;case 2:if(f.y<465){f.y+=8;break;}continue;
case 3:if(f.x>9)f.x-=8;else continue;}if(h==i)k.x=f.x,k.y=f.y;SDL_FillRect(e,&f
,5824849);++h;}SDL_FillRect(e,&k,255);}int main(int a,char**b){SDL_Event d;char
z[99]="Crisp ";SDL_Init(32);SDL_Surface*c=SDL_SetVideoMode(480,480,32,0);e=SDL\
_CreateRGBSurface(0,480,480,32,0,0,0,0);int t=SDL_GetTicks();g();while(1){if(S\
DL_PollEvent(&d)){if(d.type==12)break;else{int x=d.button.x;int y=d.button.y;if
(d.button.button==1&&x<f.x+13&&x>f.x-5&&y<f.y+13&&y>f.y-5){x=((x>>3)<<3)+1;y=((
y>>3)<<3)+1;if(!p(x+2,y+2)){f.x=x;f.y=y;if(f.x==k.x&&f.y==k.y){t=SDL_GetTicks()
;g();}}}}}SDL_BlitSurface(e,0,c,0);SDL_FillRect(c,&f,0);int u=SDL_GetTicks()-t;
sprintf(z+6,"%d",20-u/1000);SDL_WM_SetCaption(z,z);if(u>20000)break;SDL_Flip(c)
;SDL_Delay(20);}SDL_FreeSurface(e);SDL_Quit();return 0;}
To compile (for example):
Code:
gcc ???.c -o ??? `pkg-config --libs --cflags sdl`
A little weird, but apparently Pouet's code tags inserted some weird spaces in appropriate places. Every line should be the same length except for the last line. Please fix accordingly before compiling…
Decipher: Not only scrambled as heck, but also with typos?! :)
Anyway, here's a more readable version of the above.
Anyway, here's a more readable version of the above.
tomaes: the obfuscation was on purpose in order to fit the whole thing into a 80 by 24 terminal buffer. :) though, thanks a lot for the cleanup.
For what it's worth: I tried some actual obfuscation / ansi art hybrid experiment. :)
...and the plain text version. In case the above link goes down (cause I updated it slightly, new filename, yadayada...), it's on my DA.
visy wins thread!