Add preview of 1984-2019
The 2020 winners are hinted it, but the source code is not there,
nor are the hints. Someone could look into the HTML and
see what was commented out, but that is not a problem because
WHO won is known and the name of their AWARD is known already.
Moreover a number of the winners have talked about what their
entirs do, so the commented out spoiler text is not a bit problem.
One will find HTML commented out with:
<!-- XXX remove when 2020 is ready
2020 links here
XXX remove when 2020 is ready -->
The "XXX remove when 2020 is ready" string is found at the
start and end comment blocks. Again, soneone could read
what was commented out, but that is OK since most of that
information is known or can be known. The following files
have such HTML comment blocks in them.
./winners.html
./years-spoiler.html
./years.html
In addition, ./all/summary.txt was modified to not
include the 2020 entries for the momemt.
The 2020 winner code AND write-ups are NOT part of this set.
p.s. The all/all.tar.bz2 does not contain the 2020 source code (yet?).
This commit is contained in:
1 parent
28efc67f5d
commit
c0663537cb
1683 files changed
+220064
No files matched your search
@@ -0,0 +1,204 @@
|
||||
#!/usr/bin/env make
|
||||
#
|
||||
# 2012 makefile
|
||||
#
|
||||
# This work by Landon Curt Noll, Simon Cooper, and Leonid A. Broukhis
|
||||
# is licensed under:
|
||||
#
|
||||
# Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
#
|
||||
# See: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
|
||||
################
|
||||
# tool locations
|
||||
################
|
||||
#
|
||||
SHELL= /bin/bash
|
||||
CP= cp
|
||||
CPP= cpp
|
||||
GUNZIP= gunzip
|
||||
LD= ld
|
||||
MAKE= make
|
||||
RM= rm
|
||||
SED= sed
|
||||
TAR= tar
|
||||
TRUE= true
|
||||
|
||||
# Set X11_LIBDIR to the directory where the X11 library resides
|
||||
#
|
||||
X11_LIBDIR= /usr/X11R6/lib
|
||||
|
||||
# Set X11_INCLUDEDIR to the directory where the X11 include files reside
|
||||
#
|
||||
X11_INCDIR= /usr/X11R6/include
|
||||
|
||||
# Compiler warnings
|
||||
#
|
||||
#CWARN=
|
||||
#CWARN= -Wall -W
|
||||
CWARN= -Wall -W -pedantic -Wno-unused-parameter
|
||||
|
||||
# compiler standard
|
||||
#
|
||||
#CSTD=
|
||||
CSTD= -ansi
|
||||
#CSTD= -std=c99
|
||||
|
||||
# compiler bit architecture
|
||||
#
|
||||
# Some entries require 32-bitness:
|
||||
# ARCH= -m32
|
||||
#
|
||||
# Some entries require 64-bitess:
|
||||
# ARCH= -m64
|
||||
#
|
||||
# By default we assume nothing:
|
||||
#
|
||||
ARCH=
|
||||
|
||||
# optimization
|
||||
#
|
||||
# Most compiles will safely use -O2. Some can use only -O1 or -O.
|
||||
# A few compilers have broken optimizers or this entry make break
|
||||
# under those buggy optimizers and thus you may not want anything.
|
||||
#
|
||||
#OPT=
|
||||
#OPT= -O
|
||||
#OPT= -O1
|
||||
#OPT= -O2
|
||||
OPT= -O3
|
||||
|
||||
# Libraries needed to build
|
||||
#
|
||||
LIBS= -lm
|
||||
|
||||
# default flags for ANSI C compilation
|
||||
#
|
||||
CFLAGS= ${CWARN} ${CSTD} ${ARCH} ${OPT}
|
||||
|
||||
# ANSI compiler
|
||||
#
|
||||
# Set CC to the name of your ANSI compiler.
|
||||
#
|
||||
# Some entries seem to need gcc. If you have gcc, set
|
||||
# both CC and MAY_NEED_GCC to gcc.
|
||||
#
|
||||
# If you do not have gcc, set CC to the name of your ANSI compiler, and
|
||||
# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just :
|
||||
# to disable such programs.
|
||||
#
|
||||
CC= cc
|
||||
#CC=clang
|
||||
MAY_NEED_GCC= gcc
|
||||
|
||||
|
||||
##############################
|
||||
# Special flags for this entry
|
||||
##############################
|
||||
#
|
||||
ENTRY= blakely
|
||||
DATA=
|
||||
ALT_OBJ=
|
||||
ALT_ENTRY=
|
||||
|
||||
|
||||
#################
|
||||
# build the entry
|
||||
#################
|
||||
#
|
||||
all: ${ENTRY} ${DATA}
|
||||
@${TRUE}
|
||||
|
||||
${ENTRY}: ${ENTRY}.c
|
||||
${CC} ${CFLAGS} -include stdio.h -include math.h -include stdlib.h \
|
||||
$< -o $@ ${LIBS}
|
||||
|
||||
# alternative executable
|
||||
#
|
||||
alt: ${ALT_ENTRY}
|
||||
@${TRUE}
|
||||
|
||||
# data files
|
||||
#
|
||||
data: ${DATA}
|
||||
@${TRUE}
|
||||
|
||||
|
||||
###############
|
||||
# utility rules
|
||||
###############
|
||||
#
|
||||
everything: all alt
|
||||
|
||||
clean:
|
||||
${RM} -f ${ENTRY}.o ${ALT_OBJ}
|
||||
|
||||
clobber: clean
|
||||
${RM} -f ${ENTRY} ${ALT_ENTRY}
|
||||
|
||||
nuke: clobber
|
||||
@${TRUE}
|
||||
|
||||
dist_clean: nuke
|
||||
@${TRUE}
|
||||
|
||||
install:
|
||||
@echo "Surely you're joking Mr. Feynman!"
|
||||
@${TRUE}
|
||||
|
||||
# backwards compatibility
|
||||
#
|
||||
build: all
|
||||
@${TRUE}
|
||||
|
||||
|
||||
##################
|
||||
# 133t hacker rulz
|
||||
##################
|
||||
#
|
||||
love:
|
||||
@echo 'not war?'
|
||||
@${TRUE}
|
||||
|
||||
haste:
|
||||
$(MAKE) waste
|
||||
@${TRUE}
|
||||
|
||||
waste:
|
||||
@echo 'waste'
|
||||
@${TRUE}
|
||||
|
||||
easter_egg:
|
||||
@echo you expected to mis-understand this $${RANDOM} magic
|
||||
@echo chongo '<was here>' "/\\oo/\\"
|
||||
@echo Readers shall be disallowed from not being unable to partly misunderstand this partocular final echo.
|
||||
|
||||
# Understand the history of "I Am the Walrus" and
|
||||
# and in particular John Lennon's remarks on that
|
||||
# song and you might be confused about these next
|
||||
# rules in a different way. :-)
|
||||
#
|
||||
supernova: nuke
|
||||
@-if [ -r .code_anal ]; then \
|
||||
${RM} -f .code_anal_v3; \
|
||||
else \
|
||||
echo "You are not expected to understand this"; \
|
||||
fi
|
||||
@${TRUE}
|
||||
|
||||
deep_magic:
|
||||
@-if [ -r .code_anal ]; then \
|
||||
ccode_analysis --deep_magic 1c2c85c7a02c55d1add91967eca491d53c101dc1 --FNV1a_hash 256-bit "${ENTRY}"; \
|
||||
else \
|
||||
echo "Understand different"; \
|
||||
fi
|
||||
@${TRUE}
|
||||
|
||||
magic: deep_magic
|
||||
@-if [ -r .code_anal ]; then \
|
||||
ccode_analysis --mode 21701 --level 23209 --FNV1a_hash 256-bit "${ENTRY}"; \
|
||||
else \
|
||||
echo "These aren't the droids you're looking for Mr. Spock!"; \
|
||||
fi
|
||||
@${TRUE}
|
||||
@@ -0,0 +1,48 @@
|
||||
#define o(a,b,c,d) a##f b##f c##f d; a##g b##g c##g d;q--
|
||||
#define Z(z)if(*j==z)
|
||||
#define c(z,p) Z(z){y;v p##=r;o(b,[q-1]=b,[q] p b,[q]);}
|
||||
#define y q+=t;t=0
|
||||
#define r w[q]
|
||||
#define v w[q-1]
|
||||
#define w(a,m,f) Z(a){y;r=m(r);q++;o(b,[q-1] = -b,[q-1]*f(r)+0*b,[0]);}
|
||||
#define A(p,w,o) for(p=0;p<w;p++)_(o)
|
||||
#define P(a) for(a=Z;a<Z;a++)
|
||||
#define _ putchar
|
||||
typedef double o;
|
||||
typedef char z;
|
||||
o A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y, E_, w[20], bf[20], bg[20],x=-1.3/8,p,d,l=0,h=4e-3,f,m;
|
||||
z e[17] = "FKE<<gMAQUDIYO9\"=", *k, *j; o g(o p, o d){int q =-1,t=0;j=k;while( *j ){c(45,-);Z(100){y;q++;r=v;q[bf]=bf[q-1];q[bg]=bg[q-1];}Z(42)
|
||||
{y;v*=r;o(b,[q-1]=r*b,[q-1] + v*b,[q]);}Z(44){t=0;q++;}Z(116){f=v;v=r;r=f;f=bf[q];q[bf]=bf[q-1];bf[q-1]=f;f=q[bg];bg[q]=(q-1)[bg];bg[q-1]=f;
|
||||
|
||||
|
||||
|
||||
}c(43,+);Z(47){y;v/=r; o(b,[q-1]=b,[q-1]/r-v/ (r*r)*b,[q]);}Z(121){y;q++ ;r=d; bf[ q]=0;bg[q]=1;}
|
||||
Z(94){y;f=v;v=pow(v,r) ;o(b,[q-1]=r*b,[q-1]* pow(f,r-1)+0*b,[q]);}w(115 ,sin,cos);w(99,cos,sin);
|
||||
Z(120){y;q++;r=p;bf[q] =1;bg[q]=0;}if(*j>=48 &&*j<58){q++;t=1;r=*j-48 ; bf[q] = 0;(q--)[bg] = 0;
|
||||
}j++;}H=bf[0] ;K= bg[ 0]; return w[0];}
|
||||
void s(){int e=0;X=Q*8;f=g (Y*8, L*8 )
|
||||
;e=(f-X<0)?1: -1;l=0;while((l+=h)<8) {
|
||||
V=Y*8+l*R;W=L* 8+l*D;X= Q*8+l*U;f=g(V,W);if((f -X)*e>0){if(V>-1&&V<1&&W>
|
||||
-1&&W<1){p=V;d=W;return ;}else e/=-1;}}p=d=-10 ;}int main(int argc, z **
|
||||
argv){int c, f;z b[2],Z ;S=0,C=1;k=argv[1];Z = atoi(argv[2])>>1;b[1]=Z*2
|
||||
|
||||
|
||||
&255;b[0]=Z>> 9;J= 3.1415/Z;A(f,6,f[e]^f+1);while(--f>1)_(
|
||||
(f%2)[b]);_(246);A(c,384,c/3%2?c/6<<2:0);_(_(0));_(_((_(33)
|
||||
<<3)-9)/23);for(f+=5;f < c/22 ; f++) _(e[f] ^ f - 3);for(;f
|
||||
> c/29;f--)_(f>15?2*f-
|
||||
31:c);_(0);for(f=0;f<=
|
||||
Z*2 ; f++){N = S;E_=1-
|
||||
J*J/2;T=J*(1-J*J/6);
|
||||
S=S*E_+C*T;C=C*E_-N*
|
||||
T;A=-(C*C-S*S);P=-A*
|
||||
C;E=A*S;G=S*C*2;I=-
|
||||
G*S;F=G*C;_((_(e[10
|
||||
]/2-1)<<3)-18);for(
|
||||
c=-1;c<5;c++)_((c+1)%2?0:-2*c*c+3*c+9);_(44);A(c,9,c&4?(1-c%2
|
||||
)[b]:0);_(7);for(B=-Z ; B<Z ; B++){_(Z+2);for(O=-Z;O<Z;O++){Y
|
||||
= (E - P*B/Z - G*O/Z)*x;L = (I - F*B/Z - A*O/Z)*x;Q = (-C +S*
|
||||
|
||||
B/Z)*x;R = - Y + E; D =-L+I; U =-Q-C;s();3[w] = sqrt(R*R + D*D + U*U);m=p==-10?1:(4[w]=sqrt(H*H+K*K+1)*w[3],H/=-4[w],K/=-4[w],
|
||||
fabs(H*R + K*D + U/4[w])*exp(-l*l/2) );_((z)(m * 63)*2 + ((z)((p+1)*6) % 2 + (z)((d+1)*6) % 2 == 1 ? 1 : 0));O?l:(_(128),_(B!=
|
||||
Z-1 ? Z : Z+1));}_(128);}_(_(129)-129);}_(0x3b);}
|
||||
@@ -0,0 +1,150 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="GENERATOR" content="mkd2html 2.1.5a DL=DISCOUNT">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
|
||||
<link rel="stylesheet"
|
||||
type="text/css"
|
||||
href="../hint.css">
|
||||
<title>Most GIFted expressions</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Most GIFted expressions</h1>
|
||||
|
||||
<p>Philip Blakely<br>
|
||||
Cambridge, UK<br>
|
||||
<a href="mailto:pmblakely@gmail.com">pmblakely@gmail.com</a></p>
|
||||
|
||||
<h2>Judges' comments:</h2>
|
||||
|
||||
<h3>To build:</h3>
|
||||
|
||||
<pre><code>make blakely
|
||||
</code></pre>
|
||||
|
||||
<h3>To run:</h3>
|
||||
|
||||
<pre><code>./blakely "RPN formula" resolution > output.gif
|
||||
</code></pre>
|
||||
|
||||
<h3>Try:</h3>
|
||||
|
||||
<pre><code>./blakely "xx*yy*+" 64 > paraboloid.gif
|
||||
|
||||
./blakely 9 32 > empty.gif
|
||||
|
||||
time ./blakely 0 250 > flat.gif
|
||||
</code></pre>
|
||||
|
||||
<h3>Selected Judges Remarks:</h3>
|
||||
|
||||
<p>Several IOCCC themes (RPN calculator, animated GIF generator, ray tracing) in one package! Very impressive!</p>
|
||||
|
||||
<p>The checkerboard pattern in the output can be broken. Could you figure out how?</p>
|
||||
|
||||
<p>Larger GIF files confuse some image viewers.</p>
|
||||
|
||||
<h2>Author’s comments:</h2>
|
||||
|
||||
<h2>Remarks</h2>
|
||||
|
||||
<p>This program renders a generic RPN expression in ray-traced animated GIF form.
|
||||
The expression in spatial variables x and y is specified on the command-line with the required resolution,
|
||||
and an animated GIF showing a fly-around of the resulting surface is output to stdout.</p>
|
||||
|
||||
<h2>Usage</h2>
|
||||
|
||||
<p>The program should be run as:</p>
|
||||
|
||||
<pre><code>./blakely xy* 32 > pic.gif
|
||||
</code></pre>
|
||||
|
||||
<p>where the first parameter is a RPN expression, and the second is the width of the required GIF, up to a maximum of 250.</p>
|
||||
|
||||
<p>The expressions are written in Reverse Polish Notation with the following characters recognised:</p>
|
||||
|
||||
<ul>
|
||||
<li>+,-,*,/ - usual arithmetic operations</li>
|
||||
<li>^ - Exponentiation - valid for constant exponent only</li>
|
||||
<li>s - sin</li>
|
||||
<li>c - cos</li>
|
||||
<li>0-9 - single digit integers</li>
|
||||
<li>d - duplicate number on stack</li>
|
||||
<li>t - transpose top two elements on stack</li>
|
||||
<li>x - x coordinate value</li>
|
||||
<li>y - y coordinate value</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>NB all arithmetic is done in double precision, so 23/ is two-thirds, rather than 0</p>
|
||||
|
||||
<p>The surface plotted corresponds to -1 <= x,y <= 1 and for best results, the generated z value should lie between -1 and 1.</p>
|
||||
|
||||
<p>If there is a division by zero, square-root of a negative number, or similar operation, then the results are undefined.</p>
|
||||
|
||||
<h2>Examples</h2>
|
||||
|
||||
<p>For test-runs, use a resolution of 32. For simple expressions, the GIF generation should take only
|
||||
a few seconds with a modern processor and full optimization. Run-time scales as O(N<sup>3</sup>) with resolution N,
|
||||
and more complex expressions take longer to compute. For example, increasing the resolution of ripple.gif
|
||||
to 250 took ~35 minutes to render on an i7 processor.</p>
|
||||
|
||||
<pre><code>./blakely xy* 32 > saddle.gif
|
||||
|
||||
./blakely xx*yy*1++d5*ct/ 64 > ripple.gif
|
||||
</code></pre>
|
||||
|
||||
<h2>Algorithm</h2>
|
||||
|
||||
<p>A generic root-finding algorithm to find the point of intersection between a ray
|
||||
and the surface is done using a simple forward search from the eye.
|
||||
In order to make the rendering realistic, both the value of the expression, and its derivative with respect to x and y must be tracked.
|
||||
This is done using an obvious stack-based approach.</p>
|
||||
|
||||
<h2>Obfuscations</h2>
|
||||
|
||||
<p>Much of the obfuscation is achieved through the use of single-letter variables and #defines.
|
||||
The characters output for the GIF format are generated in myriad and wonderful ways, making use
|
||||
of XOR, return values from putchar, and odd expressions.
|
||||
The layout is in the form of X Y Z.</p>
|
||||
|
||||
<h2>Limitations</h2>
|
||||
|
||||
<p>ASCII is assumed since many bytes for the GIF output are generated from characters given in the source code.
|
||||
On compilation a few warnings about parentheses come up when using gcc 4.6.3, and one about no return value from main() (who uses exit codes anyway?),
|
||||
but clang 3.1 emits no warnings.</p>
|
||||
|
||||
<h2>Questions</h2>
|
||||
|
||||
<ul>
|
||||
<li>Apart from their appearance when computing the RPN expression, sin and cos are not used.
|
||||
How do we then get the correct angles for rotation?</li>
|
||||
<li>Exactly how many times will the animation repeat?</li>
|
||||
<li>Why is there an upper limit of 250x250 for the resolution?</li>
|
||||
<li>What is the point of b[0]?</li>
|
||||
<li>Where are the words NETSCAPE and GIF hidden in the source?</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>(Note that the author may or may not be able to answer all of the above questions.)</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<!--
|
||||
(c) Copyright 1984-2015, [Leo Broukhis, Simon Cooper, Landon Curt Noll][judges] - All rights reserved
|
||||
This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].
|
||||
|
||||
[judges]: http://www.ioccc.org/judges.html
|
||||
[cc]: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
-->
|
||||
|
||||
<TABLE><TR>
|
||||
<TD><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" /></a></TD>
|
||||
<TD><P>© Copyright 1984-2015,
|
||||
<A HREF="/judges.html">Leo Broukhis, Simon Cooper, Landon Curt Noll</A>
|
||||
- All rights reserved<BR>
|
||||
This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.</P></TD>
|
||||
<TD> <!--<a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" height="31" width="88"></a>--></TD>
|
||||
</TR></TABLE>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,121 @@
|
||||
# Most GIFted expressions
|
||||
|
||||
Philip Blakely
|
||||
Cambridge, UK
|
||||
<pmblakely@gmail.com>
|
||||
|
||||
|
||||
## Judges' comments:
|
||||
### To build:
|
||||
|
||||
make blakely
|
||||
|
||||
### To run:
|
||||
|
||||
./blakely "RPN formula" resolution > output.gif
|
||||
|
||||
### Try:
|
||||
|
||||
./blakely "xx*yy*+" 64 > paraboloid.gif
|
||||
|
||||
./blakely 9 32 > empty.gif
|
||||
|
||||
time ./blakely 0 250 > flat.gif
|
||||
|
||||
### Selected Judges Remarks:
|
||||
|
||||
Several IOCCC themes (RPN calculator, animated GIF generator, ray tracing) in one package! Very impressive!
|
||||
|
||||
The checkerboard pattern in the output can be broken. Could you figure out how?
|
||||
|
||||
Larger GIF files confuse some image viewers.
|
||||
|
||||
|
||||
## Author's comments:
|
||||
Remarks
|
||||
-------
|
||||
|
||||
This program renders a generic RPN expression in ray-traced animated GIF form.
|
||||
The expression in spatial variables x and y is specified on the command-line with the required resolution,
|
||||
and an animated GIF showing a fly-around of the resulting surface is output to stdout.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
The program should be run as:
|
||||
|
||||
./blakely xy* 32 > pic.gif
|
||||
where the first parameter is a RPN expression, and the second is the width of the required GIF, up to a maximum of 250.
|
||||
|
||||
The expressions are written in Reverse Polish Notation with the following characters recognised:
|
||||
|
||||
* +,-,\*,/ - usual arithmetic operations
|
||||
* ^ - Exponentiation - valid for constant exponent only
|
||||
* s - sin
|
||||
* c - cos
|
||||
* 0-9 - single digit integers
|
||||
* d - duplicate number on stack
|
||||
* t - transpose top two elements on stack
|
||||
* x - x coordinate value
|
||||
* y - y coordinate value
|
||||
|
||||
NB all arithmetic is done in double precision, so 23/ is two-thirds, rather than 0
|
||||
|
||||
The surface plotted corresponds to -1 <= x,y <= 1 and for best results, the generated z value should lie between -1 and 1.
|
||||
|
||||
If there is a division by zero, square-root of a negative number, or similar operation, then the results are undefined.
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
For test-runs, use a resolution of 32. For simple expressions, the GIF generation should take only
|
||||
a few seconds with a modern processor and full optimization. Run-time scales as O(N^3) with resolution N,
|
||||
and more complex expressions take longer to compute. For example, increasing the resolution of ripple.gif
|
||||
to 250 took ~35 minutes to render on an i7 processor.
|
||||
|
||||
./blakely xy* 32 > saddle.gif
|
||||
|
||||
./blakely xx*yy*1++d5*ct/ 64 > ripple.gif
|
||||
|
||||
Algorithm
|
||||
---------
|
||||
|
||||
A generic root-finding algorithm to find the point of intersection between a ray
|
||||
and the surface is done using a simple forward search from the eye.
|
||||
In order to make the rendering realistic, both the value of the expression, and its derivative with respect to x and y must be tracked.
|
||||
This is done using an obvious stack-based approach.
|
||||
|
||||
Obfuscations
|
||||
------------
|
||||
|
||||
Much of the obfuscation is achieved through the use of single-letter variables and #defines.
|
||||
The characters output for the GIF format are generated in myriad and wonderful ways, making use
|
||||
of XOR, return values from putchar, and odd expressions.
|
||||
The layout is in the form of X Y Z.
|
||||
|
||||
Limitations
|
||||
-----------
|
||||
ASCII is assumed since many bytes for the GIF output are generated from characters given in the source code.
|
||||
On compilation a few warnings about parentheses come up when using gcc 4.6.3, and one about no return value from main() (who uses exit codes anyway?),
|
||||
but clang 3.1 emits no warnings.
|
||||
|
||||
Questions
|
||||
---------
|
||||
|
||||
* Apart from their appearance when computing the RPN expression, sin and cos are not used.
|
||||
How do we then get the correct angles for rotation?
|
||||
* Exactly how many times will the animation repeat?
|
||||
* Why is there an upper limit of 250x250 for the resolution?
|
||||
* What is the point of b[0]?
|
||||
* Where are the words NETSCAPE and GIF hidden in the source?
|
||||
|
||||
(Note that the author may or may not be able to answer all of the above questions.)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
<!--
|
||||
(c) Copyright 1984-2015, [Leo Broukhis, Simon Cooper, Landon Curt Noll][judges] - All rights reserved
|
||||
This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].
|
||||
|
||||
[judges]: http://www.ioccc.org/judges.html
|
||||
[cc]: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
-->
|
||||
Reference in new issue
Block a user