-
-
Save DavidBuchanan314/2280bff6e579e4c4ec9cd925a9ed9fea to your computer and use it in GitHub Desktop.
#define F\ | |
for(i=l;i\ | |
<l*4; i++) | |
main(){int | |
i,j,w=512, | |
n,l=w*w,o[ | |
]={~w,-w,- | |
w+1,-1,1,w | |
-1,w,w+1}, | |
b[l*5];F b | |
[i]=rand();for(puts("YUV4MPEG\ | |
2 W512 H512 C444");puts("FRAM\ | |
E");){F{for(n=j=8;j;n-=1&b[i+o | |
[--j]]);b[i+l]=(n^5&&!b[i]|n^6 | |
)-1;}F putchar(b[i]=b[i+l]);}} | |
/* gcc life.c;./a.out|mpv - */ |
Nice one, thanks!
Also compiling with gcc -ansi
gives this warning: ISO C90 forbids variable length array ‘b’
and Clang warns about variable length array used
. Because you're using a variable in an expression, even if it's computable at compile time. Thus, the compiler can think of it as a dynamically sized array, which is not ANSI C. So consider using b[5<<18]
instead of b[l*5]
. But another issue is that allocating 5 MB on the stack is a bad practice in terms of portability, embedded systems may get a stack overflow.
I remember that I also ran into this when doing the entries for the IOCCC this year. You also have other style warnings, due to lack of main()
return type and parentheses for n^5
. Which might be considered a nonessential compiler complaints, but the IOCCC judges appreciate it when the code doesn't issue warnings with -Wall -Wextra -pedantic
and even -Weveryting
(Clang only).
I don't see you among the previous IOCCC winners, but I had a feeling that you could be. You can certainly win using your skills. So good luck if you want to enter the next competition. I have win in this year contest, but publication of a contest entries is still delayed for unknown reasons (planned to mid-August according to the site).
Thank you for the advice. I haven't entered IOCCC before, but I definitely plan to. It's something I've wanted to do for a long time, so I'm humbled to be talking to a winner :)
Forgive me for this little criticism, this is actually the attention to detail and the experience of writing IOCCC entries, after months of polishing the code (rewriting it little by little every day, making it smaller and smaller), now I can easily see where improvements can be made.
I think you can still use this interesting way of displaying graphics using a video player in your next entries, even if you have published this work. But with something different from the Conway's game of life.
I'm used these 24 bytes to deal with any warnings that GCC and Clang can see. Even for Clang's -Weverything
, but honestly, I think -Weverything
are too excessive, I didn't bother about it in my works, only care about -Wall -Wextra -pedantic
.
#define F\
for(i=l;i\
<l*4; i++)
int main()
{int i,j,w
=512,n,l=w
*w; static
int b[ 5<<
18];F b[i]
=rand();f\
or(puts("YUV4MPEG2 W512 H512 \
C444");;){puts("FRAME");F{for(
n=j=9;j--;n-=1&b[i+j/3*w+j%3+~
w]){}b[i+l]=(n^6&&(!b[i]||n^5)
)-1;}F putchar(b[i]=b[i+l]);}}
Can be shortened to (24 bytes less):
And
ffplay
may be used as an alternative tompv
.Nice work, though.