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
Binary file not shown.
+175
@@ -0,0 +1,175 @@
|
||||
#!/bin/make
|
||||
# 1998 makefile
|
||||
#
|
||||
# Copyright (c) Landon Curt Noll, Jeremy Horn, Peter Seebach
|
||||
# and Leonid A. Broukhis, 1999.
|
||||
# All Rights Reserved. Permission for personal, educational or non-profit
|
||||
# use is granted provided this this copyright and notice are included in its
|
||||
# entirety and remains unaltered. All other uses must receive prior permission
|
||||
# from the contest judges.
|
||||
|
||||
SHELL=/bin/sh
|
||||
CAT=cat
|
||||
CHMOD=chmod
|
||||
CP=cp
|
||||
MV=mv
|
||||
ECHO=echo
|
||||
LN=ln
|
||||
RM=rm
|
||||
SED=sed
|
||||
TRUE=true
|
||||
|
||||
# flags for ANSI compiles
|
||||
#
|
||||
# NOTE: Some ANSI compilers make use of -Xa to turn on ANSI mode,
|
||||
# others such as gcc may want -ansi, others may want nothing
|
||||
# at all. Adjust the CFLAGS line as needed.
|
||||
#
|
||||
# NOTE: Some compilers cannot optimize, or optimize some entries
|
||||
# incorrectly. You might want to turn on -O to see if your
|
||||
# compiler can handle them.
|
||||
#
|
||||
# NOTE: On some systems, the library path does not include the location
|
||||
# of the X11 libraries. You might need to use a -L/path/to/X11/lib/dir
|
||||
# in order to compile with these libs.
|
||||
#
|
||||
#CFLAGS=-O -Xa
|
||||
#CFLAGS=-Xa
|
||||
CFLAGS= -ansi
|
||||
#CFLAGS= -ansi -O
|
||||
#CFLAGS=
|
||||
#CFLAGS= -ansi -L/usr/X11R6/lib
|
||||
|
||||
# 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
|
||||
MAY_NEED_GCC= gcc
|
||||
|
||||
# winners that compile under ANSI C
|
||||
#
|
||||
WINNERS= schweikh1 df dloweneil banks dlowe bas2 fanf bas1 tomtorfs dorssel \
|
||||
schweikh2 schnitzi chaos schweikh3
|
||||
ALT_NAMES= schweikh2.orig banks.orig dlowe.orig df.orig schweikh1.orig \
|
||||
chaos_nohalf
|
||||
DATA_FILES= banks_files chaos_files fanf_files schweikh1_files schweikh3_files
|
||||
|
||||
|
||||
all: ${WINNERS}
|
||||
|
||||
schweikh1: schweikh1.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} $? -o $@
|
||||
|
||||
schweikh1.orig: schweikh1.orig.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} $? -o $@
|
||||
|
||||
schweikh1_files: data
|
||||
|
||||
df: df.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
df.orig: prog.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
prog.c : df.c
|
||||
${RM} -f prog.c
|
||||
${CP} $? prog.c
|
||||
|
||||
dloweneil: dloweneil.c
|
||||
${CC} ${CFLAGS} $? -lcurses -o $@
|
||||
|
||||
# See note about use of -L/path/to/X11/lib/dir above this rule fails to link
|
||||
#
|
||||
banks: banks.c
|
||||
${CC} ${CFLAGS} $? -DIT=XK_Page_Up -DDT=XK_Page_Down \
|
||||
-DUP=XK_Up -DDN=XK_Down -DLT=XK_Left -DRT=XK_Right \
|
||||
-DCS=XK_Return -Ddt=0.02 -lm -lX11 -o $@
|
||||
|
||||
# See note about use of -L/path/to/X11/lib/dir above this rule fails to link
|
||||
#
|
||||
banks.orig: banks.orig.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} $? -DIT=XK_Page_Up -DDT=XK_Page_Down \
|
||||
-DUP=XK_Up -DDN=XK_Down -DLT=XK_Left -DRT=XK_Right \
|
||||
-DCS=XK_Return -Ddt=0.02 -lm -lX11 -o $@
|
||||
|
||||
banks_files: bb.sc horizon.sc mountains.sc pittsburgh.sc pyramids.sc river.sc
|
||||
|
||||
dlowe: dlowe.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
dlowe.orig: dlowe.orig.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
bas2: bas2.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
fanf: fanf.c
|
||||
${RM} -f fanftmp1.c fanftmp2.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} -E $? > fanftmp1.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} -E fanftmp1.c > fanftmp2.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} fanftmp2.c ${LDFLAGS} -o $@
|
||||
|
||||
fanf_files: fanf.lambda
|
||||
|
||||
bas1: bas1.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
tomtorfs: tomtorfs.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
dorssel: dorssel.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
schweikh2: schweikh2.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} $? -o $@
|
||||
|
||||
schweikh2.orig: schweikh2.orig.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} $? -o $@
|
||||
|
||||
schweikh3: schweikh3.c
|
||||
${MAY_NEED_GCC} ${CFLAGS} $? -DM0=sizeof -DM1=long -DM2=void \
|
||||
-DM3=realloc -DM4=calloc -DM5=free -o $@
|
||||
|
||||
schweikh3_files: samefile.1
|
||||
|
||||
schnitzi: schnitzi.c
|
||||
${CC} ${CFLAGS} $? -o $@
|
||||
|
||||
chaos: chaos.c
|
||||
${CC} ${CFLAGS} $? -lcurses -o $@
|
||||
|
||||
# some libcurses do not have halfdelay(). This rule is for those systems
|
||||
#
|
||||
chaos_nohalf: chaos_nohalf.c
|
||||
${CC} ${CFLAGS} $? -lcurses -o $@
|
||||
${CP} -f $@ chaos
|
||||
|
||||
chaos_nohalf.c: chaos.c
|
||||
${RM} -f $@
|
||||
${SED} -e 's/halfdelay([^)]*);//' < $? > $@
|
||||
|
||||
chaos_files: cube.data desk.data ioccc.data pyramid.data xwing.data
|
||||
|
||||
everything: ${WINNERS} ${ALT_NAMES} ${DATA_FILES}
|
||||
|
||||
clean:
|
||||
${RM} -f *.o a.out core ${WINNERS}
|
||||
${RM} -f prog.c fanftmp1.c fanftmp2.c chaos_nohalf.c
|
||||
|
||||
clobber: clean
|
||||
${RM} -f ${WINNERS}
|
||||
${RM} -f ${ALT_NAMES}
|
||||
|
||||
nuke: clobber
|
||||
@${TRUE}
|
||||
|
||||
install: all
|
||||
${CAT} ${WINNERS} ${ALT_NAMES} > /dev/null
|
||||
+133
@@ -0,0 +1,133 @@
|
||||
1998 marked the "The Fourteenth International Obfuscated C Code Contest"
|
||||
|
||||
Copyright (c) Landon Curt Noll, Jeremy Horn, Peter Seebach
|
||||
and Leonid A. Broukhis, 1999.
|
||||
All Rights Reserved. Permission for personal, educational or non-profit
|
||||
use is granted provided this this copyright and notice are included in its
|
||||
entirety and remains unaltered. All other uses must receive prior permission
|
||||
from the contest judges.
|
||||
|
||||
|
||||
Standard IOCCC stuff
|
||||
--------------------
|
||||
|
||||
The IOCCC has its own domain. The IOCCC has an official home page is now:
|
||||
|
||||
http://www.ioccc.org
|
||||
|
||||
Use make to compile entries. It is possible that on BSD or non-unix
|
||||
systems the makefile needs to be changed. See the Makefile for details.
|
||||
|
||||
Look at the source and try to figure out what the programs do, and run
|
||||
them with various inputs. If you want to, look at the hints files for
|
||||
spoilers - this year we included most of the information included
|
||||
by the submitters.
|
||||
|
||||
Read over the makefile for compile/build issues. Your system may
|
||||
require certain changes (add or remove a library, add or remove a
|
||||
#define).
|
||||
|
||||
Some ANSI C compilers are not quite as good as they should be. If
|
||||
yours is lacking, you may need to compile using gcc instead of your
|
||||
local compiler.
|
||||
|
||||
|
||||
New Judges
|
||||
----------
|
||||
|
||||
Larry Bassel is now a graduate student in number theory at UC San Diego.
|
||||
Barbara Frezza also went to San Diego to enter into law school at the
|
||||
same time. Her cooking in the role of official chef was sorely missed.
|
||||
Both Larry and Barbara have taken important new steps in their lives.
|
||||
We wish them the best.
|
||||
|
||||
Landon was unable to contact with Sriram Srinivasan at the start of
|
||||
the 1998 IOCCC season. Having not heard from Sriram, Landon put out
|
||||
a call for new IOCCC judges. A number of excellent people applied.
|
||||
|
||||
Landon selected Leonid A. Broukhis, a two time IOCCC winner, as a
|
||||
co-judge. Landon and Leo together selected Jeremy Horn and Peter
|
||||
Seebach. The four judges:
|
||||
|
||||
http://www.ioccc.org/judges.html
|
||||
|
||||
together worked thru-out the 1998 IOCCC season.
|
||||
|
||||
|
||||
Remarks on some of the entries
|
||||
------------------------------
|
||||
|
||||
This year, Jens Schweikhardt won 3 times ... AGAIN! He is the only
|
||||
person who was able to do this, let alone do it in two contests
|
||||
in a row. Bas de Bakker and David Lowe won twice this year as well.
|
||||
|
||||
As we state in the guidelines, the names of the winners are as much
|
||||
news to us as they are to you because we keep authorship separate from
|
||||
rest of the entry. Some people have it, we guess!
|
||||
|
||||
There were a few very good entries that might have won if it were not
|
||||
for the fact that they didn't work. If you didn't win, but think you
|
||||
had a chance: test your program, fix it and submit it next year!
|
||||
|
||||
This year we awarded some outstanding entries. We recommend that you
|
||||
look at all of the winners. The list of winners is a bit too long to
|
||||
say something about every winner. On the other hand a partial mention
|
||||
of a few is in order:
|
||||
|
||||
+ Audiences were very impressed with the Best of Show entry.
|
||||
+ The judges were amused that for the first time we received an entry
|
||||
that caused gcc to give the assembler bad input in some cases.
|
||||
+ The poot entries got a good laugh from the Usenix IOCCC BOF crowd.
|
||||
+ Those with Functional Programming knowledge as well as those
|
||||
impressed with CPP code expansion liked the entry that translated
|
||||
lambda expressions into combinator expressions.
|
||||
+ Logic minded folks will get somewhat twisted up while following the
|
||||
flow of the Best Flow Control entry.
|
||||
+ Those who know the PostScript language will be ``bemused'' by
|
||||
the Best Encapsulation entry.
|
||||
|
||||
There were some outstanding entries that did not win. Unfortunately
|
||||
some very good entries lost because they:
|
||||
|
||||
+ depended too much on non-portable side effects in expressions;
|
||||
+ depended too much on a particular byte order;
|
||||
+ required the use of a special script, data file or pseudo-machine
|
||||
language that was not supplied with the entry.
|
||||
|
||||
We hope the authors of some of those entries will fix and re-submit
|
||||
them for the next IOCCC.
|
||||
|
||||
|
||||
There was no 1997 contest
|
||||
-------------------------
|
||||
|
||||
So what happened to 1997? There was no summer USENIX Technical
|
||||
Conference. The Technical Conference was held Jun 15-19, 1998 instead
|
||||
... 18 months later than the 1996 summer USENIX Technical Conference.
|
||||
In addition we had to select some new IOCCC judges. As a result IOCCC
|
||||
skipped over 1997.
|
||||
|
||||
|
||||
Final Comments
|
||||
--------------
|
||||
|
||||
Please send us comments and suggestions what we have expressed above.
|
||||
Also include anything else that you would like to see in future contests.
|
||||
Send such email to:
|
||||
|
||||
questions@ioccc.org
|
||||
|
||||
If you use, distribute or publish these entries in some way, please drop
|
||||
us a line. We enjoy seeing who, where and how the contest is used.
|
||||
|
||||
You must include the words ``ioccc question'' in the subject of your EMail
|
||||
message when sending EMail to the judges.
|
||||
|
||||
If you have problems with any of the entries, AND YOU HAVE A FIX, please
|
||||
EMail the fix (patch file or the entire changed file) to the above address.
|
||||
|
||||
The next IOCCC is planned to start towards the end of 1999. Watch:
|
||||
|
||||
http://www.ioccc.org
|
||||
|
||||
for news of the next contest.
|
||||
@@ -0,0 +1,60 @@
|
||||
#include <math.h>
|
||||
#include <sys/time.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/keysym.h>
|
||||
double L ,o ,P
|
||||
,_=dt,T,Z,D=1,d,
|
||||
s[999],E,h= 8,I,
|
||||
J,K,w[999],M,m,O
|
||||
,n[999],j=33e-3,i=
|
||||
1E3,r,t, u,v ,W,S=
|
||||
74.5,l=221,X=7.26,
|
||||
a,B,A=32.2,c, F,H;
|
||||
int N,q, C, y,p,U;
|
||||
Window z; char f[52]
|
||||
; GC k; main(){ Display*e=
|
||||
XOpenDisplay( 0); z=RootWindow(e,0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0))
|
||||
; scanf("%lf%lf%lf",y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400,
|
||||
0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6}
|
||||
; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B=
|
||||
sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E
|
||||
*T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s
|
||||
]== 0|K <fabs(W=T*r-I*E +D*P) |fabs(D=t *D+Z *T-a *E)> K)N=1e4; else{ q=W/K *4E2+2e2; C= 2E2+4e2/ K
|
||||
*D; N-1E4&& XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_* (X*t +P*M+m*l); T=X*X+ l*l+M *M;
|
||||
XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){
|
||||
XEvent z; XNextEvent(e ,&z);
|
||||
++*((N=XLookupKeysym
|
||||
(&z.xkey,0))-IT?
|
||||
N-LT? UP-N?& E:&
|
||||
J:& u: &h); --*(
|
||||
DN -N? N-DT ?N==
|
||||
RT?&u: & W:&h:&J
|
||||
); } m=15*F/l;
|
||||
c+=(I=M/ l,l*H
|
||||
+I*M+a*X)*_; H
|
||||
=A*r+v*X-F*l+(
|
||||
E=.1+X*4.9/l,t
|
||||
=T*m/32-I*T/24
|
||||
)/S; K=F*M+(
|
||||
h* 1e4/l-(T+
|
||||
E*5*T*E)/3e2
|
||||
)/S-X*d-B*A;
|
||||
a=2.63 /l*d;
|
||||
X+=( d*l-T/S
|
||||
*(.19*E +a
|
||||
*.64+J/1e3
|
||||
)-M* v +A*
|
||||
Z)*_; l +=
|
||||
K *_; W=d;
|
||||
sprintf(f,
|
||||
"%5d %3d"
|
||||
"%7d",p =l
|
||||
/1.7,(C=9E3+
|
||||
O*57.3)%0550,(int)i); d+=T*(.45-14/l*
|
||||
X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47
|
||||
*I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W*
|
||||
179*v)/2312; select(p=0,0,0,0,&G); v-=(
|
||||
W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u
|
||||
)/107e2)*_; D=cos(o); E=sin(o); } }
|
||||
|
||||
|
||||
+195
@@ -0,0 +1,195 @@
|
||||
Best of Show:
|
||||
|
||||
Carl Banks
|
||||
Penn State Department of Aerospace Engineering
|
||||
232 Hammond Building
|
||||
University Park, PA 16802
|
||||
USA
|
||||
|
||||
http://www.personal.psu.edu/users/c/w/cwb129/
|
||||
|
||||
|
||||
Judge's Comments:
|
||||
|
||||
To build:
|
||||
|
||||
make banks
|
||||
|
||||
To use:
|
||||
|
||||
cat horizon.sc pittsburgh.sc | ./banks
|
||||
|
||||
What can we say? It's a flight sim done in 1536 bytes of real code.
|
||||
This one is a real marvel. When people say the size limits are too
|
||||
tight, well, we can just point them at this one. This program really
|
||||
pushes the envelope!
|
||||
|
||||
The provided Makefile should work; you will need an X-ish system, and
|
||||
a select() system call. More on building in the author comments.
|
||||
|
||||
NOTE: On some systems the original entry did not correctly display
|
||||
the altitude and airspeed. These problems have been fixed. One can
|
||||
still build the original program by:
|
||||
|
||||
make banks.orig
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
You have just stepped out of the real world and into the
|
||||
virtual. You are now sitting in the cockpit of a Piper Cherokee
|
||||
airplane, heading north, flying 1000 feet above ground level.
|
||||
|
||||
Use the keyboard to fly the airplane. The arrow keys represent
|
||||
the control stick. Press the Up Arrow key to push the stick
|
||||
forward. Press the left arrow key to move the stick left, and
|
||||
so on. Press Enter to re-center the stick. Use Page Up and Page
|
||||
Down increase and decrease the throttle, respectively. (The
|
||||
rudder is automatically coordinated with the turn rate, so
|
||||
rudder pedals are not represented.)
|
||||
|
||||
On your display, you will see on the bottom left corner three
|
||||
instruments. The first is the airspeed indicator; it tells you
|
||||
how fast you're going in knots. The second is the heading
|
||||
indicator, or compass. 0 is north, 90 is east, 180 is south,
|
||||
270 is west. The third instrument is the altimeter, which
|
||||
measures your height above ground level in feet.
|
||||
|
||||
--------
|
||||
Features
|
||||
--------
|
||||
|
||||
* Simulator models a Piper Cherokee, which is a light,
|
||||
single-engine propeller driven airplane.
|
||||
|
||||
* The airplane is modeled as a six degree-of-freedom rigid
|
||||
body, accurately reflecting its dynamics (for normal flight
|
||||
conditions, at least).
|
||||
|
||||
* Fly through a virtual 3-D world, while sitting at your X
|
||||
console.
|
||||
|
||||
* Loadable scenery files.
|
||||
|
||||
* Head-up display contains three instruments: a true airspeed
|
||||
indicator, a heading indicator (compass), and an altimeter.
|
||||
|
||||
* Flight controls may be mapped to any keys at compile time
|
||||
by redefining the macros in the build file. Nice if your
|
||||
keyboard doesn't have arrow keys. (Or if you still use
|
||||
vi. :-)
|
||||
|
||||
* Time step size can be set at compile time. This is useful to
|
||||
reduce flicker on network X connections. (But be careful:
|
||||
step sizes longer than about 0.03 seconds tend to have
|
||||
numerical stability problems.)
|
||||
|
||||
* Airplane never stalls!
|
||||
|
||||
* Airplane never runs out of fuel!
|
||||
|
||||
* Fly underground!
|
||||
|
||||
* Fly through buildings!
|
||||
|
||||
|
||||
-------
|
||||
Scenery
|
||||
-------
|
||||
|
||||
Each of the *.sc files is a scenery file. The simulator
|
||||
program reads in the scenery from standard input on startup.
|
||||
You may input more than one scenery file, as long as there are
|
||||
less than 1000 total lines of input.
|
||||
|
||||
Here is a brief description of the scenery files:
|
||||
|
||||
horizon.sc -- A horizon, nothing more. You will probably
|
||||
always want to input this piece of scenery.
|
||||
|
||||
mountains.sc -- An alternate horizon; a little more
|
||||
mountainous.
|
||||
|
||||
pittsburgh.sc -- Scenery of downtown Pittsburgh. The downtown
|
||||
area is initially located to your right.
|
||||
|
||||
bb.sc -- Simple obstacle course. Try to fly over the
|
||||
buildings and under the bridges.
|
||||
|
||||
pyramids.sc -- Fly over the tombs of the ancient Pharaohs,
|
||||
in this (fictitious) Egyptian landscape.
|
||||
|
||||
river.sc -- Follow a flowing river from the sky.
|
||||
|
||||
A few examples of how to input scenery:
|
||||
|
||||
cat horizon.sc pittsburgh.sc | ./banks
|
||||
cat mountains.sc bb.sc | ./banks
|
||||
cat mountains.sc river.sc pyramids.sc | ./banks
|
||||
|
||||
You can simulate flying through a cloud bank as well:
|
||||
|
||||
./banks < /dev/null
|
||||
|
||||
You will usually want at least a horizon, though.
|
||||
|
||||
The format of scenery files is simple, by the way. They're just
|
||||
a list of 3-D coordinates, and the simulator simply draws line
|
||||
segments from point to point as listed in the scenery file. 0 0
|
||||
0 is used to end a series of consecutive line segments. Note
|
||||
that in the coordinate system used, the third coordinate
|
||||
represents altitude in a negative sense: negative numbers are
|
||||
positive altitudes.
|
||||
|
||||
I'm sure you'll be making your own scenery files very soon!!!
|
||||
|
||||
----------------------------
|
||||
Alternate Build Instructions
|
||||
----------------------------
|
||||
|
||||
Several options must be passed to the compiler to make the build
|
||||
work. The provided build file has the appropriate options set
|
||||
to default values. Use this section if you want to compile with
|
||||
different options.
|
||||
|
||||
To map a key to a control, you must pass an option to the
|
||||
compiler in the format ``-Dcontrol=key''. The possible controls
|
||||
you can map are described in the table below:
|
||||
|
||||
|
||||
Control Description Default Key
|
||||
------- ------------------------- -----------
|
||||
IT Increase throttle XK_Page_Up
|
||||
DT Decrease throttle XK_Page_Down
|
||||
FD Move stick forward XK_Up
|
||||
BK Move stick back XK_Down
|
||||
LT Move stick left XK_Left
|
||||
RT Move stick right XK_Right
|
||||
CS Center stick XK_Enter
|
||||
|
||||
|
||||
Values for the possible keys can be found in the X Windows
|
||||
header file <X11/keysym.h>. This file is most likely a
|
||||
cross-reference to another header, <X11/keysymdef.h>.
|
||||
|
||||
You must map all seven controls to keys at compile time, or the
|
||||
compilation will fail.
|
||||
|
||||
For example, to map Center Stick to the space-bar, the compile
|
||||
option would be ``-DCS=XK_space''.
|
||||
|
||||
|
||||
To set the time step size, you must pass the following option to
|
||||
the compiler: ``-Ddt=duration'', where dt is literal, and where
|
||||
duration is the time in seconds you want the time step to be.
|
||||
|
||||
Two things to keep in mind when selecting a time step. Time
|
||||
steps that are too large (more than about 0.03) will cause
|
||||
numerical stability problems and should be avoided. Setting the
|
||||
time step to be smaller than your clock resolution will slow
|
||||
down the simulator, because the system pauses for more time than
|
||||
the simulator expects.
|
||||
|
||||
The best advice is to set time step size to your system timer
|
||||
resolution. Try a longer period if you're getting too much
|
||||
flicker.
|
||||
@@ -0,0 +1,60 @@
|
||||
#include <math.h>
|
||||
#include <sys/time.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/keysym.h>
|
||||
double L ,o ,P
|
||||
,_=dt,T,Z,D=1,d,
|
||||
s[999],E,h= 8,I,
|
||||
J,K,w[999],M,m,O
|
||||
,n[999],j=33e-3,i=
|
||||
1E3,r,t, u,v ,W,S=
|
||||
74.5,l=221,X=7.26,
|
||||
a,B,A=32.2,c, F,H;
|
||||
int N,q,C,y,p,U,*g
|
||||
; Display*e; char f[
|
||||
52]; GC k; main( ){ Window
|
||||
z=RootWindow(e=XOpenDisplay( 0),0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0 ))
|
||||
; scanf("%lf%lf%lf",y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400,
|
||||
0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6}
|
||||
; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B=
|
||||
sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E
|
||||
*T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s
|
||||
]==0|K <fabs(W=T*r-I*E +D*P)|fabs(D=t*D+Z *T-a*E)>K)N=1e4; else{ q=W/(9+K) *4E2+2e2; C= 2E2+4e2/( K
|
||||
+9)*D; N-1E4&&XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_*(X*t+P*M+m*l); T=X*X+ l*l+M *M;
|
||||
XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){
|
||||
XEvent z; XNextEvent(e ,&z);
|
||||
++*((N=XLookupKeysym
|
||||
(&z.xkey,0))-IT?
|
||||
N-LT? UP-N?& E:&
|
||||
J:& u: &h); --*(
|
||||
DN -N? N-DT ?N==
|
||||
RT?&u: & W:&h:&J
|
||||
); } m=15*F/l;
|
||||
c+=(I=M/ l,l*H
|
||||
+I*M+a*X)*_; H
|
||||
=A*r+v*X-F*l+(
|
||||
E=.1+X*4.9/l,t
|
||||
=T*m/32-I*T/24
|
||||
)/S; K=F*M+(
|
||||
h* 1e4/l-(T+
|
||||
E*5*T*E)/3e2
|
||||
)/S-X*d-B*A;
|
||||
a=2.63 /l*d;
|
||||
X+=( d*l-T/S
|
||||
*(.19*E +a
|
||||
*.64+J/1e3
|
||||
)-M* v +A*
|
||||
Z)*_; l +=
|
||||
K *_; W=d;
|
||||
sprintf(f,
|
||||
"%5.0f %4"
|
||||
"d %6.0f",
|
||||
l /1.7,( C =
|
||||
9E3+O*57.3)% 0550,i); d+=T*(.45-14/l*
|
||||
X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47
|
||||
*I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W*
|
||||
179*v)/2312; select(p=0,g,g,g,&G); v-=(
|
||||
W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u
|
||||
)/107e2)*_; D=cos(o); E=sin(o); } }
|
||||
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
char r[]="C#S3K+[;G'W7OB/_? ? « ( !IOCCC! ´ ³Ën £0 0 e÷|ÅtÑ%Ä ° 2u"
|
||||
" »¾ß mÔ/p ª c p) nm «¨ªúïµ!!¶â¡a £À3sîÜ 9sz2{ +§ 9_°0 © h0 ºÂ / "
|
||||
"¤)$1 ¬ a~ ) % y qÃ'¯ ¹â ° \" ! q 6 µy' 0 3;e{ Ì kãÔs¾,Ê 2~a q t"
|
||||
" 9dl 9 ¬.´ .ù_ &Á!ê '* · ; ·± µÁ = <eàª1à B:29 ¦ 6 n´ o®¨b:_2"
|
||||
" µ +úí h |÷t\177°#d`Ý l½Ù r )þÁ @ ·´Ö m d©ià ¤6 e¦ v¸½^ ¶` rq"
|
||||
"Á <'7Ã÷°ÅÙ ´[|äÈ=ñ@îp (², /ä^ c ¦ . ` £²î ¡ñ`fæ /= :ù]y÷¢·"
|
||||
" 2º » q ¢ v²4Õm³íÓ&=a¤¡ g ; dà,é+· +_¼ =È 5߬iêÔØû§ÌÌ r£"
|
||||
#define O(Q)p!O) { *i[25][41]|=U(642+Q); u e r[(Q)/2]&63); }
|
||||
"solÞÄ&¾X¼[Ý; }ï? º= &c} 9ȾóÀ2 >ü 5 ,Þ & Ã0 Úù*½ ³äÿgh";
|
||||
#define C( b)O(28+(B+b)%6)
|
||||
# define a >> B &M[i X]
|
||||
#include/* s */<stdio.h>
|
||||
#include/* s */<time.h>
|
||||
unsigned int long
|
||||
# define e putchar(
|
||||
B,E,M,A,Z,I,N,G
|
||||
# define g ! (32 a)
|
||||
# define u U(533);
|
||||
# define n (65 a)
|
||||
# define z for (
|
||||
[32768], i [32]
|
||||
# define p if(
|
||||
[48][3]={ { { 2} } } ; void**V,*D,*F[32][48];
|
||||
void*Q(void**O){ return*O?(*O=Q(*O)):O; } U(
|
||||
O){return E+=(O/=2)-1?U((A=A/2^57525273+(A&
|
||||
1^O&1)*9583591<<5,O)),0:O,16; } main(O){ A
|
||||
=O?time(D):953351751; z I=0; I<26; ++I){z
|
||||
N=I/2; N<30+I/2; ++N){ z M=0; M<3; ++M){
|
||||
p Z=O)z; (B=I+Z*!!M) <26&&N+Z*(M!=2)-B/
|
||||
2<30; B[G]=N<<7|Z++<<13|I*4+M)z; G[B=A
|
||||
# define X [ I+Z*!! M] [ N+Z*(M!= 2)]
|
||||
&32767]; )u p!Z&&M[i X]){ z B=0; B<6
|
||||
; B++){ p!g){ C(5)O(0)C(2)O(2)} C((
|
||||
B&1?!!n:4-3*g))p!g|n)O(4)O(7)} z B
|
||||
=0; B<6; B++){ p g&&!n)O(14)p!g)O
|
||||
(8)p B&1|g){ O=!n; O(10)O=!(1040
|
||||
a ); O(12 )O=0; } O(17+(B&1 ?!(
|
||||
1040 a)!=!n:g))} } } O(24)} O(
|
||||
21+(I&1))} O(26)p O)z E=0; E<
|
||||
1<<15; I=16){ B=E++[G]; D=Q(
|
||||
&F[I=B/4&31][N=B>>7&63]); M
|
||||
=B%4; Z=B>>=13; V=Q(&F X);
|
||||
p!(D==V|N[I[i]] [1]|i X[1
|
||||
])){ z; --Z&&!(*i X%9|*i
|
||||
X/9&*i X/9-1); ); p!Z){
|
||||
*V=D; *i X|=32>>M; Z=B
|
||||
; z*i X|=4>>M; --Z; i
|
||||
X[*i X?2-!i X [1]:!(
|
||||
F X=V)]=36>>M); } }
|
||||
} p!O){ u u z I=8;
|
||||
I--; )p(N=I[r]=(I
|
||||
>3?E:A)>>(I*9&24
|
||||
))==10||N==13){
|
||||
e 0 ); I =8; u
|
||||
u u u} e 1 );
|
||||
} z E =1333;
|
||||
++ I<8+469*
|
||||
!!O; e(N=I
|
||||
[r])-32|!
|
||||
O?N:r[++
|
||||
I]-N));
|
||||
return
|
||||
O &&
|
||||
main
|
||||
(!O
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
Best Encapsulation:
|
||||
|
||||
Bas de Bakker
|
||||
Pica, Centre for Library Automation
|
||||
Statenweg 154 B (home address)
|
||||
3039 JN Rotterdam
|
||||
The Netherlands
|
||||
|
||||
|
||||
Judges' comments:
|
||||
|
||||
To build:
|
||||
|
||||
make bas1
|
||||
|
||||
To use:
|
||||
|
||||
If lpr on your system can print PostScript:
|
||||
|
||||
./bas1 | gunzip | lpr
|
||||
|
||||
else, while in X Window System,
|
||||
|
||||
./bas1 | gunzip | gv -
|
||||
or:
|
||||
./bas1 | gunzip | gs -sDEVICE=pgmraw -sOutputFile='|xv -' -
|
||||
|
||||
The output is supposed to be a 3D maze, but it is somewhat more
|
||||
than that. If you've seen any of the Maurits Escher's works,
|
||||
you'll know what we're talking about.
|
||||
|
||||
When trying to run the program with command line arguments, be generous.
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
BEMAZING
|
||||
========
|
||||
|
||||
"You're in a twisty little maze of beams, all different."
|
||||
|
||||
Bemazing is "amazing" taken one step (letter) further. Bemazing
|
||||
creates a 3D maze of beams. Try to go from the entrance (the
|
||||
unfinished beam in one corner) to the exit (the unfinished beam in the
|
||||
opposite corner) or vice versa.
|
||||
|
||||
For maximum portability, Bemazing is not tied to any window system,
|
||||
but creates postscript. The picture it makes will fit on either A4 or
|
||||
letter size paper.
|
||||
|
||||
In addition, because postscript is rather verbose, Bemazing creates
|
||||
the postscript in gzip format, in order to save precious bits on your
|
||||
hard disk for the latest version of GNU Emacs (after all, you wouldn't
|
||||
want to use an editor without a psychoanalyze-pinhead function, now
|
||||
would you). Again for maximum portability, Bemazing will take special
|
||||
care that the binary output will not contain any newline or return
|
||||
characters that may get weird treatment on systems that do not use the
|
||||
One True Line Separator.
|
||||
|
||||
NOTES
|
||||
=====
|
||||
|
||||
Be sure to view the source with something that can display characters
|
||||
\240-\377. Use LESSCHARSET=latin1, M-x standard-display-european in
|
||||
GNU Emacs etc. The source does not use characters in the range
|
||||
\200-\237 (we are not an unnamed word processor that tends to create
|
||||
HTML containing these control characters).
|
||||
|
||||
Because this is not the obfuscated postscript contest, the postscript
|
||||
does not contain any "for", "if" or other control structures. All the
|
||||
logic is in the C code. There are only a few straightforward "def"s,
|
||||
because otherwise the output would become much larger.
|
||||
|
||||
Try running Bemazing with command line arguments and see what
|
||||
happens. (But note that the program only guarantees that there
|
||||
actually is a route from entrance to exit if you run it without
|
||||
command line arguments.)
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#include <stdio.h>
|
||||
int O,o,i;char*I="";main(l){O&=l&1?*I:~*I,*I++||(l=2*getchar(),i+=O>8
|
||||
?o:O?0:o+1,o=O>9,O=-1,I="t8B~pq`",l>0)?main(l/2):printf("%d\n",--i);}
|
||||
@@ -0,0 +1,49 @@
|
||||
Best Small Program:
|
||||
|
||||
Bas de Bakker
|
||||
Pica, Centre for Library Automation
|
||||
Statenweg 154 B (home address)
|
||||
3039 JN Rotterdam
|
||||
The Netherlands
|
||||
|
||||
|
||||
Judges' comments:
|
||||
|
||||
To build:
|
||||
|
||||
make bas2
|
||||
|
||||
To use:
|
||||
|
||||
./bas2 < bas2.c
|
||||
|
||||
Questions to ponder:
|
||||
|
||||
Can you determine the relationship between the input and the
|
||||
resulting numeric output?
|
||||
|
||||
The program was not designed to process files with a certain
|
||||
octet value, what value is that?
|
||||
|
||||
Hint and Extra Credit:
|
||||
|
||||
This entry points our a minor flaw in the IOCCC rules that has
|
||||
been around since 1992. It processes a certain octet value in
|
||||
a way that differs from a strict reading of one of the
|
||||
official IOCCC rules. What is the rule and what is the octet
|
||||
value?
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
The main obfuscation is the way characters are recognized, which is
|
||||
done by matching the bit patterns. Minor obfuscations are:
|
||||
|
||||
- Useless layout.
|
||||
|
||||
- Useless variable names.
|
||||
|
||||
- Recursive main() instead of 2 loops (over input characters and over
|
||||
bits in the character).
|
||||
|
||||
- ? and || instead of if statements.
|
||||
+572
@@ -0,0 +1,572 @@
|
||||
23374 -1302 -30
|
||||
23374 -1200 -30
|
||||
23374 -1099 -30
|
||||
23374 -998 -30
|
||||
23374 -897 -30
|
||||
23374 -796 -30
|
||||
23374 -695 -30
|
||||
23374 -594 -30
|
||||
23374 -493 -30
|
||||
23374 -392 -30
|
||||
23374 -291 -30
|
||||
23374 -190 -30
|
||||
23374 -89 -30
|
||||
23374 11 -30
|
||||
23374 112 -30
|
||||
23374 213 -30
|
||||
23374 314 -30
|
||||
23374 415 -30
|
||||
23374 516 -30
|
||||
23374 617 -30
|
||||
23374 718 -30
|
||||
23374 819 -30
|
||||
23374 920 -30
|
||||
23374 1021 -30
|
||||
23374 1122 -30
|
||||
23374 1223 -30
|
||||
23374 1324 -30
|
||||
23374 1426 -30
|
||||
23498 1426 -30
|
||||
23498 1324 -30
|
||||
23498 1223 -30
|
||||
23498 1122 -30
|
||||
23498 1021 -30
|
||||
23498 920 -30
|
||||
23498 819 -30
|
||||
23498 718 -30
|
||||
23498 617 -30
|
||||
23498 516 -30
|
||||
23498 415 -30
|
||||
23498 314 -30
|
||||
23498 213 -30
|
||||
23498 112 -30
|
||||
23498 11 -30
|
||||
23498 -89 -30
|
||||
23498 -190 -30
|
||||
23498 -291 -30
|
||||
23498 -392 -30
|
||||
23498 -493 -30
|
||||
23498 -594 -30
|
||||
23498 -695 -30
|
||||
23498 -796 -30
|
||||
23498 -897 -30
|
||||
23498 -998 -30
|
||||
23498 -1099 -30
|
||||
23498 -1200 -30
|
||||
23498 -1302 -30
|
||||
23374 -1302 -30
|
||||
23374 -1302 -30
|
||||
0 0 0
|
||||
0 0 0
|
||||
7502 124 -30
|
||||
7502 124 -750
|
||||
7750 124 -750
|
||||
7502 124 -510
|
||||
7750 124 -510
|
||||
7502 124 -270
|
||||
7750 124 -270
|
||||
7502 124 -30
|
||||
7750 124 -30
|
||||
7750 124 -750
|
||||
7750 -124 -750
|
||||
7750 124 -510
|
||||
7750 -124 -510
|
||||
7750 124 -270
|
||||
7750 -124 -270
|
||||
7750 124 -30
|
||||
7750 -124 -30
|
||||
7750 -124 -750
|
||||
7502 -124 -750
|
||||
7750 -124 -510
|
||||
7502 -124 -510
|
||||
7750 -124 -270
|
||||
7502 -124 -270
|
||||
7750 -124 -30
|
||||
7502 -124 -30
|
||||
7502 -124 -750
|
||||
7502 124 -750
|
||||
7502 -124 -510
|
||||
7502 124 -510
|
||||
7502 -124 -270
|
||||
7502 124 -270
|
||||
7502 -124 -30
|
||||
7502 124 -30
|
||||
7502 124 -750
|
||||
7502 124 -750
|
||||
7502 124 -510
|
||||
7502 124 -510
|
||||
7502 124 -270
|
||||
7502 124 -270
|
||||
7502 124 -30
|
||||
7502 124 -30
|
||||
0 0 0
|
||||
23374 -1054 0
|
||||
23374 -1054 -30
|
||||
23374 -496 -402
|
||||
23374 62 -526
|
||||
23374 620 -402
|
||||
23374 1178 -30
|
||||
23374 1178 0
|
||||
0 0 0
|
||||
23498 1178 0
|
||||
23498 1178 -30
|
||||
23498 620 -402
|
||||
23498 62 -526
|
||||
23498 -496 -402
|
||||
23498 -1054 -30
|
||||
23498 -1054 0
|
||||
0 0 0
|
||||
18166 0 -30
|
||||
18166 0 -610
|
||||
18352 186 -610
|
||||
18166 0 -320
|
||||
18352 186 -320
|
||||
18166 0 -30
|
||||
18352 186 -30
|
||||
18352 186 -610
|
||||
18538 0 -610
|
||||
18352 186 -320
|
||||
18538 0 -320
|
||||
18352 186 -30
|
||||
18538 0 -30
|
||||
18538 0 -610
|
||||
18352 -186 -610
|
||||
18538 0 -320
|
||||
18352 -186 -320
|
||||
18538 0 -30
|
||||
18352 -186 -30
|
||||
18352 -186 -610
|
||||
18166 0 -610
|
||||
18352 -186 -320
|
||||
18166 0 -320
|
||||
18352 -186 -30
|
||||
18166 0 -30
|
||||
18166 0 -610
|
||||
18166 0 -610
|
||||
18166 0 -320
|
||||
18166 0 -320
|
||||
18166 0 -30
|
||||
18166 0 -30
|
||||
0 0 0
|
||||
13392 -1364 -30
|
||||
13392 -1262 -30
|
||||
13392 -1161 -30
|
||||
13392 -1060 -30
|
||||
13392 -959 -30
|
||||
13392 -858 -30
|
||||
13392 -757 -30
|
||||
13392 -656 -30
|
||||
13392 -555 -30
|
||||
13392 -454 -30
|
||||
13392 -353 -30
|
||||
13392 -252 -30
|
||||
13392 -151 -30
|
||||
13392 -50 -30
|
||||
13392 50 -30
|
||||
13392 151 -30
|
||||
13392 252 -30
|
||||
13392 353 -30
|
||||
13392 454 -30
|
||||
13392 555 -30
|
||||
13392 656 -30
|
||||
13392 757 -30
|
||||
13392 858 -30
|
||||
13392 959 -30
|
||||
13392 1060 -30
|
||||
13392 1161 -30
|
||||
13392 1262 -30
|
||||
13392 1364 -30
|
||||
13516 1364 -30
|
||||
13516 1262 -30
|
||||
13516 1161 -30
|
||||
13516 1060 -30
|
||||
13516 959 -30
|
||||
13516 858 -30
|
||||
13516 757 -30
|
||||
13516 656 -30
|
||||
13516 555 -30
|
||||
13516 454 -30
|
||||
13516 353 -30
|
||||
13516 252 -30
|
||||
13516 151 -30
|
||||
13516 50 -30
|
||||
13516 -50 -30
|
||||
13516 -151 -30
|
||||
13516 -252 -30
|
||||
13516 -353 -30
|
||||
13516 -454 -30
|
||||
13516 -555 -30
|
||||
13516 -656 -30
|
||||
13516 -757 -30
|
||||
13516 -858 -30
|
||||
13516 -959 -30
|
||||
13516 -1060 -30
|
||||
13516 -1161 -30
|
||||
13516 -1262 -30
|
||||
13516 -1364 -30
|
||||
13392 -1364 -30
|
||||
13392 -1364 -30
|
||||
0 0 0
|
||||
13392 -1116 -30
|
||||
13392 -892 -60
|
||||
13392 -669 -150
|
||||
13392 -334 -60
|
||||
13392 0 -35
|
||||
13392 334 -60
|
||||
13392 669 -150
|
||||
13392 892 -60
|
||||
13392 1116 -30
|
||||
0 0 0
|
||||
13392 -669 -150
|
||||
13392 -669 0
|
||||
0 0 0
|
||||
13392 669 -150
|
||||
13392 669 0
|
||||
0 0 0
|
||||
13516 1116 -30
|
||||
13516 892 -60
|
||||
13516 669 -150
|
||||
13516 334 -60
|
||||
13516 0 -35
|
||||
13516 -334 -60
|
||||
13516 -669 -150
|
||||
13516 -892 -60
|
||||
13516 -1116 -30
|
||||
0 0 0
|
||||
13516 669 -150
|
||||
13516 669 0
|
||||
0 0 0
|
||||
13516 -669 -150
|
||||
13516 -669 0
|
||||
0 0 0
|
||||
33604 620 -30
|
||||
33604 620 -1132
|
||||
33852 620 -1132
|
||||
33604 620 -856
|
||||
33852 620 -856
|
||||
33604 620 -581
|
||||
33852 620 -581
|
||||
33604 620 -305
|
||||
33852 620 -305
|
||||
33604 620 -30
|
||||
33852 620 -30
|
||||
33852 620 -1132
|
||||
33852 372 -1132
|
||||
33852 620 -856
|
||||
33852 372 -856
|
||||
33852 620 -581
|
||||
33852 372 -581
|
||||
33852 620 -305
|
||||
33852 372 -305
|
||||
33852 620 -30
|
||||
33852 372 -30
|
||||
33852 372 -1132
|
||||
33604 372 -1132
|
||||
33852 372 -856
|
||||
33604 372 -856
|
||||
33852 372 -581
|
||||
33604 372 -581
|
||||
33852 372 -305
|
||||
33604 372 -305
|
||||
33852 372 -30
|
||||
33604 372 -30
|
||||
33604 372 -1132
|
||||
33604 620 -1132
|
||||
33604 372 -856
|
||||
33604 620 -856
|
||||
33604 372 -581
|
||||
33604 620 -581
|
||||
33604 372 -305
|
||||
33604 620 -305
|
||||
33604 372 -30
|
||||
33604 620 -30
|
||||
33604 620 -1132
|
||||
33604 620 -1132
|
||||
33604 620 -856
|
||||
33604 620 -856
|
||||
33604 620 -581
|
||||
33604 620 -581
|
||||
33604 620 -305
|
||||
33604 620 -305
|
||||
33604 620 -30
|
||||
33604 620 -30
|
||||
0 0 0
|
||||
44516 1240 -30
|
||||
44516 1340 -30
|
||||
44516 1441 -30
|
||||
44516 1542 -30
|
||||
44516 1643 -30
|
||||
44516 1743 -30
|
||||
44516 1844 -30
|
||||
44516 1945 -30
|
||||
44516 2046 -30
|
||||
44516 2146 -30
|
||||
44516 2247 -30
|
||||
44516 2348 -30
|
||||
44516 2449 -30
|
||||
44516 2549 -30
|
||||
44516 2650 -30
|
||||
44516 2751 -30
|
||||
44516 2852 -30
|
||||
44516 2952 -30
|
||||
44516 3053 -30
|
||||
44516 3154 -30
|
||||
44516 3255 -30
|
||||
44516 3355 -30
|
||||
44516 3456 -30
|
||||
44516 3557 -30
|
||||
44516 3658 -30
|
||||
44640 3658 -30
|
||||
44640 3557 -30
|
||||
44640 3456 -30
|
||||
44640 3355 -30
|
||||
44640 3255 -30
|
||||
44640 3154 -30
|
||||
44640 3053 -30
|
||||
44640 2952 -30
|
||||
44640 2852 -30
|
||||
44640 2751 -30
|
||||
44640 2650 -30
|
||||
44640 2549 -30
|
||||
44640 2449 -30
|
||||
44640 2348 -30
|
||||
44640 2247 -30
|
||||
44640 2146 -30
|
||||
44640 2046 -30
|
||||
44640 1945 -30
|
||||
44640 1844 -30
|
||||
44640 1743 -30
|
||||
44640 1643 -30
|
||||
44640 1542 -30
|
||||
44640 1441 -30
|
||||
44640 1340 -30
|
||||
44640 1240 -30
|
||||
44516 1240 -30
|
||||
44516 1240 -30
|
||||
0 0 0
|
||||
44516 1488 -30
|
||||
44516 1674 -60
|
||||
44516 1860 -150
|
||||
44516 2139 -60
|
||||
44516 2418 -35
|
||||
44516 2697 -60
|
||||
44516 2976 -150
|
||||
44516 3162 -60
|
||||
44516 3348 -30
|
||||
0 0 0
|
||||
44516 1860 -150
|
||||
44516 1860 0
|
||||
0 0 0
|
||||
44516 2976 -150
|
||||
44516 2976 0
|
||||
0 0 0
|
||||
44640 3348 -30
|
||||
44640 3162 -60
|
||||
44640 2976 -150
|
||||
44640 2697 -60
|
||||
44640 2418 -35
|
||||
44640 2139 -60
|
||||
44640 1860 -150
|
||||
44640 1674 -60
|
||||
44640 1488 -30
|
||||
0 0 0
|
||||
44640 2976 -150
|
||||
44640 2976 0
|
||||
0 0 0
|
||||
44640 1860 -150
|
||||
44640 1860 0
|
||||
0 0 0
|
||||
48980 3348 -30
|
||||
48980 3348 -440
|
||||
49228 3348 -440
|
||||
48980 3348 -30
|
||||
49228 3348 -30
|
||||
49228 3348 -440
|
||||
49228 2604 -440
|
||||
49228 3348 -30
|
||||
49228 2604 -30
|
||||
49228 2604 -440
|
||||
48980 2604 -440
|
||||
49228 2604 -30
|
||||
48980 2604 -30
|
||||
48980 2604 -440
|
||||
48980 3348 -440
|
||||
48980 2604 -30
|
||||
48980 3348 -30
|
||||
48980 3348 -440
|
||||
48980 3348 -440
|
||||
48980 3348 -30
|
||||
48980 3348 -30
|
||||
0 0 0
|
||||
53940 1798 -30
|
||||
53940 1901 -30
|
||||
53940 2004 -30
|
||||
53940 2108 -30
|
||||
53940 2211 -30
|
||||
53940 2314 -30
|
||||
53940 2418 -30
|
||||
53940 2521 -30
|
||||
53940 2624 -30
|
||||
53940 2728 -30
|
||||
53940 2831 -30
|
||||
53940 2934 -30
|
||||
53940 3038 -30
|
||||
53940 3141 -30
|
||||
53940 3244 -30
|
||||
53940 3348 -30
|
||||
53940 3451 -30
|
||||
53940 3554 -30
|
||||
53940 3658 -30
|
||||
54064 3658 -30
|
||||
54064 3554 -30
|
||||
54064 3451 -30
|
||||
54064 3348 -30
|
||||
54064 3244 -30
|
||||
54064 3141 -30
|
||||
54064 3038 -30
|
||||
54064 2934 -30
|
||||
54064 2831 -30
|
||||
54064 2728 -30
|
||||
54064 2624 -30
|
||||
54064 2521 -30
|
||||
54064 2418 -30
|
||||
54064 2314 -30
|
||||
54064 2211 -30
|
||||
54064 2108 -30
|
||||
54064 2004 -30
|
||||
54064 1901 -30
|
||||
54064 1798 -30
|
||||
53940 1798 -30
|
||||
53940 1798 -30
|
||||
0 0 0
|
||||
53940 1984 0
|
||||
53940 1984 -80
|
||||
53940 2356 -130
|
||||
53940 3100 -30
|
||||
53940 3472 -30
|
||||
53940 3100 -130
|
||||
53940 2356 -30
|
||||
53940 1984 -80
|
||||
0 0 0
|
||||
53940 3472 -30
|
||||
53940 3472 0
|
||||
0 0 0
|
||||
54064 3472 0
|
||||
54064 3472 -80
|
||||
54064 3100 -130
|
||||
54064 2356 -30
|
||||
54064 1984 -30
|
||||
54064 2356 -130
|
||||
54064 3100 -30
|
||||
54064 3472 -80
|
||||
0 0 0
|
||||
54064 1984 -30
|
||||
54064 1984 0
|
||||
0 0 0
|
||||
64790 0 -30
|
||||
64790 0 -580
|
||||
65100 -248 -580
|
||||
64790 0 -305
|
||||
65100 -248 -305
|
||||
64790 0 -30
|
||||
65100 -248 -30
|
||||
65100 -248 -580
|
||||
65596 372 -580
|
||||
65100 -248 -305
|
||||
65596 372 -305
|
||||
65100 -248 -30
|
||||
65596 372 -30
|
||||
65596 372 -580
|
||||
65286 620 -580
|
||||
65596 372 -305
|
||||
65286 620 -305
|
||||
65596 372 -30
|
||||
65286 620 -30
|
||||
65286 620 -580
|
||||
64790 0 -580
|
||||
65286 620 -305
|
||||
64790 0 -305
|
||||
65286 620 -30
|
||||
64790 0 -30
|
||||
64790 0 -580
|
||||
64790 0 -580
|
||||
64790 0 -305
|
||||
64790 0 -305
|
||||
64790 0 -30
|
||||
64790 0 -30
|
||||
0 0 0
|
||||
73470 -1798 -30
|
||||
73470 -1696 -30
|
||||
73470 -1595 -30
|
||||
73470 -1494 -30
|
||||
73470 -1393 -30
|
||||
73470 -1292 -30
|
||||
73470 -1191 -30
|
||||
73470 -1090 -30
|
||||
73470 -989 -30
|
||||
73470 -888 -30
|
||||
73470 -787 -30
|
||||
73470 -686 -30
|
||||
73470 -585 -30
|
||||
73470 -484 -30
|
||||
73470 -383 -30
|
||||
73470 -282 -30
|
||||
73470 -181 -30
|
||||
73470 -80 -30
|
||||
73470 20 -30
|
||||
73470 121 -30
|
||||
73470 222 -30
|
||||
73470 323 -30
|
||||
73470 424 -30
|
||||
73470 525 -30
|
||||
73470 626 -30
|
||||
73470 727 -30
|
||||
73470 828 -30
|
||||
73470 930 -30
|
||||
73594 930 -30
|
||||
73594 828 -30
|
||||
73594 727 -30
|
||||
73594 626 -30
|
||||
73594 525 -30
|
||||
73594 424 -30
|
||||
73594 323 -30
|
||||
73594 222 -30
|
||||
73594 121 -30
|
||||
73594 20 -30
|
||||
73594 -80 -30
|
||||
73594 -181 -30
|
||||
73594 -282 -30
|
||||
73594 -383 -30
|
||||
73594 -484 -30
|
||||
73594 -585 -30
|
||||
73594 -686 -30
|
||||
73594 -787 -30
|
||||
73594 -888 -30
|
||||
73594 -989 -30
|
||||
73594 -1090 -30
|
||||
73594 -1191 -30
|
||||
73594 -1292 -30
|
||||
73594 -1393 -30
|
||||
73594 -1494 -30
|
||||
73594 -1595 -30
|
||||
73594 -1696 -30
|
||||
73594 -1798 -30
|
||||
73470 -1798 -30
|
||||
73470 -1798 -30
|
||||
0 0 0
|
||||
73470 -1550 0
|
||||
73470 -1550 -30
|
||||
73470 -992 -402
|
||||
73470 -434 -526
|
||||
73470 124 -402
|
||||
73470 682 -30
|
||||
73470 682 0
|
||||
0 0 0
|
||||
73594 682 0
|
||||
73594 682 -30
|
||||
73594 124 -402
|
||||
73594 -434 -526
|
||||
73594 -992 -402
|
||||
73594 -1550 -30
|
||||
73594 -1550 0
|
||||
0 0 0
|
||||
@@ -0,0 +1,93 @@
|
||||
#include<curses.h>
|
||||
#include<stdlib.h>
|
||||
#include<string.h>
|
||||
|
||||
#define A int
|
||||
#define F float
|
||||
#define O sizeof
|
||||
#define V ((A *)(X+N))
|
||||
#define U(a,b) for(a = 0; a < b; a++)
|
||||
#define L(a) (X[K] * H[a*4]+ X[K+1] * H[a*4+1]+ X[K+2] * H[a*4+2])
|
||||
#define _(e,f,a,b,c) if(M==e) { T[a*4+c] = T[b*4+c] = T[c*4+a] = T[c*4+b] = !(T[c*5] = 1); T[a*4+b] = -(T[b*4+a] = f .1045284632); T[b*5] = T[a*5] = .9945418726; U(M,3) U(E,4) U(K,3) R[M*4+E] += H[K*4+E] * T[M*4+K]; memcpy(H,R,12*O(F)); }
|
||||
|
||||
char Q[3792];
|
||||
A K, M=0, E, B;
|
||||
long Z;
|
||||
F H[] = { 1,0,0,0,0,1,0,0,0,0,1,0 } , T[12], R[12], C, D, I, J, S, * X, G=4;
|
||||
FILE * W;
|
||||
|
||||
A main(A N,char ** Y) {
|
||||
char P[] = "AlWuzEre 72 -1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 -1 1 1 1 -1 1 -1 -1 -1 1 -1 -1 1 1 1 1 -1 -1 1 -1 1 -1 1 -1 -1 1 1 -1 -1 -1 -1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 ";
|
||||
strcpy(Q,P);
|
||||
if(!(W = fopen(Y[N<2?0:1],"r"))) {
|
||||
printf("Can't read\n"); exit(-1); }
|
||||
fseek(W,0,SEEK_END);
|
||||
Z = ftell(W);
|
||||
fseek(W,0,SEEK_SET);
|
||||
strcpy(Q+9, "%d");
|
||||
while(fscanf(W,Q,&N) != 1) {
|
||||
fseek(W,1,SEEK_CUR);
|
||||
if(ftell(W) >= Z) {
|
||||
printf("Bad input\n"); exit(-1); } }
|
||||
|
||||
X = (F *)malloc(N * (O(A)>O(F)?O(A):O(F)) * 2);
|
||||
if(!X) { printf("No memory\n"); exit(-1); }
|
||||
U(K,N) fscanf(W,"%f",X+K);
|
||||
fclose(W);
|
||||
|
||||
initscr();
|
||||
halfdelay(30);
|
||||
noecho();
|
||||
|
||||
CH:
|
||||
memset(R,0,12*O(F));
|
||||
_('h', ,1,2,0)
|
||||
_('j', ,2,0,1)
|
||||
_('k', ,1,0,2)
|
||||
_('y',-,1,2,0)
|
||||
_('u',-,2,0,1)
|
||||
_('i',-,1,0,2)
|
||||
G += M=='a'?-.1:M=='z'?.1:0;
|
||||
if(M=='q') { printf("%.9s\n",P); exit(0); }
|
||||
|
||||
memset(Q,0,3792);
|
||||
erase();
|
||||
|
||||
U(K,N) {
|
||||
C = 40 / (L(2)+G);
|
||||
V[K] = (A)(L(0) * C) + 40;
|
||||
V[K+1] = (A)(L(1) * C) + 24;
|
||||
K+=2; }
|
||||
|
||||
U(B,N) {
|
||||
C = V[B++];
|
||||
D = V[B++];
|
||||
E = V[++B] - C;
|
||||
M = V[++B] - D;
|
||||
B++;
|
||||
S = (F)abs((abs(E)>abs(M))?E:M);
|
||||
I=E/S;
|
||||
J=M/S++;
|
||||
U(K,S)
|
||||
{
|
||||
E = (A)(C+0.5);
|
||||
M = (A)(D+0.5);
|
||||
if(E>=0 && M>=0 && E<79 && M<48)
|
||||
{
|
||||
Q[E + M * 79] = 1;
|
||||
mvaddch((M&1?M-1:M)/2,E,Q[E+(M+(M&1?-1:1))*79]?':':(M&1?'.':'`'));
|
||||
}
|
||||
C+=I;
|
||||
D+=J;
|
||||
}
|
||||
}
|
||||
|
||||
move(0,0);
|
||||
refresh();
|
||||
|
||||
M = getch();
|
||||
halfdelay(M==ERR?1:30);
|
||||
M = M==ERR?'u':M;
|
||||
|
||||
goto CH;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
Best Object Orientation:
|
||||
|
||||
Alan De Smet
|
||||
8531 Greenway Blvd. #206
|
||||
Middleton, WI 53562
|
||||
USA
|
||||
|
||||
http://www.upl.cs.wisc.edu/~chaos/
|
||||
|
||||
|
||||
Judge's Comments:
|
||||
|
||||
To build:
|
||||
|
||||
make chaos
|
||||
|
||||
To use:
|
||||
|
||||
./chaos
|
||||
|
||||
This is the authors first IOCCC entry. We thought the entry was
|
||||
a nice example of a compact collection of obfuscations.
|
||||
|
||||
Can you figure our why, in some cases, it wants to read itself?
|
||||
|
||||
Some systems do not implement halfdelay() in their libcurses.
|
||||
You might try compiling with -lncurses of you have that library.
|
||||
Or you can build this entry without the halfdelay() call by:
|
||||
|
||||
make chaos_nohalf
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
|
||||
* Usage
|
||||
|
||||
The executable takes a single argument for the data file to use.
|
||||
If no argument is given, it will find a data file by itself, don't
|
||||
worry about it...
|
||||
|
||||
|
||||
* Summary
|
||||
|
||||
This is a simple ncurses 3D object viewer. The keys 'y', 'u', 'i',
|
||||
'h', 'j', and 'k' rotate. 'a' and 'z' zoom in and out. 'q' quits.
|
||||
Given about 3 seconds of no input, it will start rotating until
|
||||
interrupted by user input.
|
||||
|
||||
|
||||
* Features (aka Bugs):
|
||||
|
||||
Memory malloced is never freed. This shouldn't be a big deal,
|
||||
since only one block is ever allocated, and the OS should recover it.
|
||||
|
||||
My local flavor of lint doesn't seem to like the fact that I never
|
||||
"return" from main. Feh, what does it know? Otherwise, ignoring
|
||||
lint's over protectiveness ("Of course I'm not using all of the
|
||||
functions defined in curses.h!"), it's lint clean.
|
||||
|
||||
If the compiler happens to generate the byte sequence "AlWuzEre"
|
||||
in the executable by chance, the program may be unable to locate
|
||||
the embedded string. As a result, running the program without an
|
||||
external data file may act in undefined ways.
|
||||
|
||||
If the compiler doesn't store char * P's data in a nice contiguous
|
||||
stream, it would be bad. As above, it would break running the
|
||||
program without an external data file.
|
||||
|
||||
If the incoming data is corrupt, the results are undefined.
|
||||
(Although dumping core is a popular result.)
|
||||
|
||||
When a point passes behind the camera, it is still plotted.
|
||||
The object will "bounce" off the camera, but the result (some points
|
||||
in front, some reflected from the rear) looks really odd. And it
|
||||
sometimes hangs. So just don't fly through objects. You'll be
|
||||
happier.
|
||||
@@ -0,0 +1,14 @@
|
||||
AlWuzEre 72
|
||||
-1 1 1 1 1 1
|
||||
1 1 1 1 1 -1
|
||||
1 1 1 1 -1 1
|
||||
1 1 -1 1 -1 -1
|
||||
-1 1 -1 -1 1 1
|
||||
1 1 -1 -1 1 -1
|
||||
1 -1 1 -1 -1 1
|
||||
1 -1 -1 -1 -1 -1
|
||||
1 -1 1 1 -1 -1
|
||||
-1 1 1 -1 -1 1
|
||||
-1 1 -1 -1 -1 -1
|
||||
-1 -1 1 -1 -1 -1
|
||||
|
||||
@@ -0,0 +1,949 @@
|
||||
# This file is read by a standard conformance test program.
|
||||
#
|
||||
# File format:
|
||||
# Three paragraphs separated by exactly one empty line.
|
||||
# Lines beginning with '#' at the very beginning are ignored.
|
||||
#
|
||||
# Lines in the first paragraph consist of a single digit [0-9], a space,
|
||||
# and an argument for cpp which selects some standard. Normally this is
|
||||
# done with a feature test macros but for example for ANSI compliance it
|
||||
# might be a compiler switch, like -Xa or -ansi.
|
||||
# No more than 10 standards (identified by the digits 0 - 9, in order)
|
||||
# are allowed.
|
||||
#
|
||||
# Lines in the second paragraph consist of a string of digits, a space,
|
||||
# and an identifier. An identifier may begin or end with '*' meaning
|
||||
# zero or more characters can be appended or prepended, respectively.
|
||||
# The string of digits describes the particular standards in which this
|
||||
# identifier is *always* (regardless of which header is included) reserved
|
||||
# and thus may be a valid macro.
|
||||
#
|
||||
# Lines in the third paragraph consist of two or three fields.
|
||||
# A two field line consists of a string of digits describing the
|
||||
# standards, a space, and an identifier (of the same format as in
|
||||
# the second paragraph). A sequence of two field lines is followed
|
||||
# by exactly one three field line. This line consists of a string
|
||||
# of digits describing the standards, a space, the header name,
|
||||
# another space and the single character H. In other words, a list
|
||||
# of identifiers *followed* by the header in which they may appear.
|
||||
# [That way only one pass is needed when reading this file.]
|
||||
#
|
||||
0 -D__STDC__ -D_ANSI_SOURCE
|
||||
1 -D_POSIX_SOURCE
|
||||
2 -D_XOPEN_SOURCE -D_XOPEN_VERSION=4
|
||||
|
||||
# Identifiers with external linkage (extern functions and extern
|
||||
# variables) are always in scope, even when no header is included.
|
||||
#
|
||||
# Always okay, because these constitute the implementation name space:
|
||||
012 _*
|
||||
#
|
||||
# <errno.h> :
|
||||
012 errno
|
||||
#
|
||||
# <stddef.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <assert.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <ctype.h> :
|
||||
012 isa*
|
||||
012 isb*
|
||||
012 isc*
|
||||
012 isd*
|
||||
012 ise*
|
||||
012 isf*
|
||||
012 isg*
|
||||
012 ish*
|
||||
012 isi*
|
||||
012 isj*
|
||||
012 isk*
|
||||
012 isl*
|
||||
012 ism*
|
||||
012 isn*
|
||||
012 iso*
|
||||
012 isp*
|
||||
012 isq*
|
||||
012 isr*
|
||||
012 iss*
|
||||
012 ist*
|
||||
012 isu*
|
||||
012 isv*
|
||||
012 isw*
|
||||
012 isx*
|
||||
012 isy*
|
||||
012 isz*
|
||||
012 toa*
|
||||
012 tob*
|
||||
012 toc*
|
||||
012 tod*
|
||||
012 toe*
|
||||
012 tof*
|
||||
012 tog*
|
||||
012 toh*
|
||||
012 toi*
|
||||
012 toj*
|
||||
012 tok*
|
||||
012 tol*
|
||||
012 tom*
|
||||
012 ton*
|
||||
012 too*
|
||||
012 top*
|
||||
012 toq*
|
||||
012 tor*
|
||||
012 tos*
|
||||
012 tot*
|
||||
012 tou*
|
||||
012 tov*
|
||||
012 tow*
|
||||
012 tox*
|
||||
012 toy*
|
||||
012 toz*
|
||||
#
|
||||
# <locale.h> :
|
||||
012 lconv
|
||||
012 setlocale
|
||||
012 localeconv
|
||||
#
|
||||
# <math.h> :
|
||||
012 acos
|
||||
012 acosf
|
||||
012 acosl
|
||||
012 asin
|
||||
012 asinf
|
||||
012 asinl
|
||||
012 atan
|
||||
012 atanf
|
||||
012 atanl
|
||||
012 atan2
|
||||
012 atan2f
|
||||
012 atan2l
|
||||
012 cos
|
||||
012 cosf
|
||||
012 cosl
|
||||
012 cosh
|
||||
012 coshf
|
||||
012 coshl
|
||||
012 exp
|
||||
012 expf
|
||||
012 expl
|
||||
012 fabs
|
||||
012 fabsf
|
||||
012 fabsl
|
||||
012 floor
|
||||
012 floorf
|
||||
012 floorl
|
||||
012 fmod
|
||||
012 fmodf
|
||||
012 fmodl
|
||||
012 frexp
|
||||
012 frexpf
|
||||
012 frexpl
|
||||
012 ldexp
|
||||
012 ldexpf
|
||||
012 ldexpl
|
||||
012 log
|
||||
012 logf
|
||||
012 logl
|
||||
012 log10
|
||||
012 log10f
|
||||
012 log10l
|
||||
012 modf
|
||||
012 modff
|
||||
012 modfl
|
||||
012 pow
|
||||
012 powf
|
||||
012 powl
|
||||
012 sin
|
||||
012 sinf
|
||||
012 sinl
|
||||
012 sinh
|
||||
012 sinhf
|
||||
012 sinhl
|
||||
012 tan
|
||||
012 tanf
|
||||
012 tanl
|
||||
012 tanh
|
||||
012 tanhf
|
||||
012 tanhl
|
||||
012 sqrt
|
||||
012 sqrtf
|
||||
012 sqrtl
|
||||
012 ceil
|
||||
012 ceilf
|
||||
012 ceill
|
||||
#
|
||||
# <setjmp.h> :
|
||||
012 longjmp
|
||||
012 setjmp
|
||||
12 siglongjmp
|
||||
12 sigsetjmp
|
||||
#
|
||||
# <signal.h> :
|
||||
012 raise
|
||||
012 signal
|
||||
12 kill
|
||||
12 sigaction
|
||||
12 sigaddset
|
||||
12 sigdelset
|
||||
12 sigemptyset
|
||||
12 sigfillset
|
||||
12 sigismember
|
||||
12 sigpending
|
||||
12 sigprocmask
|
||||
12 sigsuspend
|
||||
#
|
||||
# <stdarg.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <stdio.h> :
|
||||
012 stderr
|
||||
012 stdin
|
||||
012 stdout
|
||||
012 remove
|
||||
012 rename
|
||||
012 tmpfile
|
||||
012 tmpnam
|
||||
012 fclose
|
||||
012 fflush
|
||||
012 fileno
|
||||
012 fopen
|
||||
012 freopen
|
||||
012 setbuf
|
||||
012 setvbuf
|
||||
012 fprintf
|
||||
012 fscanf
|
||||
012 printf
|
||||
012 scanf
|
||||
012 sprintf
|
||||
012 sscanf
|
||||
012 vfprintf
|
||||
012 vprintf
|
||||
012 vsprintf
|
||||
012 fgetc
|
||||
012 fgets
|
||||
012 fputc
|
||||
012 fputs
|
||||
012 getc
|
||||
012 getchar
|
||||
012 gets
|
||||
012 putc
|
||||
012 putchar
|
||||
012 puts
|
||||
012 ungetc
|
||||
012 fread
|
||||
012 fwrite
|
||||
012 fgetpos
|
||||
012 fseek
|
||||
012 fsetpos
|
||||
012 ftell
|
||||
012 rewind
|
||||
012 clearerr
|
||||
012 feof
|
||||
012 ferror
|
||||
012 perror
|
||||
#
|
||||
# <stdlib.h> :
|
||||
012 atof
|
||||
012 atoi
|
||||
012 atol
|
||||
012 strtod
|
||||
012 strtol
|
||||
012 strtoul
|
||||
012 rand
|
||||
012 srand
|
||||
012 calloc
|
||||
012 free
|
||||
012 malloc
|
||||
012 realloc
|
||||
012 abort
|
||||
012 atexit
|
||||
012 exit
|
||||
012 getenv
|
||||
012 system
|
||||
012 bsearch
|
||||
012 qsort
|
||||
012 abs
|
||||
012 div
|
||||
012 labs
|
||||
012 ldiv
|
||||
012 mblen
|
||||
012 mbtowc
|
||||
012 wctomb
|
||||
012 mbstowcs
|
||||
012 wcstombs
|
||||
#
|
||||
# <string.h>
|
||||
012 mema*
|
||||
012 memb*
|
||||
012 memc*
|
||||
012 memd*
|
||||
012 meme*
|
||||
012 memf*
|
||||
012 memg*
|
||||
012 memh*
|
||||
012 memi*
|
||||
012 memj*
|
||||
012 memk*
|
||||
012 meml*
|
||||
012 memm*
|
||||
012 memn*
|
||||
012 memo*
|
||||
012 memp*
|
||||
012 memq*
|
||||
012 memr*
|
||||
012 mems*
|
||||
012 memt*
|
||||
012 memu*
|
||||
012 memv*
|
||||
012 memw*
|
||||
012 memx*
|
||||
012 memy*
|
||||
012 memz*
|
||||
012 stra*
|
||||
012 strb*
|
||||
012 strc*
|
||||
012 strd*
|
||||
012 stre*
|
||||
012 strf*
|
||||
012 strg*
|
||||
012 strh*
|
||||
012 stri*
|
||||
012 strj*
|
||||
012 strk*
|
||||
012 strl*
|
||||
012 strm*
|
||||
012 strn*
|
||||
012 stro*
|
||||
012 strp*
|
||||
012 strq*
|
||||
012 strr*
|
||||
012 strs*
|
||||
012 strt*
|
||||
012 stru*
|
||||
012 strv*
|
||||
012 strw*
|
||||
012 strx*
|
||||
012 stry*
|
||||
012 strz*
|
||||
012 wcsa*
|
||||
012 wcsb*
|
||||
012 wcsc*
|
||||
012 wcsd*
|
||||
012 wcse*
|
||||
012 wcsf*
|
||||
012 wcsg*
|
||||
012 wcsh*
|
||||
012 wcsi*
|
||||
012 wcsj*
|
||||
012 wcsk*
|
||||
012 wcsl*
|
||||
012 wcsm*
|
||||
012 wcsn*
|
||||
012 wcso*
|
||||
012 wcsp*
|
||||
012 wcsq*
|
||||
012 wcsr*
|
||||
012 wcss*
|
||||
012 wcst*
|
||||
012 wcsu*
|
||||
012 wcsv*
|
||||
012 wcsw*
|
||||
012 wcsx*
|
||||
012 wcsy*
|
||||
012 wcsz*
|
||||
#
|
||||
# <time.h> :
|
||||
012 clock
|
||||
012 difftime
|
||||
012 mktime
|
||||
012 time
|
||||
012 asctime
|
||||
012 ctime
|
||||
012 gmtime
|
||||
012 localtime
|
||||
012 strftime
|
||||
12 tzset
|
||||
12 tzname
|
||||
#
|
||||
# <limits.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <float.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <iso646.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <wctype.h> :
|
||||
012 wctype
|
||||
012 wctrans
|
||||
# (is* and to* mentioned above)
|
||||
#
|
||||
# <wchar.h> :
|
||||
# (wcs* already mentioned above)
|
||||
012 fwprintf
|
||||
012 fwscanf
|
||||
012 wprintf
|
||||
012 wscanf
|
||||
012 swprintf
|
||||
012 swscanf
|
||||
012 vfwprintf
|
||||
012 vwprintf
|
||||
012 vswprintf
|
||||
012 fgetwc
|
||||
012 fgetws
|
||||
012 fputwc
|
||||
012 fputws
|
||||
012 getwc
|
||||
012 getwchar
|
||||
012 putwc
|
||||
012 putwchar
|
||||
012 ungetwc
|
||||
012 fwide
|
||||
012 wmemchr
|
||||
012 wmemcmp
|
||||
012 wmemcpy
|
||||
012 wmemmove
|
||||
012 wmemset
|
||||
012 btowc
|
||||
012 wctob
|
||||
012 mbsinit
|
||||
012 mbrlen
|
||||
012 mbrtowc
|
||||
012 wcrtomb
|
||||
012 mbsrtowcs
|
||||
#
|
||||
# <dirent.h> (POSIX) :
|
||||
12 dirent
|
||||
12 closedir
|
||||
12 opendir
|
||||
12 readdir
|
||||
12 rewinddir
|
||||
#
|
||||
# <fcntl.h> (POSIX) :
|
||||
12 flock
|
||||
12 creat
|
||||
12 fcntl
|
||||
12 open
|
||||
#
|
||||
# <grp.h> (POSIX) :
|
||||
12 getgrgid
|
||||
12 getgrnam
|
||||
#
|
||||
# <pwd.h> (POSIX) :
|
||||
12 getpwnam
|
||||
12 getpwuid
|
||||
#
|
||||
# <sys/stat.h> (POSIX) :
|
||||
12 chmod
|
||||
12 fstat
|
||||
12 mkdir
|
||||
12 mkfifo
|
||||
12 stat
|
||||
12 umask
|
||||
#
|
||||
# <sys/times.h> (POSIX) :
|
||||
12 times
|
||||
#
|
||||
# <sys/types.h> (POSIX) : [no external identifiers]
|
||||
#
|
||||
# <sys/utsname.h> (POSIX) :
|
||||
12 uname
|
||||
#
|
||||
# <sys/wait.h> (POSIX) :
|
||||
12 wait
|
||||
12 waitpid
|
||||
#
|
||||
# <termios.h> (POSIX) :
|
||||
12 cfgetispeed
|
||||
12 cfgetospeed
|
||||
12 cfsetispeed
|
||||
12 cfsetospeed
|
||||
12 tcdrain
|
||||
12 tcflow
|
||||
12 tcflush
|
||||
12 tcgetattr
|
||||
12 tcsendbreak
|
||||
12 tcsetattr
|
||||
#
|
||||
# <unistd.h> (POSIX) :
|
||||
12 _exit
|
||||
12 access
|
||||
12 alarm
|
||||
12 chdir
|
||||
12 chown
|
||||
12 close
|
||||
12 ctermid
|
||||
12 cuserid
|
||||
12 dup2
|
||||
12 dup
|
||||
12 execl
|
||||
12 execle
|
||||
12 execlp
|
||||
12 execv
|
||||
12 execve
|
||||
12 execvp
|
||||
12 fork
|
||||
12 fpathconf
|
||||
12 getcwd
|
||||
12 getegid
|
||||
12 geteuid
|
||||
12 getgid
|
||||
12 getgroups
|
||||
12 getlogin
|
||||
12 getpgrp
|
||||
12 getpid
|
||||
12 getppid
|
||||
12 getuid
|
||||
12 isatty
|
||||
12 link
|
||||
12 lseek
|
||||
12 pathconf
|
||||
12 pause
|
||||
12 pipe
|
||||
12 read
|
||||
12 rmdir
|
||||
12 setgid
|
||||
12 setpgid
|
||||
12 setsid
|
||||
12 setuid
|
||||
12 sleep
|
||||
12 sysconf
|
||||
12 tcgetpgrp
|
||||
12 tcsetpgrp
|
||||
12 ttyname
|
||||
12 unlink
|
||||
12 write
|
||||
# <unistd.h> (XOPEN additions)
|
||||
2 confstr
|
||||
2 crypt
|
||||
2 encrypt
|
||||
2 getopt
|
||||
2 optarg
|
||||
2 opterr
|
||||
2 optind
|
||||
2 optopt
|
||||
2 getpass
|
||||
2 swab
|
||||
#
|
||||
# <utime.h> (POSIX) :
|
||||
12 utime
|
||||
|
||||
# Identifiers with no linkage, per header:
|
||||
# macros, types, structs, unions.
|
||||
012 E0*
|
||||
012 E1*
|
||||
012 E2*
|
||||
012 E3*
|
||||
012 E4*
|
||||
012 E5*
|
||||
012 E6*
|
||||
012 E7*
|
||||
012 E8*
|
||||
012 E9*
|
||||
012 EA*
|
||||
012 EB*
|
||||
012 EC*
|
||||
012 ED*
|
||||
012 EE*
|
||||
012 EF*
|
||||
012 EG*
|
||||
012 EH*
|
||||
012 EI*
|
||||
012 EJ*
|
||||
012 EK*
|
||||
012 EL*
|
||||
012 EM*
|
||||
012 EN*
|
||||
012 EO*
|
||||
012 EP*
|
||||
012 EQ*
|
||||
012 ER*
|
||||
012 ES*
|
||||
012 ET*
|
||||
012 EU*
|
||||
012 EV*
|
||||
012 EW*
|
||||
012 EX*
|
||||
012 EY*
|
||||
012 EZ*
|
||||
12 *_t
|
||||
012 errno.h H
|
||||
012 NULL
|
||||
012 offsetof
|
||||
012 ptrdiff_t
|
||||
012 size_t
|
||||
012 wchar_z
|
||||
12 *_t
|
||||
012 stddef.h H
|
||||
012 NDEBUG
|
||||
012 assert
|
||||
12 *_t
|
||||
012 assert.h H
|
||||
012 LC_A*
|
||||
012 LC_B*
|
||||
012 LC_C*
|
||||
012 LC_D*
|
||||
012 LC_E*
|
||||
012 LC_F*
|
||||
012 LC_G*
|
||||
012 LC_H*
|
||||
012 LC_I*
|
||||
012 LC_J*
|
||||
012 LC_K*
|
||||
012 LC_L*
|
||||
012 LC_M*
|
||||
012 LC_N*
|
||||
012 LC_O*
|
||||
012 LC_P*
|
||||
012 LC_Q*
|
||||
012 LC_R*
|
||||
012 LC_S*
|
||||
012 LC_T*
|
||||
012 LC_U*
|
||||
012 LC_V*
|
||||
012 LC_W*
|
||||
012 LC_X*
|
||||
012 LC_Y*
|
||||
012 LC_Z*
|
||||
012 NULL
|
||||
12 *_t
|
||||
012 locale.h H
|
||||
012 HUGE_VAL
|
||||
12 *_t
|
||||
2 MAXFLOAT
|
||||
2 M_E
|
||||
2 M_LOG2E
|
||||
2 M_LOG10E
|
||||
2 M_LN2
|
||||
2 M_LN10
|
||||
2 M_PI
|
||||
2 M_PI_2
|
||||
2 M_PI_4
|
||||
2 M_1_PI
|
||||
2 M_2_PI
|
||||
2 M_2_SQRTPI
|
||||
2 M_SQRT2
|
||||
2 M_SQRT1_2
|
||||
012 math.h H
|
||||
012 jmp_buf
|
||||
12 sigjmp_buf
|
||||
12 *_t
|
||||
012 setjmp.h H
|
||||
012 sig_atomic_t
|
||||
012 SIG_*
|
||||
012 SIGA*
|
||||
012 SIGB*
|
||||
012 SIGC*
|
||||
012 SIGD*
|
||||
012 SIGE*
|
||||
012 SIGF*
|
||||
012 SIGG*
|
||||
012 SIGH*
|
||||
012 SIGI*
|
||||
012 SIGJ*
|
||||
012 SIGK*
|
||||
012 SIGL*
|
||||
012 SIGM*
|
||||
012 SIGN*
|
||||
012 SIGO*
|
||||
012 SIGP*
|
||||
012 SIGQ*
|
||||
012 SIGR*
|
||||
012 SIGS*
|
||||
012 SIGT*
|
||||
012 SIGU*
|
||||
012 SIGV*
|
||||
012 SIGW*
|
||||
012 SIGX*
|
||||
012 SIGY*
|
||||
012 SIGZ*
|
||||
12 sa_*
|
||||
12 SA_*
|
||||
12 *_t
|
||||
012 signal.h H
|
||||
012 va_list
|
||||
012 va_start
|
||||
012 va_arg
|
||||
012 va_end
|
||||
12 *_t
|
||||
012 stdarg.h H
|
||||
012 _IOFBF
|
||||
012 _IOLBF
|
||||
012 _IONBF
|
||||
012 BUFSIZ
|
||||
012 EOF
|
||||
012 FILE
|
||||
012 FILENAME_MAX
|
||||
012 FOPEN_MAX
|
||||
012 fpos_t
|
||||
012 L_tmpnam
|
||||
012 NULL
|
||||
012 SEEK_CUR
|
||||
012 SEEK_END
|
||||
012 SEEK_SET
|
||||
012 size_t
|
||||
012 TMP_MAX
|
||||
12 L_ctermid
|
||||
12 L_cuserid
|
||||
12 STREAM_MAX
|
||||
12 *_t
|
||||
2 P_tmpdir
|
||||
012 stdio.h H
|
||||
012 EXIT_FAILURE
|
||||
012 EXIT_SUCCESS
|
||||
012 MB_CUR_MAX
|
||||
012 NULL
|
||||
012 RAND_MAX
|
||||
012 div_t
|
||||
012 ldiv_t
|
||||
012 size_t
|
||||
012 wchar_t
|
||||
12 *_t
|
||||
2 WIFSIGNALED
|
||||
2 WTERMSIG
|
||||
2 WUNTRACED
|
||||
2 WNOHANG
|
||||
2 WIFEXITED
|
||||
2 WIFSTOPPED
|
||||
2 WSTOPSIG
|
||||
2 WEXITSTATUS
|
||||
012 stdlib.h H
|
||||
012 NULL
|
||||
012 size_t
|
||||
12 *_t
|
||||
012 string.h H
|
||||
012 CLOCKS_PER_SEC
|
||||
012 NULL
|
||||
012 tm
|
||||
12 CLK_TCK
|
||||
12 *_t
|
||||
012 time.h H
|
||||
012 CHAR_BIT
|
||||
012 CHAR_MAX
|
||||
012 CHAR_MIN
|
||||
012 INT_MAX
|
||||
012 INT_MIN
|
||||
012 LONG_MAX
|
||||
012 LONG_MIN
|
||||
012 MB_LEN_MAX
|
||||
012 SCHAR_MAX
|
||||
012 SCHAR_MIN
|
||||
012 SHRT_MAX
|
||||
012 SHRT_MIN
|
||||
012 UCHAR_MAX
|
||||
012 UCHAR_MIN
|
||||
012 UINT_MAX
|
||||
012 ULONG_MAX
|
||||
012 USHRT_MAX
|
||||
12 ARG_MAX
|
||||
12 CHILD_MAX
|
||||
12 LINK_MAX
|
||||
12 MAX_CANON
|
||||
12 MAX_INPUT
|
||||
12 NAME_MAX
|
||||
12 NGROUPS_MAX
|
||||
12 OPEN_MAX
|
||||
12 PATH_MAX
|
||||
12 PIPE_BUF
|
||||
12 SSIZE_MAX
|
||||
12 STREAM_MAX
|
||||
12 TZNAME_MAX
|
||||
12 *_t
|
||||
12 *_MAX
|
||||
2 NL_TEXTMAX
|
||||
2 DBL_MIN
|
||||
2 NL_MSGMAX
|
||||
2 NL_ARGMAX
|
||||
2 NL_NMAX
|
||||
2 WORD_BIT
|
||||
2 NL_LANGMAX
|
||||
2 LONG_BIT
|
||||
2 NZERO
|
||||
2 NL_SETMAX
|
||||
2 FLT_DIG
|
||||
2 FLT_MIN
|
||||
2 DBL_DIG
|
||||
012 limits.h H
|
||||
012 DBL_DIG
|
||||
012 DBL_MANT_DIG
|
||||
012 DBL_MAX_10_EXP
|
||||
012 DBL_MAX_EXP
|
||||
012 DBL_MIN_10_EXP
|
||||
012 DBL_MIN_EXP
|
||||
012 FLT_DIG
|
||||
012 FLT_MANT_DIG
|
||||
012 FLT_MAX_10_EXP
|
||||
012 FLT_MAX_EXP
|
||||
012 FLT_MIN_10_EXP
|
||||
012 FLT_MIN_EXP
|
||||
012 LDBL_DIG
|
||||
012 LDBL_MANT_DIG
|
||||
012 LDBL_MAX_10_EXP
|
||||
012 LDBL_MAX_EXP
|
||||
012 LDBL_MIN_10_EXP
|
||||
012 LDBL_MIN_EXP
|
||||
012 DBL_MAX
|
||||
012 FLT_MAX
|
||||
012 LDBL_MAX
|
||||
012 DBL_EPSILON
|
||||
012 DBL_MIN
|
||||
012 FLT_EPSILON
|
||||
012 FLT_MIN
|
||||
012 LDBL_EPSILON
|
||||
012 LDBL_MIN
|
||||
012 FLT_ROUNDS
|
||||
012 FLT_RADIX
|
||||
12 *_t
|
||||
012 float.h H
|
||||
012 and
|
||||
012 and_eq
|
||||
012 bitand
|
||||
012 bitor
|
||||
012 compl
|
||||
012 not
|
||||
012 not_eq
|
||||
012 or
|
||||
012 or_eq
|
||||
012 xor
|
||||
012 xor_eq
|
||||
12 *_t
|
||||
012 iso646.h H
|
||||
012 wctrans_t
|
||||
012 wctype_t
|
||||
012 WEOF
|
||||
012 wint_t
|
||||
12 *_t
|
||||
012 wctype.h H
|
||||
012 mbstate_t
|
||||
012 NULL
|
||||
012 size_t
|
||||
012 tm
|
||||
012 wchar_t
|
||||
012 WCHAR_MAX
|
||||
012 WCHAR_MIN
|
||||
012 WEOF
|
||||
012 wint_t
|
||||
12 *_t
|
||||
012 wchar.h H
|
||||
12 DIR
|
||||
12 d_*
|
||||
12 *_t
|
||||
12 dirent.h H
|
||||
12 l_*
|
||||
12 F_*
|
||||
12 O_*
|
||||
12 S_*
|
||||
12 FD_CLOEXEC
|
||||
12 SEEK_CUR
|
||||
12 SEEK_END
|
||||
12 SEEK_SET
|
||||
2 st_atime
|
||||
2 st_mtime
|
||||
2 st_ctime
|
||||
12 *_t
|
||||
12 fcntl.h H
|
||||
12 group
|
||||
12 *_t
|
||||
12 gr_*
|
||||
12 grp.h H
|
||||
12 passwd
|
||||
12 pw_*
|
||||
12 *_t
|
||||
12 pwd.h H
|
||||
12 stat
|
||||
12 st_*
|
||||
12 S_*
|
||||
12 *_t
|
||||
12 sys/stat.h H
|
||||
12 clock_t
|
||||
12 tms
|
||||
12 tms_*
|
||||
12 *_t
|
||||
12 sys/times.h H
|
||||
12 *_t
|
||||
12 sys/types.h H
|
||||
12 utsname
|
||||
12 *_t
|
||||
12 sys/utsname.h H
|
||||
12 WEXITSTATUS
|
||||
12 WIFEXITED
|
||||
12 WIFSIGNALED
|
||||
12 WIFSTOPPED
|
||||
12 WNOHANG
|
||||
12 WSTOPSIG
|
||||
12 WTERMSIG
|
||||
12 WUNTRACED
|
||||
12 *_t
|
||||
12 sys/wait.h H
|
||||
12 BRKINT
|
||||
12 CLOCAL
|
||||
12 CREAD
|
||||
12 CS5
|
||||
12 CS6
|
||||
12 CS7
|
||||
12 CS8
|
||||
12 CSIZE
|
||||
12 CSTOPB
|
||||
12 ECHO
|
||||
12 ECHOE
|
||||
12 ECHOK
|
||||
12 ECHONL
|
||||
12 HUPCL
|
||||
12 NCCS
|
||||
12 NOFLSH
|
||||
12 PARENB
|
||||
12 PARMRK
|
||||
12 PARODD
|
||||
12 TOSTOP
|
||||
12 c_*
|
||||
12 V*
|
||||
12 I*
|
||||
12 O*
|
||||
12 TC*
|
||||
12 B0*
|
||||
12 B1*
|
||||
12 B2*
|
||||
12 B3*
|
||||
12 B4*
|
||||
12 B5*
|
||||
12 B6*
|
||||
12 B7*
|
||||
12 B8*
|
||||
12 B9*
|
||||
2 FFDLY
|
||||
2 CRDLY
|
||||
2 BS0
|
||||
2 BS1
|
||||
2 FF0
|
||||
2 CR0
|
||||
2 FF1
|
||||
2 CR1
|
||||
2 CR2
|
||||
2 CR3
|
||||
2 XCASE
|
||||
2 NL0
|
||||
2 NL1
|
||||
2 TABDLY
|
||||
2 NLDLY
|
||||
2 TAB0
|
||||
2 TAB1
|
||||
2 TAB2
|
||||
2 TAB3
|
||||
2 BSDLY
|
||||
12 termios
|
||||
12 *_t
|
||||
12 termios.h H
|
||||
12 F_OK
|
||||
12 NULL
|
||||
12 R_OK
|
||||
12 SEEK_CUR
|
||||
12 SEEK_END
|
||||
12 SEEK_SET
|
||||
12 STDERR_FILENO
|
||||
12 STDIN_FILENO
|
||||
12 STDOUT_FILENO
|
||||
12 W_OK
|
||||
12 X_OK
|
||||
# _* is in the allowed namespace anyway.
|
||||
12 *_t
|
||||
12 unistd.h H
|
||||
12 utimbuf
|
||||
12 *_t
|
||||
12 utime.h H
|
||||
@@ -0,0 +1,39 @@
|
||||
AlWuzEre 228
|
||||
-1.5 -1 1 -1.5 1 1
|
||||
-1.5 -1 1 -1.5 -1 -1
|
||||
-1.5 -1 1 -1 -1 1
|
||||
-1.5 1 1 -1 1 1
|
||||
-1.5 1 1 -1.5 1 -1
|
||||
-1.5 1 1 1.5 1 1
|
||||
1 -1 1 1 -1 -1
|
||||
1 -1 1 1 1 1
|
||||
1 -1 1 1 .75 1
|
||||
1 -1 -1 1 1 -1
|
||||
1 -1 -1 1 .75 -1
|
||||
-1 1 -1 1 1 -1
|
||||
-1 1 -1 -1 .75 -1
|
||||
1 1 -1 1 .75 -1
|
||||
-1 1 1 1 1 1
|
||||
-1 1 1 -1 .75 1
|
||||
1 1 1 1 .75 1
|
||||
-1 .75 -1 1 .75 -1
|
||||
-1 .75 -1 -1 .75 1
|
||||
1 .75 -1 1 .75 1
|
||||
1 .75 1 -1 .75 1
|
||||
-1.5 1 -1 -1 1 -1
|
||||
-1.5 1 -1 -1.5 -1 -1
|
||||
-1.5 1 -1 1.5 1 -1
|
||||
-1.5 -1 -1 -1 -1 -1
|
||||
1.5 1 1 1 1 1
|
||||
1.5 1 1 1.5 1 -1
|
||||
1.5 1 1 1.5 -1 1
|
||||
1.5 1 -1 1 1 -1
|
||||
1.5 1 -1 1.5 -1 -1
|
||||
1.5 -1 -1 1 -1 -1
|
||||
1.5 -1 -1 1.5 -1 1
|
||||
1.5 -1 1 1 -1 1
|
||||
-1 -1 -1 -1 1 -1
|
||||
-1 -1 -1 -1 .75 -1
|
||||
-1 -1 -1 -1 -1 1
|
||||
-1 -1 1 -1 1 1
|
||||
-1 -1 1 -1 .75 1
|
||||
@@ -0,0 +1,39 @@
|
||||
#ifndef int
|
||||
#ifdef while
|
||||
char s[234],d[56],*p=s,m='m';
|
||||
#define int typedef (*define)();\
|
||||
define O [6]={getc,putchar,(y)memmove,(y)printf,(y)n,(y)l};
|
||||
#include __FILE__
|
||||
signed short n(short bz){
|
||||
short pb=0,Md=1,ih=2,sfp=3,sjs=4,fo,u=5,scp=6,t,gq=7,oh,r=8,pcf=9,rs=10;
|
||||
char o=1,i=1,l,pc=i,b=r+o/2,_f=6,m=7,s=8,g,q,od=o*rs+4^s,js=_f/*3-m*'c',bs='g';
|
||||
return 1; }
|
||||
#y FILE c[a]+s,p[c],r[m]+u[i+4*o|f]-r[wob][wad]+s*f-!w|o,L+x | cut
|
||||
;}int main(i,love_unix){*/;}int main(i,love_unix){/*;}int main(i,love_unix){*\;}| here */
|
||||
while(FILE)for(;9-(i=0[O](f)););
|
||||
for(;32-(i=0[O](f));0&& 3[O]("-->%s<--", "gxdgbtgxsxpcctvpixktedhiedcte"));
|
||||
for(;'\n'-(i=O[0](f));)(i>='a'&&i<'z')?*
|
||||
#include __FILE__
|
||||
"Demonic Smiley" );} /* <g> */
|
||||
#else
|
||||
#define while(int) short c=0;int*f=fopen(__##int##__,"r");for(i=0;i<25;i _)i[d]='A'+(13+i)%26;main:
|
||||
#define y define
|
||||
#define _ ++
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include __FILE__
|
||||
#endif
|
||||
#elif defined(signed)
|
||||
(p _)=(i-'a')[d]:!(i-'z')?*(p _)=32:(i>='A'&&i<='Z')&&((3&8|2)[O](d+1,d,24L),*(p _)=0[d]=i);/*
|
||||
#y FILE t,ra|js+t*gj,at[qdd]-=K,is _,qv _,veb _,ti _,ao[mqht] _*/
|
||||
if(c _<6) goto main; 5[O](
|
||||
#else
|
||||
#define signed short l(){char q='_';p=s+4*(time(NULL)%24)*2,m=(char)p+1;\
|
||||
*(p+8)=0; for(d[3]=10,d[33]=3[d]-10;d[3]<18;3[d] _) d[3][p]=q;3[d][p]=0;\
|
||||
hell: printf("\t[%s]\n",p+10);if(!m) goto stoned;\
|
||||
froze: d[8]=(scanf("%c",&(2[d+__STDC__])),2[d+!NULL])&223;if(!(3[d+5]-'\n')) goto froze;\
|
||||
for(m=1[d]=0;d[1]<8;2[d-1] _) (p[d[1]]-d[8]||(p[3[d-2]+10]=4[d+4]))+(p[d[1]+10]-q||m _);\
|
||||
goto hell;stoned:;}
|
||||
FILE *X(FILE s){ char i,iev,jmqhu,xqht,mqh,ujek,sxydw,kdj,yjb,utou,qhre,eamy,jxxe,bt;}
|
||||
#endif
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
Best Data Hiding:
|
||||
|
||||
Daniel Fischer
|
||||
VNetx.com GbR
|
||||
Salenbergstrasse 11 (home address)
|
||||
D 72250 Freudenstadt
|
||||
German Federal Republic
|
||||
|
||||
|
||||
Judge's Comments:
|
||||
|
||||
To build:
|
||||
|
||||
make df
|
||||
|
||||
To use:
|
||||
|
||||
./df
|
||||
|
||||
Everyone talks about how data hiding can produce clearer code; I am
|
||||
pleased to offer this charming refutation.
|
||||
|
||||
The program is a simple game. A bit of observation reveals that the
|
||||
game has some data - but where? It's unclear which of the contents of
|
||||
the program are used.
|
||||
|
||||
Curiously, the program only works if its source is in the directory
|
||||
it's run in. More curiously, the program will fail if the program's
|
||||
name's second letter isn't "r" (the source has been changed for your
|
||||
convenience and this restriction does no longer exist).
|
||||
|
||||
Modern design has come a long way since the unreadable, tightly-coupled
|
||||
systems we used to have.
|
||||
|
||||
Extra credit questions:
|
||||
|
||||
Where are the words stored?
|
||||
How many words does this entry use?
|
||||
Can you add more words to the program and still make it work?
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
This program lets you guess English words. It displays an underscore
|
||||
for each letter in the word; guessing a letter that actually is in
|
||||
the word replaces the corresponding underscores with the letter
|
||||
itself. You can guess a letter simply by typing it in. If your C
|
||||
implementation requires it, you may have to hit Return before it
|
||||
is recognized. In this case, you can also type multiple guesses
|
||||
on the same line (completely solve it by entering
|
||||
"abcdefghijklmnopqrstuvwxyz"). Execution stops when all underscores
|
||||
have been replaced.
|
||||
|
||||
The program offers a number of different words to guess, time() is
|
||||
used to pick one at random. All words are eight characters long.
|
||||
|
||||
The source should compile with any ANSI C compiler (I used CodeWarrior
|
||||
w/ ANSI strict). Using non-ANSI compilers that implement the ANSI
|
||||
features it uses will not work (unless they defined __STDC__ 1
|
||||
which they shouldn't). Due to space restrictions, I did not use
|
||||
any trigraph sequences. It does not require any special -D defines.
|
||||
|
||||
The source passes lint without any complaint (if invoked with
|
||||
>/dev/null). (My lclint is unable to recover from some parts of it.)
|
||||
|
||||
Actually, the code not only is compliant with the ANSI specifications,
|
||||
but uses a near minimum subset of them. C keywords that were not
|
||||
used have been re(de)fined to avoid unnecessary introduction of
|
||||
new, unknown character patterns. The source also includes all ANSI
|
||||
headers it needs (after most of the functions have been used), and
|
||||
the declaration of main() follows the guidelines (but the return
|
||||
type has a different meaning and the arguments are either mis- or
|
||||
unused). There also may be some compiler warnings. These are not
|
||||
bugs, but features. The more warnings, the better the compiler.
|
||||
There wouldn't be any if I had been allowed to use some extra space
|
||||
for prototypes etc.
|
||||
|
||||
Multiple defines are used (but not all of them define), and #define
|
||||
y define is used with #y but the code doesn't assume #y to expand
|
||||
to #define. I have also included comments in the code, and vital
|
||||
code in the comments. And of course there is code that doesn't do
|
||||
anything but will crash the program if it is removed (just like
|
||||
those comments I mentioned above). Additionally, since you said
|
||||
you'd be preprocessing entries ignoring includes I figured I should
|
||||
use some more of them instead of other obfuscation methods. Did
|
||||
I mention that preprocessed or beautified sources will crash or
|
||||
hang your system? The program will also crash on non-ASCII machines.
|
||||
|
||||
The executable needs its source file present in the current directory
|
||||
or, depending on your system, in your path. The name of the source
|
||||
file is not hard-coded, __FILE__ is used instead.
|
||||
|
||||
In the original version which was sent in to the contest, there were
|
||||
some restrictions on the file name:
|
||||
The second letter had to be a lowercase 'r'.
|
||||
The third letter could never be a '+' or a 'b'.
|
||||
Valid names would have been "pr4.c", "pr.c", "prog.c", "brownie.c" etc.
|
||||
My first private version would only run when compiled on a Friday.
|
||||
I decided it would be better this way...
|
||||
These restrictions have been removed for your convenience.
|
||||
|
||||
The following lines describe how this program works; if you don't
|
||||
want to know it at this time, please skip them. If this entry would
|
||||
by some mistake win the contest, please do not rot13 this - I hate
|
||||
rot13'd spoilers since it is somewhat complicated on a Mac to
|
||||
reverse them. Anyone out there should have enough discipline and
|
||||
rot13 shouldn't be required, really. After all, we are no children
|
||||
anymore :-)
|
||||
|
||||
This paragraph is not part of the author's comments, but is a helpful
|
||||
gift from the judges; if you read too fast to stop yourself, this should
|
||||
give you enough time to stop, which you really need to do RIGHT NOW if
|
||||
you don't want to read the spoilers, which really do spoil everything,
|
||||
we mean it.
|
||||
|
||||
The source file needs to be present because the words are read from
|
||||
it. The wordlist is encoded within the source using a 24 entry
|
||||
sliding dictionary where lowercase letters are offsets into the
|
||||
dictionary, uppercase letters are new letters not yet in the
|
||||
dictionary, and all other characters are ignored. The words are
|
||||
spread over six lines in the source; decoding starts on a line
|
||||
after a tab and a whitespace have been found, and stops on a newline.
|
||||
The grin after the "Demonic Smiley" actually is one encoded letter
|
||||
while the string is completely ignored; and the "cut" in "cut here"
|
||||
is required while "here" is not.
|
||||
|
||||
"For extra credit", explain why the words are sorted alphabetically
|
||||
(because I extracted them from a dictionary :-)
|
||||
|
||||
The file name had to fulfill the restrictions mentioned above
|
||||
because __FILE__+1 was used as a second parameter to fopen(). (It
|
||||
essentially was fopen(__FILE__,__FILE__+1) ). This was an extra joke
|
||||
that does no longer exist in the released version.
|
||||
|
||||
You probably discovered that the while(FILE) in main is not a while loop
|
||||
but the statement that opens the file and initializes the dictionary.
|
||||
Similarly, int and signed have been redefined (to save space, of
|
||||
course).
|
||||
|
||||
The main function (the guessing part) is between the last #else..#endif,
|
||||
but still is declared before main(). The 5[O]() in main() calls
|
||||
this function. Similarly, Most indexing operations have been
|
||||
changed to this form; and I tried to write each such operation
|
||||
different.
|
||||
@@ -0,0 +1,18 @@
|
||||
#include <stdio.h>
|
||||
#define PO(o,t)\
|
||||
(((o>64)&&(o<91))?(((t>96)&&(t<123))?(t-32):(t)):(((t>64)&&(t<91))?(t+32):(t)))
|
||||
|
||||
void main() { char *poo= "poot",
|
||||
*Poo="pootpoot" ,O[9];int o,t,T,p;(t=p =0)||(*O='\0');while
|
||||
((o= getc( stdin ))!=( EOF))if ((p== 0)&& (((o>64 )&& (
|
||||
o<91 )) || ((o> 96 ) &&(o< 123) ))) (
|
||||
t!=8 )&&(O [t]= o)&& (O[++ t] = '\0')
|
||||
;else {if (t>7) {for (T = 0 ; T <=7; T++ )
|
||||
printf("%c", PO(*( O+T), *(Poo+ T))); printf
|
||||
("%c", o);}else if (t>3){for (T =0;T<=
|
||||
3;T++) printf
|
||||
("%c", PO(*(O
|
||||
+T),*( poo+T)
|
||||
|
||||
) ) ; printf( "%c" , o ) ; } else printf ( "%s%c" , O , o ) ; ( t = 0 ) || (
|
||||
* O = '\0' ) ; ( o == 60 ) && ( ++p ) ; ( o == 62 ) && (p!=0) && ( --p ) ; } }
|
||||
@@ -0,0 +1,83 @@
|
||||
Best Utility:
|
||||
|
||||
David Lowe
|
||||
Pootpoot
|
||||
67-D Manchester Street
|
||||
San Francisco, CA 94110
|
||||
USA
|
||||
|
||||
http://pootpoot.com/
|
||||
|
||||
|
||||
Judges' Comments:
|
||||
|
||||
To build:
|
||||
|
||||
make dlowe
|
||||
|
||||
To use:
|
||||
|
||||
./dlowe < anyfile > pootfile
|
||||
|
||||
Why is this entry would be considered a utility? Well because it
|
||||
is able to convert content-free web pages into useful web pages.
|
||||
|
||||
To see why, try using an online version, modified for use as
|
||||
a CGI program:
|
||||
|
||||
http://pootpoot.com/poot/pootify?URL=http%3A%2F%2Fwww.microsoft.com
|
||||
|
||||
We are sure that you will find that new web page to make a much
|
||||
more consistent level of quality. :-)
|
||||
|
||||
A CGI script such as:
|
||||
|
||||
#!/bin/sh
|
||||
# pootify - a sample CGI pootifier
|
||||
#
|
||||
POOT="/usr/local/bin/dlowe"
|
||||
LYNX="/usr/local/bin/lynx"
|
||||
ECHO="/usr/bin/echo"
|
||||
EXPR="/usr/bin/expr"
|
||||
${ECHO} "Content-type: text/html"
|
||||
${ECHO}
|
||||
if [ -z "${QUERY_STRING}" ]; then
|
||||
${ECHO} "QUERY_STRING not found"
|
||||
else
|
||||
URL=`${EXPR} "$QUERY_STRING" : '[Uu][Rr][Ll]=\(.*\)'`
|
||||
if [ -z "${URL}" ]; then
|
||||
${ECHO} "No URL given in QUERY_STRING"
|
||||
elif [ X`${EXPR} "${URL}" : '[Ff][Ii][Ll][Ee]:'` != X0 ]; then
|
||||
${ECHO} "file: based URLs are not allowed"
|
||||
else
|
||||
${LYNX} -restrictions=all -source "${URL}" | ${POOT}
|
||||
fi
|
||||
fi
|
||||
|
||||
can be used to pootify web pages.
|
||||
|
||||
For further information see:
|
||||
|
||||
http://pootpoot.com/poot/pootify?URL=http%3A%2F%2Fwww.ioccc.org
|
||||
|
||||
NOTE: The original entry was just a text based pootifier. To build
|
||||
that version try:
|
||||
|
||||
make dlowe.orig
|
||||
./dlowe.orig < anyfile > pootfile
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
This program is a text filter, it reads stdin and outputs the
|
||||
"corrected" text to stdout.
|
||||
|
||||
It is obfuscated in that the code is painful to look at and
|
||||
its purpose and mode of operation are not terribly obvious.
|
||||
More importantly, it is a tool for further obfuscation, in that it
|
||||
can take any text and render it unintelligible.
|
||||
|
||||
Suggested uses: add to your MANROFFSEQ environment variable for man page
|
||||
enjoyment; use it to turn the GPL into the PPL; see what happens when you
|
||||
run perl4 programs after they've been run through it; "encrypt" sensitive
|
||||
(but unnecessary) documents...
|
||||
@@ -0,0 +1,18 @@
|
||||
#include <stdio.h>
|
||||
#define PO(o,t)\
|
||||
(((o>64)&&(o<91))?(((t>96)&&(t<123))?(t-32):(t)):(((t>64)&&(t<91))?(t+32):(t)))
|
||||
|
||||
void main() { char *poo="poot",
|
||||
*Poo="pootpoot" ,O[9],o;int t, T;(t=0)|| (*O='\0');while(
|
||||
(o= getc( stdin ))!=( EOF))if (((o> 64)&&
|
||||
(o< 91)) ||(( o>96 )&&(o <123 ))) (
|
||||
t!=8 )&&(O [t]= o)&& (O[++ t] = '\0')
|
||||
;else {if (t>7) {for (T = 0 ; T <=7; T++ )
|
||||
printf("%c", PO(*( O+T), *(Poo+ T))); printf
|
||||
("%c", o);}else if (t>3){for (T =0;T<=
|
||||
3;T++) printf
|
||||
("%c", PO(*(O
|
||||
+T),*( poo+T)
|
||||
|
||||
) ); printf( "%c", o ) ; } else printf("%s%c", O, o); ( t =0) || (*O='\0'); } }
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
#include<curses.h>
|
||||
#include<stdlib.h>
|
||||
#include<unistd.h>
|
||||
#define E x/Y
|
||||
#define F x%Y
|
||||
#define P( o , O , t ) move ( o + 3 , O + 3 ) ; addch ( t );
|
||||
#define I(n) ( 2 * ( n / ( X + Y ) ) - 1 + ( ( n % ( X + Y ) - X ) < 0 ? 1 :2))
|
||||
#define D(T) switch(I(p)){ case 3:P(2*(X+Y)-1-p,-2,T); break; case 2:P(Y+1,2*X\
|
||||
+ Y-p -1, T); break; case 1:P(p-X, 1 +X, T); break; case 0: P( -2, p, T); }
|
||||
#define R for(x=0; x<X*Y; x++){ P(F,E,(L[E][F]>84)?42:L[E][F]); } move(5+Y,2) \
|
||||
; clrtoeol(); printw("score: %d", s); move(0, 0); clrtoeol() ; refresh() ;
|
||||
|
||||
int main(int t, char *u[]) { char c, *C="POOT", L[99
|
||||
][ 99
|
||||
]; int X, Y, n, x, a, b, A, B, p, s, S ; X = Y= p=
|
||||
s= 0; if (t
|
||||
== 3) { X=
|
||||
atoi ( u[ 1])
|
||||
; Y = atoi(u[2]); } if
|
||||
(X <6
|
||||
|| X > 98|| Y > 98 ||
|
||||
|
||||
Y < 6 ) { X = 15 ; Y = 12; }
|
||||
initscr (); for
|
||||
(x =0; x < X * Y; x++ ){
|
||||
L[ E][F ]=32 ; P
|
||||
(- 1, E, 45
|
||||
); P( Y, E,
|
||||
45 ); P (F,- 1,
|
||||
124 ); P(F, X, 124); } P(
|
||||
-1, -1, 43); P(
|
||||
-1, X, 43) ; P(Y, -1, 43 ) ;
|
||||
|
||||
P(Y,X,43); c=C[random()%4];
|
||||
D(c); R ; for(;
|
||||
; ) { switch (x = getch ()
|
||||
){ case 97 : D(
|
||||
32 ); if (--
|
||||
p< 0) p= (X
|
||||
+Y )*2-1; break; case
|
||||
115 : D(32); if (++p > (X
|
||||
+Y)* 2- 1) p =0
|
||||
; break ; case 100: a = ( (
|
||||
n=I(p))%2)
|
||||
?X +(
|
||||
n/2)*( 1-
|
||||
X) -1
|
||||
:( 1-
|
||||
n)*p+(n/2)*(2*X+Y-1); b = (n%2)?((n/2)?(2* (X
|
||||
+Y )-
|
||||
p-1): (p-X)) :Y+ ((2-n) /2) *(1-Y)-1; if(L [a
|
||||
][ b]
|
||||
!= 32
|
||||
)break ; A
|
||||
=( n%
|
||||
2)?n-2:(n-
|
||||
|
||||
1)*((c%3-1)*-1); B=(n%2)?(n-2)*((c%3-1)*(-1)):(n-1)*-1; D(32); for(; ; ){ P(b,
|
||||
a,32); if((!a)&&A<0)if(!B){ A=0; B=1; } else A*=-1; if((!b)&&B<0)B*=-1; if(( a
|
||||
==(X-1))&&A>0)if(!B){ A=0; B=1; } else A*=-1; if(((b==(Y-1))&&B>0)||(L[a+A][b+
|
||||
B]!=32))break; a+=A; b+=B; P(b,a,c); move(0,0); refresh(); usleep(5000); } ++s
|
||||
; L[a][b]=c; c=C[random()%4]; p=0; f:for(S=1,x=0; x<X*Y; x++)for(A=-1; A<2; ++
|
||||
A)for(B=-1; B<2; ++B)for(n=0; n<4; n++){ a=E+n*A; b=F+n*B; if((!(a<X&&b<Y&&a>=
|
||||
0&&b>=0))||((L[a][b]!=C[n])&&((L[a][b]-9)!=C[n])))break; if(n==3)for(n=0; n<4;
|
||||
n++,S*=2)L[E+n*A][F+n*B]+=9; } if(S>1){ R; sleep(1); s+=S; for(x=0; x<X; x++ )
|
||||
do for(n=0,a=Y-1; a>=0; a--){ if(L[x][a]>84)n=1; if(n)L[x][a]=a>0?L[x][a-1]:32
|
||||
; } while ( n ) ; R ; goto f ; } } D ( c ) ; R ; } }
|
||||
@@ -0,0 +1,107 @@
|
||||
Most Fun:
|
||||
|
||||
David Lowe Neil Mix
|
||||
Pootpoot Pootpoot
|
||||
67-D Manchester Street 1490 Sacramento Street #4G
|
||||
San Francisco, CA 94110 San Francisco, CA 94110
|
||||
USA USA
|
||||
|
||||
http://pootpoot.com/
|
||||
|
||||
|
||||
Judge's Comments:
|
||||
|
||||
To build:
|
||||
|
||||
make dloweneil
|
||||
|
||||
To use:
|
||||
|
||||
./dloweneil
|
||||
|
||||
Read the the Author's comments below. We believe that your experience
|
||||
may mirror one of our experiences:
|
||||
|
||||
Originally, I didn't appreciate the game. Then I actually read the
|
||||
description of the controls. I started playing. I struggled.
|
||||
I spelled my first "poot". I was hooked ...
|
||||
|
||||
|
||||
Selected Author's comments:
|
||||
|
||||
Usage:
|
||||
pootris [X size of board] [Y size of board]
|
||||
|
||||
Synopsis:
|
||||
The object of this game is to spell "POOT" as much as possible. There
|
||||
is no time pressure. You're given one letter at a time (sort of randomly
|
||||
chosen from the set 'P', 'O', and 'T') and you get to move it freely
|
||||
around the border of the playing board, and decide when and where to drop
|
||||
it into the board. Sound easy? Of course, there's a catch...
|
||||
|
||||
Controls:
|
||||
. Only three controls:
|
||||
'a' moves the current letter one position counterclockwise around
|
||||
the border of the playing field.
|
||||
's' moves the current letter one position clockwise around the border
|
||||
of the playing field.
|
||||
'd' drops the current letter onto the board.
|
||||
. To quit, send a fatal signal to the process.
|
||||
|
||||
Rules of motion:
|
||||
. The different letters move in different directions once dropped onto
|
||||
the board:
|
||||
'P' moves diagonally, at a 45 degree angle and in a clockwise
|
||||
direction around the board once dropped.
|
||||
'O' moves in a straight line perpendicular to the border from which
|
||||
it is dropped.
|
||||
'T' moves diagonally, at a 45 degree angle and in a counterclockwise
|
||||
direction around the board once dropped.
|
||||
. The letters bounce off the top and sides of the board. They bounce
|
||||
in a 'natural' way, with the exception that 'O's will fall straight
|
||||
down if they hit a side wall.
|
||||
. The letters stop when they hit another letter or the bottom of the
|
||||
board.
|
||||
|
||||
Rules of spelling:
|
||||
. When you spell 'POOT' on the board, in any direction, the letters
|
||||
comprising the word will disappear, and any letters which may have
|
||||
accumulated above the disappeared letters will 'fall'.
|
||||
. Letters can be used in multiple spellings of 'POOT'.
|
||||
. Chain reactions are possible.
|
||||
|
||||
Rules of scoring:
|
||||
. You get one (1) point for each letter you drop onto the board.
|
||||
. You get a bunch of points for spelling 'POOT'. More if you spell
|
||||
it in more than one way simultaneously.
|
||||
|
||||
Some of the obfuscations:
|
||||
. Several different coordinate systems are used. There's the "real" X
|
||||
by Y system used for curses, the "inside the box" X by Y system used
|
||||
for moving things around and finding instances of "POOT" inside the
|
||||
box, and the position of the current letter, which is a single value
|
||||
from 0 to 2 * xsize + 2 * ysize - 1.
|
||||
. The fact that x%3 is a perfect hash function for x values 'P', 'O'
|
||||
and 'T' is used.
|
||||
. Of course, the code is as hideous as possible, and spells poot for
|
||||
fun (It's also exactly 3217 bytes in length, with exactly 1536
|
||||
counted characters for purposes of this contest.)
|
||||
. Love that modulus operator! Mmmm...
|
||||
. There are some equations used which are really unnecessarily ugly,
|
||||
which served the dual purposes of compacting the code and making it
|
||||
trickier to understand. I'm thinking of the equations used to convert
|
||||
between coordinate systems when dropping pieces into the game board.
|
||||
. Simple and silly ones: short, meaningless (and sometimes misleading
|
||||
(see 'x')) variable names; hard-coded ASCII numeric values used for
|
||||
character constants; using goto for fun and profit; reusing and
|
||||
re-purposing variables in different places.
|
||||
. The game itself is simple, but still weird and quite difficult.
|
||||
|
||||
Some things I wish I could have fit into this, but didn't have the space:
|
||||
. Seeding the random number generator (doh!)
|
||||
. Something to detect when the game is over.
|
||||
. Some kind of scoreboard.
|
||||
. Sound.
|
||||
. Some way of quitting gracefully.
|
||||
|
||||
Good Luck!
|
||||
@@ -0,0 +1,18 @@
|
||||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
|
||||
main()
|
||||
{
|
||||
char*O,l[999]="'`acgo\177~|xp .-\0R^8)NJ6%K4O+A2M(*0ID57$3G1FBL";
|
||||
while(O=fgets(l+45,954,stdin)){
|
||||
*l=O[strlen(O)[O-1]=0,strspn(O,l+11)];
|
||||
while(*O)switch((*l&&isalnum(*O))-!*l){
|
||||
case-1:{char*I=(O+=strspn(O,l+12)+1)-2,O=34;
|
||||
while(*I&3&&(O=(O-16<<1)+*I---'-')<80);
|
||||
putchar(O&93?*I&8||!(I=memchr(l,O,44))?'?':I-l+47:32);
|
||||
break;
|
||||
case 1: ;}*l=(*O&31)[l-15+(*O>61)*32];
|
||||
while(putchar(45+*l%2),(*l=*l+32>>1)>35);
|
||||
case 0: putchar((++O,32));}
|
||||
putchar(10);}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
Obsolescent Feature:
|
||||
|
||||
Frans van Dorsselaer
|
||||
Bakker Industrial Automation
|
||||
Kaiserstraat 35
|
||||
NL-2311 GP Leiden
|
||||
The Netherlands
|
||||
|
||||
|
||||
Judges' comments:
|
||||
|
||||
To build:
|
||||
|
||||
make dorssel
|
||||
|
||||
To use:
|
||||
|
||||
echo Simple as 123 | ./dorssel
|
||||
echo '.... --- .-- -.. --- . ... .. - -.. --- - .... .- -'|./dorssel
|
||||
|
||||
How does the program decide which way to convert?
|
||||
|
||||
What obsolescent feature are we talking about? (No, it's not a
|
||||
C language feature.)
|
||||
|
||||
The author suggests that you try to answer the following questions:
|
||||
|
||||
- Which character in the initializing string is totally irrelevant?
|
||||
- Which two relevant characters in the initializing string may be
|
||||
exchanged without altering the behavior?
|
||||
- Which characters in the initializing string are somewhat irrelevant,
|
||||
and to what values may they be changed without altering the behavior?
|
||||
- Which characters may be used to enlarge the initializing string by
|
||||
one without altering the behavior ?
|
||||
|
||||
Extra credit: Change the program so that it does not SHOUT IN ALL CAPS.
|
||||
|
||||
You might also want to read the dorssel.hint2 file.
|
||||
|
||||
|
||||
Selected author's notes:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
This program converts ASCII to Morse code, and vice versa.
|
||||
|
||||
The program reads in lines from standard input and writes its result to
|
||||
standard output. The direction of conversion is determined on a per
|
||||
line basis. Each line must consist of a maximum of 952 characters
|
||||
followed by a new line character, they must not contain any NUL
|
||||
characters. Otherwise, some characters may be lost in the conversion.
|
||||
|
||||
- Encoding to Morse code:
|
||||
The program knows the Morse codes for all Latin letters (a-z, case
|
||||
insensitive) and decimal digits (0-9). Any other characters are
|
||||
replaced by an ASCII space ' '. Morse code per converted character is
|
||||
written as a sequence of '.' and '-' characters, each sequence
|
||||
followed by a space.
|
||||
|
||||
- Decoding from Morse code:
|
||||
Morse code should be typed as sequences of '.' and '-' characters,
|
||||
separated by a space. Extra spaces will be echoed back (to separate
|
||||
words). Unknown sequences will be converted to a '?' character.
|
||||
|
||||
Notes
|
||||
=====
|
||||
|
||||
The program assumes both source and execution character sets to be
|
||||
ASCII. As far as I can tell, the program is conforming and does not
|
||||
invoke undefined behavior.
|
||||
|
||||
Hints
|
||||
=====
|
||||
|
||||
- Try
|
||||
|
||||
./dorssel < dorssel.c | ./dorssel
|
||||
|
||||
to see what variables, numbers, and functions are used. (Does a
|
||||
better job than most C beautifiers).
|
||||
|
||||
- Filter your text twice (as in the previous sample) to obtain a version
|
||||
of your text that can be reversibly morsified, i.e.
|
||||
|
||||
./dorssel | ./dorssel | ./dorssel | ./dorssel
|
||||
|
||||
is the same as
|
||||
|
||||
./dorssel | ./dorssel
|
||||
|
||||
- The file "dorssel.hint2" contains all the information needed to
|
||||
understand this program. For an obfuscated spoiler, try
|
||||
|
||||
./dorssel < dorssel.hint2
|
||||
@@ -0,0 +1,184 @@
|
||||
Morse codes for letters and digits use sequences of 1 to 5 (inclusive)
|
||||
Morse symbols (denoted as '.' or '-'), e.g.
|
||||
|
||||
E .
|
||||
Z --..
|
||||
3 ...--
|
||||
|
||||
(BTW: digits always have 5 symbols, letters 1 to 4. I didn't use this fact)
|
||||
|
||||
Of course we can encode these symbols with bits in a byte. I chose '-'
|
||||
to be a bit set to 0, '.' to be a bit set to 1. Characters in C are at
|
||||
least 8 bits, but they are either signed or unsigned. To be portable,
|
||||
I've used only values from 0 to 127 (inclusive) (both in the encoding
|
||||
of Morse codes, as well as in subexpressions in the program). Hence we
|
||||
can use type char (using unsigned char for an extra bit would have made
|
||||
the source code excessively large ;-)
|
||||
|
||||
The least significant bit contains the first symbol of a Morse code, so
|
||||
we have
|
||||
|
||||
E > 0......1
|
||||
Z > 0...1100
|
||||
3 > 0..00111
|
||||
|
||||
The dots have still to be determined. But we also need to encode the
|
||||
length of the sequence. Since there are only 4 different kind of lengths,
|
||||
two bits would suffice, e.g.
|
||||
|
||||
E > 000....1
|
||||
Z > 010.1100
|
||||
3 > 01100111
|
||||
|
||||
That means bits 6 and 5 set to 00 is length 1, set to 01 is length 2, etc.
|
||||
But this would mean that we would have to extract the length into a
|
||||
counter before shifting out each symbol, such as
|
||||
|
||||
length = (encoding & 96) >> 5;
|
||||
do {
|
||||
putchar(encoding & 1 ? '-' : '.');
|
||||
encoding >>= 1;
|
||||
} while (length--);
|
||||
|
||||
We can also use the remaining bits to *include* the counter
|
||||
|
||||
length 1: 00000.1x E > 00000.11
|
||||
length 2: 0000.1xx
|
||||
length 3: 000.1xxx
|
||||
length 4: 00.1xxxx Z > 00.11100
|
||||
length 5: 0.1xxxxx 3 > 0.100111
|
||||
|
||||
With 1 bit still to be chosen freely (let's assume it is 0). Now we can do
|
||||
|
||||
do {
|
||||
putchar(encoding & 1 ? '-' : '.');
|
||||
encoding >>= 1;
|
||||
while (encoding > 1);
|
||||
|
||||
As you see, the encoded Morse sequence can be the counter itself. But
|
||||
this is not very pleasant, as some Morse sequences will end up having
|
||||
an ASCII value < 32, i.e. they will be control codes. This would make
|
||||
the initializing (encoding) string awkward. Hence I came up with the
|
||||
following
|
||||
|
||||
length 1: 0010010x E > 00100101 (= '%')
|
||||
length 2: 001010xx
|
||||
length 3: 00110xxx
|
||||
length 4: 0100xxxx Z > 01001100 (= 'L')
|
||||
length 5: 011xxxxx 3 > 01100111 (= 'g')
|
||||
|
||||
Notice these encodings in the initialization string. Only the coding for
|
||||
'5' needs an escape (5 = ..... > 01111111 = '\177'). The way the length
|
||||
is encoded still allows the encoding to be its own counter:
|
||||
|
||||
do {
|
||||
putchar(encoding & 1 ? '-' : '.');
|
||||
encoding = (encoding + 32) >> 1;
|
||||
} while (encoding > 35);
|
||||
|
||||
The last shift will always result in 00100010, hence the test for >35.
|
||||
Note that the calculation for the next value of `encoding' is done at int
|
||||
precision, so that the actual value of the char remains <= 127.
|
||||
|
||||
The character '-' (ASCII 45) and '.' (ASCII 46) are conveniently in
|
||||
sequence, so the putchar can simply be
|
||||
|
||||
putchar(45 + encoding % 2);
|
||||
|
||||
I used the modulo operator this time, because '+' takes precedence over '&'.
|
||||
The assignment can be incorporated into the while control test, and a
|
||||
do-while loop with a body of a single expression statement can be written
|
||||
as a while loop with a comma operator in the test:
|
||||
|
||||
while(putchar(45 + encoding % 2), encoding = encoding + 32 >> 1);
|
||||
|
||||
Voila.
|
||||
|
||||
Now, the decoding of Morse codes is just the reverse. We shift in 0's
|
||||
and 1's as we scan the line. But: we have to scan from back to front
|
||||
(the left most Morse symbol is in the least significant bit, and thus
|
||||
has to shifted in last). The test for the scanning while loop must
|
||||
stop when there are no more '.' or '-' on the left. Hence we need a
|
||||
terminating character in front of the line. The input line is read one
|
||||
past the encoding string (into the same character array) the terminating
|
||||
character for the reverse scan is therefore provided by the implicit '\0'
|
||||
of the array initializer ! The test also stops when at most 5 symbols
|
||||
have been shifted in.
|
||||
|
||||
The encoded character is then looked up in the encoding string with
|
||||
memchr (why memchr is explained later). Either a '?' (when there are
|
||||
more than 5 consecutive Morse symbols, or if the sequence is unknown)
|
||||
or the decoded character is printed. Or a ' ' if there was an extra
|
||||
space in the source line. Note the use of "or" in these last sentences,
|
||||
as they explain the use of the conditional operator.
|
||||
|
||||
The strspn calls need either " .-" or ".-" as argument. Of course they
|
||||
are overlapped. I put these strings between the encodings for digits
|
||||
and letters. This is OK, since neither of these characters, or the '\0',
|
||||
is a valid encoding ! We must, however, use memchr instead of strchr in
|
||||
the decoding lookup because of this '\0'. Since it is far more obscure
|
||||
this way, I hope you'll forgive me.
|
||||
|
||||
The outline of the program is roughly as follows
|
||||
|
||||
while (more lines) {
|
||||
if (line is in morse) {
|
||||
while (more characters) {
|
||||
skip next sequence
|
||||
if (' ')
|
||||
putchar(' ');
|
||||
else
|
||||
decode_sequence; /* backwards */
|
||||
}
|
||||
} else {
|
||||
while (more characters) {
|
||||
if (isalnum)
|
||||
encode_character;
|
||||
putchar(' ');
|
||||
}
|
||||
}
|
||||
|
||||
Because of the *two* while(more characters) loops are the same, I've
|
||||
exchanged the if(line is in morse) and the two while loops (so there
|
||||
is *single* while loop). However, we must now store the if(line is in
|
||||
morse) test for efficiency (it would be stupid to test the entire line
|
||||
for every character). This is done in l[0] ! (the first encoding is
|
||||
thus in l[1]). The memchr decoding lookup is not disturbed, because the
|
||||
test is always 0 for Morse lines, and '\0' is not a possible encoding.
|
||||
l[0] is also used as the temporary shift character while encoding a
|
||||
line of text. This does not disturb the if (line is in morse) test,
|
||||
as the temporary l[0] will remain != 0.
|
||||
|
||||
I've put the if's in the above layout into a single switch. Hope you don't
|
||||
mind ;-)
|
||||
|
||||
Summary of the use of l[999]:
|
||||
|
||||
l[0] result of "is this line in morse" test
|
||||
l[0] temporary shift during encoding
|
||||
l[0] - l[33] Morse codings (letters and digits, plus garbage)
|
||||
l[11] - l[14] strspn argument
|
||||
l[12] - l[14] strspn argument
|
||||
l[34] terminator for backward decoding
|
||||
l[35] - l[998] input line
|
||||
|
||||
*****
|
||||
|
||||
Selected notes:
|
||||
- We don't need to declare isalnum() (or include ctype.h) as its implicit
|
||||
declaration is correct (int argument, int result). This is not so for
|
||||
strlen(), strspn(), and memchr() as they use size_t.
|
||||
- During development, my gcc 2.7.2.3 had an internal compiler error (signal
|
||||
6) on code that was correct !
|
||||
- lclint 2.4b thinks that "the observer is modified" a couple of times,
|
||||
whereas it is not. Well, it is, but there is a sequence point in between.
|
||||
- lclint 2.4b parses line 13 as <error>, whereas it is correct code.
|
||||
- lclint 2.4b is positive the second while loop is infinite, whereas it is
|
||||
not.
|
||||
|
||||
*****
|
||||
|
||||
.. - .... .. -. -.- - .... .. ... ... .--. --- .. .-.. . .-. .. ... -- --- .-. . --- -... ..-. ..- ... -.-. .- - . -.. - .... .- -. - .... . .--. .-. --- --. .-. .- --
|
||||
|
||||
. -..- . .-. -.-. .. ... .
|
||||
-.-. .... .- -. --. . - .... . .--. .-. --- --. .-. .- -- ... --- .. - -.. --- . ... -. --- - ... .... --- ..- -
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#define l #define
|
||||
#define p(p) l p b ( m p u X )
|
||||
|
||||
l i int
|
||||
l n struct n
|
||||
l x ){ return (
|
||||
l A ->
|
||||
l N n*
|
||||
|
||||
n { i c ; N L ; N R ; N U ; N ( * F ) ( N ) ; } ;
|
||||
|
||||
l F A F
|
||||
l U A U
|
||||
l R A R
|
||||
l L A L
|
||||
l m q = malloc(sizeof * q ) Z F =
|
||||
l e z F ( p ) ) ; }
|
||||
l f e N
|
||||
l g z L Q s f
|
||||
l h ( N p x
|
||||
l H h p L U Q
|
||||
l s R z R = q
|
||||
l t ) ? p : (
|
||||
l z , p
|
||||
l Z , q
|
||||
l Q = p
|
||||
l w ! p U t p U L Q z Q U ,
|
||||
l D W p R U = 0 z R Q R F ( p R ) z R F != E t
|
||||
l W h w
|
||||
l X z = q , 0
|
||||
l V w p F = v z L Q
|
||||
l O m o Z L Q
|
||||
l M m E Z A c =
|
||||
l r Z R Q
|
||||
l u Z U Q
|
||||
l a ) ) ) ? 0 : j ( !
|
||||
l k ( i c x
|
||||
l y 0 ) ; } i
|
||||
|
||||
N q ; N
|
||||
o H z Q L f
|
||||
v H U z Q L f
|
||||
K W V L R f
|
||||
J W V R f
|
||||
I h V R f
|
||||
#if 0
|
||||
Y W q Q g
|
||||
#endif
|
||||
S W w w O L L R r s , O L R r R R g
|
||||
E D p F Q L A c - p R A c ? J : K f
|
||||
P D w putchar ( p L R A c ) , m I g
|
||||
G W M getchar ( ) g
|
||||
p ;
|
||||
|
||||
i j k c ? O U r u U U X : y b k y d k y
|
||||
|
||||
l d(d) ( ( d a b
|
||||
l b(b) ( ( b a d
|
||||
l E(E) b ( M E u X )
|
||||
|
||||
main k i ) ! (
|
||||
|
||||
p (I)
|
||||
p (J)
|
||||
p (K)
|
||||
#if 0
|
||||
p (Y)
|
||||
#endif
|
||||
p (P)
|
||||
p (G)
|
||||
|
||||
p (S)
|
||||
l B b (S (K S) K)
|
||||
l SS b (B (B S) B)
|
||||
l C b (SS B S (K K))
|
||||
l CC b (B (B C) B)
|
||||
l BB b (CC B (B B B) B)
|
||||
|
||||
l Y b (S (C B (S I I)) (C B (S I I)))
|
||||
|
||||
l CI b (C I)
|
||||
|
||||
l ef E(EOF)
|
||||
l sp E(' ')
|
||||
l ob E('(')
|
||||
l cb E(')')
|
||||
l lm E('\\')
|
||||
l nl E('\n')
|
||||
l ht E('\t')
|
||||
l qs E('S')
|
||||
l qk E('K')
|
||||
l qi E('I')
|
||||
|
||||
l pair b (BB (B (B K)) C CI)
|
||||
l atom b (B K CI)
|
||||
|
||||
l bind b (CC B B C)
|
||||
|
||||
l ore b (SS (CI K))
|
||||
l gns b (Y (B (bind G) (CC S (C (ore sp (ore nl ht))) CI)))
|
||||
|
||||
l pr b (Y (CC C (BB CI (B (BB (bind (P ob)) K)) (SS C (CC C (BB BB bind) K) (C (CC bind) (K (P cb))))) P))
|
||||
|
||||
l trans b (Y (B (bind gns) (S (BB S (C lm) lam) (C (BB S (C ob) brac) (S (C cb (CI (atom sp))) (S (C ef (CI (atom sp))) (B CI atom)))))))
|
||||
|
||||
l brac b (S bind (B Y (C (BB B B bind) (S (BB S (BB S (S I)) (CC (BB (B K)) (BB K) pair)) (CC S (CC BB (BB C (C (CI sp)) CI)) pair)))))
|
||||
|
||||
l lam b (B (bind gns) (C (CC BB bind (B CI)) abs))
|
||||
|
||||
l abs b (Y (C (BB S (BB C CI) (SS S (BB C (BB B opt)) I)) (CC S (C C (atom qi)) (B (pair (atom qk)) atom))))
|
||||
|
||||
l make b (B pair (pair (atom qs)))
|
||||
|
||||
l opt b (S (S I (S (BB (CC B) CI (BB K K make)) (S (BB C (BB C (C (CI qk))) (SS (SS S) (S (BB (BB (S I)) S (BB (BB (CC B) CI) (BB K K) make)) (B (CC B (BB (CC C) (BB (C (CI qk)) (pair (atom qk))) pair)) make)) (B (C (BB B C (C (CI qi)))) make))) make))) (B K make))
|
||||
|
||||
(bind (bind trans pr) (P nl) I)
|
||||
|
||||
e
|
||||
+388
@@ -0,0 +1,388 @@
|
||||
Most Obfuscated Translator:
|
||||
|
||||
Tony Finch
|
||||
Demon Internet
|
||||
322 Regent's Park Road
|
||||
Finchley
|
||||
London N3 2QQ
|
||||
United Kingdom
|
||||
|
||||
http://www.inch.demon.co.uk/
|
||||
|
||||
|
||||
Judges' comments:
|
||||
|
||||
To build:
|
||||
make fanf
|
||||
|
||||
Some systems may have problems building this entry because
|
||||
of the system resources can require.
|
||||
|
||||
To use:
|
||||
Enter an expression on standard input. Here are some
|
||||
sample expressions that you can use:
|
||||
|
||||
((\a(\b(\c(d)))) e)
|
||||
|
||||
|
||||
(\f\g\x
|
||||
(
|
||||
(g x) (f x)
|
||||
) K K z
|
||||
)
|
||||
|
||||
|
||||
(\f(\f\g\x( (f((\a(g(b))) e)) (g x) ) K K z))
|
||||
|
||||
|
||||
(Y\f\n
|
||||
((= n 0)
|
||||
1
|
||||
(* n (f (- n 1)))
|
||||
)
|
||||
)
|
||||
|
||||
This program translares lambda expressions into combinator
|
||||
expressions. But you do not need to know Lambda Calculus to be
|
||||
impressed by this program!
|
||||
|
||||
See the file:
|
||||
|
||||
fanf.lambda
|
||||
|
||||
for more examples of lambda calculus source.
|
||||
|
||||
Notice how large the code grows from the fanf.c into the final
|
||||
fanftmp2.c C program. Take a look at that final C program again,
|
||||
can you begin to understand what it is doing?
|
||||
|
||||
Look at the first stage of the C pre-processing:
|
||||
|
||||
gcc -ansi fanf.c -E > fanftmp1.c
|
||||
|
||||
Skip to the bottom of fanftmp1.c (after all of the #include header
|
||||
stuff ... look for a line of the form: # 2 "fanf.c" near the bottom)
|
||||
and look at the resulting code. This code, when C pre-processed
|
||||
will expand into over 342 times the original code (ignoring #include
|
||||
headers) to produce fanftmp2.c. That program in turn, when compiled
|
||||
translates a single lambda expression on standard input into
|
||||
combinator expressions on standard output.
|
||||
|
||||
Extra credit question:
|
||||
|
||||
What do you have to do to make this program work with an
|
||||
old non-ANSI C preprocessor?
|
||||
|
||||
|
||||
Selected Author's comments:
|
||||
|
||||
My program is a demonstration of some practical applications of
|
||||
theoretical computer science. The application it implements is a program
|
||||
for translating lambda expressions into combinator expressions.
|
||||
|
||||
|
||||
What the program does
|
||||
=====================
|
||||
|
||||
The syntax of lambda expressions recognised by the program is as
|
||||
follows: The basic atoms are variables which are single characters other
|
||||
than backslash or parentheses, e.g. `a' or `b' or `@'. Variables are
|
||||
combined by function application which is written e.g. `(f a)' which is
|
||||
the function `f' applied to the argument `a'. Application groups to the
|
||||
left, so `(f a b c)' is equivalent to `(((f a) b) c)'. Functions are
|
||||
created from lambda terms which are written in the form `\a(expr)' which
|
||||
is the function taking argument `a' and having value `expr'. Lambda is
|
||||
spelt `\' because ASCII isn't good enough. Lambda binds tightly, so
|
||||
`\a\bcd' is equivalent to `((\a(\b(c))) d)'. Whitespace is ignored.
|
||||
|
||||
For example, the identity function, called `I', is written `\x(x)'. A
|
||||
simple expression is `(I a)' which is equivalent to `(\x(x) a)', which
|
||||
has the value `a'. Another function called `K' is defined as `\x\y(x)'
|
||||
and it evaluates as follows:
|
||||
|
||||
K p q
|
||||
-> \x\y(x) p q
|
||||
-> \y(p) q
|
||||
-> p
|
||||
|
||||
Another function of interest is `S', defined as `\f\g\x((f x) (g x))'.
|
||||
My program demonstrates the fact that any lambda expression can be
|
||||
translated into an equivalent "combinator expression" which involves
|
||||
only `S', `K', `I' (the combinators), and application, with no
|
||||
variables or lambda abstractions. In fact, even `I' is unnecessary,
|
||||
since it is equivalent to `S K K':
|
||||
|
||||
I z
|
||||
-> \a(a) z
|
||||
-> z
|
||||
|
||||
S K K z
|
||||
-> \f\g\x((f x) (g x)) K K z
|
||||
-> (K z) (K z)
|
||||
-> \x\y(x) z (K z)
|
||||
-> z
|
||||
|
||||
The algorithm for translating lambda expressions into combinator
|
||||
expressions works as follows. There are three forms of lambda expression
|
||||
to consider: variables, applications, and abstractions.
|
||||
|
||||
trans `v' -> `v' (variable)
|
||||
trans `a b' -> (trans `a') (trans `b') (application)
|
||||
trans `\ab' -> abs a (trans `b') (abstraction)
|
||||
|
||||
There are a further three cases to consider for the body of lambda
|
||||
expressions, where we need to do the magic that transforms away the
|
||||
variables.
|
||||
|
||||
abs a `f x' -> `S' (abs a `f') (abs a `x')
|
||||
abs a `b' -> `K b' (b != a)
|
||||
abs a `a' -> `I'
|
||||
|
||||
E.g. suppose we had combinator expressions for `+' and `3' and we wanted
|
||||
to see what the combinator expression for doubling 3 looked like:
|
||||
|
||||
trans `\x(+ x x) 3'
|
||||
-> (trans `\x(+ x x)') (trans `3')
|
||||
-> (abs x (trans `+ x x')) `3'
|
||||
-> (abs x `+ x x') `3'
|
||||
-> `S' (abs x `+ x') (abs x `x') `3'
|
||||
-> `S' (`S' (abs x `+') (abs x `x')) `I' `3'
|
||||
-> `S' (`S' (`K +') `I') `I' `3'
|
||||
-> `S (S (K +) I) I 3'
|
||||
|
||||
We can then check that this evaluates to the expected result:
|
||||
|
||||
S (S (K +) I) I 3
|
||||
-> S (K +) I 3 (I 3)
|
||||
-> K + 3 (I 3) (I 3)
|
||||
-> + (I 3) (I 3)
|
||||
-> + 3 3
|
||||
|
||||
It is possible to perform a slightly more compact translation with a
|
||||
couple of simple optimisations. For example, note that `K (a b)' is the
|
||||
same as `S (K a) (K b)', because
|
||||
|
||||
K (a b) x
|
||||
-> a b
|
||||
|
||||
and
|
||||
|
||||
S (K a) (K b) x
|
||||
-> K a x (K b x)
|
||||
-> a b
|
||||
|
||||
Also, `S (K a) I' is the same as just `a' because
|
||||
|
||||
S (K a) I x
|
||||
-> K a x (I x)
|
||||
-> a x
|
||||
|
||||
The program simply reads a lambda expression from the standard input,
|
||||
translates it into a combinator expression using the transformation and
|
||||
optimisations described above, and prints out the result.
|
||||
|
||||
|
||||
Why this is a practical application
|
||||
===================================
|
||||
|
||||
Combinator expressions are easier to evaluate than lambda expressions
|
||||
because there are no problems with variables. For example, if I naively
|
||||
evaluated the expression `\x\y(x y) y' I might get `\y(y y)' which is
|
||||
not the same as the correct result because the first `y' in the body
|
||||
should refer to a global `y' rather than the local one. David Turner was
|
||||
the first person to realise that because of this fact, SK combinators
|
||||
provide a simple way to implement non-strict functional programming
|
||||
languages, either in software or directly in hardware.
|
||||
|
||||
My program demonstrates this by being based on a combinator evaluation
|
||||
engine which is used to implement a language called "OFL" (pronounced
|
||||
like "offal" and short for "Obfuscated Functional Language"). I then
|
||||
used OFL to implement all the high-level functionality described above.
|
||||
This contributes a lot to the obfuscation because even small amounts of
|
||||
OFL are quite unpalatable, and large expressions are completely
|
||||
incomprehensible.
|
||||
|
||||
It is fairly well known that the lambda calculus (and hence SK
|
||||
combinators) can compute anything, but mere computation is no use if you
|
||||
cannot communicate with the world. This is why OFL includes a few
|
||||
concessions to reality: a combinator `E' for representing characters and
|
||||
testing them for equality, two IO combinators, `G' and `P', for reading
|
||||
and writing characters respectively, and a combinator `J' for
|
||||
representing "false". I also implemented the `Y' combinator directly
|
||||
rather than in terms of the primitive combinators, since it only
|
||||
required five characters to do so (viz. `Y W q Q g'). However this code
|
||||
is not enabled because the definition of Y in terms of other combinators
|
||||
is more cute.
|
||||
|
||||
The `E' combinator comes in a large number of forms, one for each
|
||||
character and one for end of file. It is written `E(c)' for the variant
|
||||
of `E' corresponding to the character `c'. An expression of the form
|
||||
`E(c) x' is evaluated by first evaluating `x'. If `x' doesn't evaluate
|
||||
to some form of `E', then evaluation of the expression terminates. If
|
||||
`x' evaluates to `E(c)', then the expression evaluates to `K'. If `x'
|
||||
evaluates to `E(d)' (where `d' is a different character to `c'), then
|
||||
the expression evaluates to `J'.
|
||||
|
||||
`K' and `J' are used to represent "true" and "false" respectively; they
|
||||
correspond exactly to the standard lambda calculus representations of
|
||||
true and false, viz. `\t\f(t)' and `\t\f(f)' respectively. In this way a
|
||||
conditional expression can just be written `cond then else', which is
|
||||
even more terse than C's `cond ? then : else'. An expression that
|
||||
compares a character with `a', say, can be written in the rather
|
||||
obfuscated form `E('a') char then else'.
|
||||
|
||||
The `P' combinator, like the `E' combinator, starts off by evaluating
|
||||
its first argument and checking that it is some form of `E'. It then
|
||||
writes that character on stdout, and finally it calls its second
|
||||
argument as a function with the argument `I', i.e.
|
||||
P x f -> f I
|
||||
with a side-effect.
|
||||
|
||||
The `G' combinator just reads a character from stdin then calls its
|
||||
argument as a function with the appropriate `E' combinator as an
|
||||
argument, i.e.
|
||||
G f -> f E(c)
|
||||
with a side-effect.
|
||||
|
||||
One of the problems with non-strict languages is that it is hard to
|
||||
predict in advance in which order side-effects will occur. In my program
|
||||
I used a monadic IO structure like that used by the programming language
|
||||
Haskell; this allows one to write programs that manipulate external
|
||||
state in a manner remarkably similar to imperative programming languages
|
||||
like C. An examination of my program should provide an illustration of
|
||||
how well this technique works in practice. (In particular, I used the
|
||||
CPS form of the IO monad from page 6 of "Imperative Functional
|
||||
Programming".)
|
||||
|
||||
The `Y' combinator is used for implementing recursive functions. It has
|
||||
the evaluation rule
|
||||
Y f -> f (Y f)
|
||||
so that it can be used to call a function with itself as an argument.
|
||||
For example, if I had the appropriate arithmetic operators defined, I
|
||||
could write a factorial function in the lambda calculus like this:
|
||||
Y \f\n((= n 0) 1 (* n (f (- n 1))))
|
||||
|
||||
OFL provides a facility for naming expressions so that they can be used
|
||||
more than once without writing them in full. A definition must be written
|
||||
on one line in the form `l name b expression' where `l' is short for
|
||||
"let" and `b' is short for "be". Names must be more than one character
|
||||
long. A complete OFL program starts off by defining the primitives it
|
||||
will use with likes of the form `p (S)' etc., then goes on to define the
|
||||
names it will use, and finishes off with the main expression followed by
|
||||
a single `e' short for "end". OFL expressions must use the minimum
|
||||
number of brackets needed to be unambiguous, except that the whole
|
||||
expression must be surrounded by brackets.
|
||||
|
||||
OFL has a standard library which adds another five combinators to the
|
||||
basic eight. These combinators provide greater scope for optimisation
|
||||
when translating an expression from the lambda calculus to combinators,
|
||||
and therefore more compact programs. Their evaluation rules are:
|
||||
|
||||
B f g x -> f (g x)
|
||||
C f g x -> (f x) g
|
||||
BB c f g x -> c (f (g x))
|
||||
CC c f g x -> c (f x) g
|
||||
SS c f g x -> c (f x) (g x)
|
||||
|
||||
I used them to help fit my program into the required space; unfortunately
|
||||
I couldn't fit the version that fully optimises the lambda expressions
|
||||
it reads into the required space. The complete optimisation rules
|
||||
including the ones it doesn't use are:
|
||||
|
||||
S (K p) I -> p
|
||||
S (K p) (K r) -> K ( p r )
|
||||
S (K p) (B r s) -> BB p r s
|
||||
S (K p) r -> B p r
|
||||
S (B p q) (K r) -> CC p q r
|
||||
S p (K r) -> C p r
|
||||
S (B p q) r -> SS p q r
|
||||
S p r -> S p r
|
||||
|
||||
|
||||
The implementation of OFL
|
||||
=========================
|
||||
|
||||
Although OFL has completely different syntax and semantics to C, all you
|
||||
need to compile OFL programs is a C compiler and a header file (which in
|
||||
my entry to the competition has been included in-line). The header file
|
||||
implements a two-pass optimising compiler which produces a representation
|
||||
of the program that is then interpreted.
|
||||
|
||||
The first pass of the compiler is implemented via the C preprocessor. It
|
||||
implements one optimisation, namely function in-lining. Unfortunately,
|
||||
this optimisation always increases object code size and execution time.
|
||||
The opposite optimisation, common sub-expression elimination, (which
|
||||
would offer improvements in code size and execution time) has not been
|
||||
implemented. The output of this pass is a C program that may be compiled
|
||||
by a normal C compiler.
|
||||
|
||||
The second pass is performed by the initialisation phase of the C
|
||||
program. It builds a data structure representing the abstract syntax
|
||||
tree of the program.
|
||||
|
||||
The program is then executed by an interpreter. This operates by
|
||||
performing manipulations on the AST that correspond to the evaluation
|
||||
rules of the combinators that I described above.
|
||||
|
||||
The first 54 lines of the program are mostly the interpreter; the next 8
|
||||
lines are pass one of the compiler; the next nine declare the OFL
|
||||
primitives; the next five define the OFL standard library; and the rest
|
||||
implement the application described in the first part of this document.
|
||||
This part of the program is transformed into the second pass of the
|
||||
compiler by the first pass of the compiler.
|
||||
|
||||
The first pass of the compiler relies on some magic macros that expand
|
||||
in a mutually-overlapping and almost recursive way in order to
|
||||
perpetrate a complete change of syntax. Interestingly enough, if I
|
||||
hadn't used the same identifier for more than one thing in various
|
||||
places in the program this transformation would work with old-style cpp
|
||||
as well and ANSI cpp. It expands the program from about 2.2KB to about
|
||||
740KB. The resulting code does some tricky stuff to build a data
|
||||
structure of the same form as the code itself.
|
||||
|
||||
The interpreter is written in fairly straightforward C, although it is
|
||||
highly compressed. The C itself is written in a fairly functional style,
|
||||
in that every function consists of a single expression. In the tradition
|
||||
of functional programming languages it assumes that memory is infinite
|
||||
and so never frees anything. It also assumes that the C compiler
|
||||
implements the tail recursion optimisation, which is probably not true.
|
||||
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
I used these references in the course of writing this program and they
|
||||
explain some of the ideas behind it in more detail. Arthur Norman (one
|
||||
of the authors of the first paper) did a lot to enthuse me about this
|
||||
topic.
|
||||
|
||||
Clarke, T. J. W., et al., 1980. SKIM - the S, K, I Reduction Machine.
|
||||
Proceedings of the 1980 ACM LISP Conference, pp. 128-135.
|
||||
|
||||
Curry, H. B. and Feys, R., 1958. Combinatory Logic, Vol. 1.
|
||||
North-Holland.
|
||||
|
||||
Gordon, M. J. C., 1988. Programming Language Theory and its
|
||||
Implementation. Prentice-Hall.
|
||||
|
||||
Peterson, J, et al., 1997. Report on the Programming Language Haskell,
|
||||
version 1.4.
|
||||
|
||||
Peyton Jones, S. L., 1987. The implementation of Functional
|
||||
Programming Languages, Chapters 2, 11, 12, 16. Prentice-Hall.
|
||||
|
||||
Peyton Jones, S. L., and Wadler, P., 1992. Imperative Functional
|
||||
Programming. Proceedings of the ACM Symposium on the Principles of
|
||||
Programming Languages 1993, pp. 71-84.
|
||||
|
||||
Turner, D. A., 1979. A new implementation technique for applicative
|
||||
languages. Software- Practice and Experience. Vol. 9, pp. 31-49.
|
||||
|
||||
Turner, D. A., 1979. Another algorithm for bracket abstraction. Journal
|
||||
of Symbolic Logic. Vol. 44, no. 2, pp. 67-270.
|
||||
|
||||
Wadler, P., 1990. Comprehending Monads. Proceedings of the ACM
|
||||
conference on Lisp and Functional Programming, 1990.
|
||||
|
||||
Wadler, P., 1995. How to Declare an Imperative. Proceedings of the ACM
|
||||
International Logic Programming Symposium, 1995.
|
||||
@@ -0,0 +1,262 @@
|
||||
-----------------------------------------------------------------------------
|
||||
--
|
||||
-- This file contains the original source code for my entry, which was
|
||||
-- written in the lambda calculus using a slightly extended syntax
|
||||
-- compared to that accepted by my entry (in particular, it has
|
||||
-- multi-character identifiers and uses ` instead of \ because that's
|
||||
-- easier to enter inside a Haskell string). It also contains the Haskell
|
||||
-- code I used to translate the lambda calculus into combinators using
|
||||
-- the fully optimising algorithm described in the .hint file.
|
||||
--
|
||||
-- Tony Finch <dot@dotat.at>
|
||||
--
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
--
|
||||
-- Source code for my entry
|
||||
--
|
||||
|
||||
|
||||
unit = `val`k(k val)
|
||||
= CI
|
||||
bind = `op`fop`k(op `res(fop res k))
|
||||
= (CC B B C)
|
||||
|
||||
|
||||
revacc = Y `f(`acc`list(list `nil(acc)
|
||||
`head`tail(f tail (pair head acc))))
|
||||
rev = revacc I
|
||||
|
||||
fold = `atomf`pairf(Y `rec(`list(list atomf (pairf rec))))
|
||||
= (B (B Y) (BB B C CI))
|
||||
|
||||
|
||||
pair = `x`y`f`g( f x y )
|
||||
atom = `a`f`g( g a )
|
||||
|
||||
|
||||
ore = `a`b`c(a c K (b c)) = (SS (CI K))
|
||||
gns = Y `f(bind G `c(ore sp (ore nl ht) c f (C I c)))
|
||||
|
||||
pr = Y `f`e(e `x`y(bind (P ob) `i(bind (f x) `i(bind (f y) `i(P cb))))
|
||||
`a(P a))
|
||||
|
||||
trans = Y `f(bind gns `c( lm c (lambda f)
|
||||
ob c (brac f)
|
||||
cb c (unit (atom sp))
|
||||
ef c (unit (atom sp))
|
||||
(unit (atom c)) ))
|
||||
|
||||
brac = `f(bind f (Y `l`ea(bind f `eb(eb `x`y(l (pair ea eb))
|
||||
`a(a sp (unit ea)
|
||||
(l (pair ea eb)))))))
|
||||
|
||||
lam = `f(bind gns `v(bind f `e(unit (abstract v e))))
|
||||
|
||||
abs = Y `r`v`e(e `x`y(optimise (r v x) (r v y))
|
||||
`a(a v (atom i)
|
||||
(pair (atom k) (atom a)) ))
|
||||
|
||||
make = `x`y(pair (pair (atom s) x) y)
|
||||
|
||||
unopt = `a`b(pair (pair (atom s) a) b)
|
||||
|
||||
opt = `x(x `xx`xy(xx `xxx`xxy(make x)
|
||||
`xxa(xxa k `y(y `yx`yy(yx `yxx`yxy(make x y)
|
||||
`yxa(yxa k (pair (atom k) (pair xy yy))
|
||||
(make x y)))
|
||||
`ya(ya i xy (make x y)))
|
||||
(make x)))
|
||||
`xa(make x))
|
||||
|
||||
(Y `f(bind (bind trans pr) `i(f i)) I)
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
--
|
||||
-- Haskell lambda and combinator utilities
|
||||
--
|
||||
|
||||
infixl 9 :@:
|
||||
|
||||
data Expr = Expr :@: Expr | Lambda String Expr | Var String
|
||||
| Y | I | J | K | S | C | B | SS | CC | BB
|
||||
| P | G | E Int
|
||||
deriving (Eq, Read, Show)
|
||||
|
||||
data EType = EFun | EArg | ELam deriving Eq
|
||||
|
||||
|
||||
isGraph c = c >= '!' && c <= '~'
|
||||
isToken c = isAlphanum c || '_' == c
|
||||
|
||||
disp e = display ELam e ""
|
||||
|
||||
exec e = do e' <- execute (compile (fst (parse e)))
|
||||
putStr (disp e')
|
||||
|
||||
comp = disp . compile . fst . parse
|
||||
|
||||
simp = disp . simplify . fst . parse
|
||||
|
||||
|
||||
|
||||
-- turn String into Expr
|
||||
|
||||
parse (a : as) | isSpace a = parse as
|
||||
| a == '`' = let (var, bs) = span isToken (dropWhile isSpace as)
|
||||
(expr, cs) = parse bs
|
||||
in (Lambda var expr, cs)
|
||||
| a == '(' = let (left, bs) = parse as
|
||||
fun left (c : cs) | isSpace c = fun left cs
|
||||
| c == ')' = (left, cs)
|
||||
| otherwise = let (right, ds) = parse (c:cs)
|
||||
in fun (left :@: right) ds
|
||||
in fun left bs
|
||||
| a == '\'' = case as of
|
||||
c:cs -> (E (ord c), cs)
|
||||
[] -> (E (-1), [])
|
||||
| isDigit a = let (bs, cs) = span isDigit as
|
||||
n = read (a:bs)
|
||||
in (E n, cs)
|
||||
| a == '-' = let (bs, cs) = span isDigit as
|
||||
n = read (if bs == "" then "1" else bs)
|
||||
in (E (-n), cs)
|
||||
| isToken a = let (bs, cs) = span isToken as
|
||||
in (case a:bs of
|
||||
"Y" -> Y; "I" -> I; "J" -> J; "K" -> K; "S" -> S; "C" -> C; "B" -> B
|
||||
"SS" -> SS; "CC" -> CC; "BB" -> BB; "P" -> P; "G" -> G; x -> Var x
|
||||
, cs)
|
||||
|
||||
|
||||
-- pretty printer
|
||||
|
||||
display t (Lambda v e) = showChar '`' . showString v . display ELam e
|
||||
display t (a :@: b) = showParen (t /= EFun) (display EFun a . showChar ' ' . display EArg b)
|
||||
display t (Var v) = showParen (t == ELam) (showString v)
|
||||
display t (E n) = let c = chr n in if isGraph c then showChar '\'' . showChar c else shows n
|
||||
display t e = showParen (t == ELam) (shows e)
|
||||
|
||||
|
||||
|
||||
-- translate into optimised combinators
|
||||
|
||||
compile (a :@: b) = compile a :@: compile b
|
||||
compile (Lambda var e) = abstract var (compile e)
|
||||
compile e = e
|
||||
|
||||
abstract v (a :@: b) = optimise (abstract v a) (abstract v b)
|
||||
abstract v e | e == Var v = I
|
||||
| otherwise = K :@: e
|
||||
|
||||
optimise (K :@: p) I = p
|
||||
optimise (K :@: p) (K :@: r) = K :@: ( p :@: r )
|
||||
optimise (K :@: p) (B :@: r :@: s) = BB :@: p :@: r :@: s
|
||||
optimise (K :@: p) r = B :@: p :@: r
|
||||
optimise (B :@: p :@: q) (K :@: r) = CC :@: p :@: q :@: r
|
||||
optimise p (K :@: r) = C :@: p :@: r
|
||||
optimise (B :@: p :@: q) r = SS :@: p :@: q :@: r
|
||||
optimise p r = S :@: p :@: r
|
||||
|
||||
|
||||
|
||||
-- do combinator reduction
|
||||
|
||||
execute ( Y :@: f) = let g = f :@: g in execute g
|
||||
execute ( I :@: f ) = execute f
|
||||
execute ( J :@: f :@: g) = execute g
|
||||
execute ( K :@: f :@: g ) = execute f
|
||||
execute ( S :@: f :@: g :@: x) = execute ((f :@: x) :@: (g :@: x))
|
||||
execute ( C :@: f :@: g :@: x ) = execute ((f :@: x) :@: g)
|
||||
execute ( B :@: f :@: g :@: x ) = execute (f :@: (g :@: x))
|
||||
execute (SS :@: c :@: f :@: g :@: x) = execute (c :@: (f :@: x) :@: (g :@: x))
|
||||
execute (CC :@: c :@: f :@: g :@: x ) = execute (c :@: (f :@: x) :@: g)
|
||||
execute (BB :@: c :@: f :@: g :@: x ) = execute (c :@: (f :@: (g :@: x)))
|
||||
|
||||
execute (G :@: f) = do c <- getChar
|
||||
execute (f :@: E (ord c))
|
||||
|
||||
execute (P :@: f :@: g) = do f' <- execute f
|
||||
case f' of
|
||||
E n -> do putChar (chr n)
|
||||
execute (I :@: g)
|
||||
_ -> return (f' :@: g)
|
||||
|
||||
execute (E n :@: f) = do f' <- execute f
|
||||
case f' of
|
||||
E m -> if n == m then return K else return J
|
||||
_ -> return (E n :@: f')
|
||||
|
||||
execute (f :@: g) = do f' <- execute f
|
||||
if f' == f then return (f' :@: g)
|
||||
else execute (f' :@: g)
|
||||
execute e = return e
|
||||
|
||||
|
||||
|
||||
-- translate into lambda calculus and do beta reduction
|
||||
|
||||
simplify I = fst (parse " `f f ")
|
||||
simplify J = fst (parse " `f`g g ")
|
||||
simplify K = fst (parse " `f`g f ")
|
||||
simplify S = fst (parse " `f`g`x ((f x) (g x)) ")
|
||||
simplify C = fst (parse " `f`g`x ((f x) g) ")
|
||||
simplify B = fst (parse " `f`g`x (f (g x)) ")
|
||||
simplify CC = fst (parse " `c`f`g`x (c (f x) g) ")
|
||||
simplify SS = fst (parse " `c`f`g`x (c (f x) (g x)) ")
|
||||
simplify BB = fst (parse " `c`f`g`x (c (f (g x))) ")
|
||||
|
||||
simplify (Lambda v b) = Lambda v (simplify b)
|
||||
|
||||
simplify (Lambda v b :@: a) = simplify (substitute v a b)
|
||||
|
||||
simplify (a :@: b) = let a' = simplify a
|
||||
b' = simplify b
|
||||
in if a' == a then (a' :@: b')
|
||||
else simplify (a' :@: b')
|
||||
simplify x = x
|
||||
|
||||
|
||||
|
||||
-- replace instances of variable v in body b with argument a, avoiding variable capture
|
||||
|
||||
substitute v a b = let wf b = newvar (merge (vars a) (vars b))
|
||||
subst (Var v') | v == v' = a
|
||||
| otherwise = Var v'
|
||||
subst (Lambda v' b) | v == v' = Lambda v' b
|
||||
| otherwise = let w = wf b in Lambda w (subst (substitute v' (Var w) b))
|
||||
subst (b :@: c) = (subst b) :@: (subst c)
|
||||
subst x = x
|
||||
in subst b
|
||||
|
||||
|
||||
|
||||
-- return a variable not in vs (which is sorted)
|
||||
|
||||
newvar vs = let x `isin` [] = False
|
||||
x `isin` (y:ys) | x < y = False
|
||||
| x == y = True
|
||||
| otherwise = x `isin` ys
|
||||
try v = if v `isin` vs then try (next v) else v
|
||||
next (v:vs) = if v < 'z' then (succ v):vs else 'a':(next vs)
|
||||
next [] = "a"
|
||||
in try "a"
|
||||
|
||||
|
||||
|
||||
-- get (sorted, unrepetitive) list of variables in an Expr
|
||||
|
||||
vars (Lambda v b) = merge [v] (vars b)
|
||||
vars (a :@: b) = merge (vars a) (vars b)
|
||||
vars (Var v) = [v]
|
||||
vars _ = []
|
||||
|
||||
|
||||
|
||||
-- combine two sorted lists, omitting duplicates
|
||||
|
||||
merge [] ys = ys
|
||||
merge xs [] = xs
|
||||
merge (x:xs) (y:ys) | x < y = x : merge (xs) (y:ys)
|
||||
| x == y = x : merge (xs) (ys)
|
||||
| otherwise = y : merge (x:xs) (ys)
|
||||
+802
@@ -0,0 +1,802 @@
|
||||
14th International Obfuscated C Code Contest Guidelines, Hints and Comments |
|
||||
|
||||
Copyright (c) Leonid A. Broukhis, Jeremy Horn, Landon Curt Noll and |
|
||||
Peter Seebach, 1998. |
|
||||
|
||||
All Rights Reserved. Permission for personal, education or non-profit use is |
|
||||
granted provided this this copyright and notice are included in its entirety |
|
||||
and remains unaltered. All other uses must receive prior permission in |
|
||||
writing from the contest judges. |
|
||||
|
||||
|
||||
ABOUT THIS FILE:
|
||||
|
||||
This file is intended to help people who wish to submit entries to
|
||||
the International Obfuscated C Code Contest (IOCCC for short).
|
||||
|
||||
This is not the IOCCC rules, though it does contain comments about
|
||||
them. The guidelines should be viewed as hints and suggestions.
|
||||
Entries that violate the guidelines but remain within the rules are
|
||||
allowed. Even so, you are safer if you remain within the guidelines.
|
||||
|
||||
You should read the current IOCCC rules, prior to submitting entries.
|
||||
The rules are typically sent out with these guidelines.
|
||||
|
||||
Changes from the 1996 rules are denoted by change bars. ---> |
|
||||
Not every change is marked in this file is marked, but
|
||||
most are. :-)
|
||||
|
||||
|
||||
WHAT IS NEW IN 1998:
|
||||
|
||||
The EMail addresses (entry@ioccc.org and questions@ioccc.org) are |
|
||||
different. Contest entries (in the proper form) go to entry@ioccc.org |
|
||||
and questions to the judges go to questions@ioccc.org. |
|
||||
|
||||
There is a new web URL: http://www.ioccc.org |
|
||||
|
||||
We have a new IOCCC judging team. See http://www.ioccc.org/judges.html |
|
||||
for more information.
|
||||
|
||||
We added a more explicit comment against using gzip to get around the |
|
||||
contest entry size limit. |
|
||||
|
||||
We warn against assuming that string constants are writable. |
|
||||
|
||||
There are some stuff about exit() returning void in the guidelines. |
|
||||
|
||||
There are some stuff about #'s as the first char of a line in |
|
||||
C-preprocessor directives. See below. |
|
||||
|
||||
Titles can be 31 chars now ... but please try to keep then short. |
|
||||
|
||||
To provide you with a little more time, we have extended the deadline |
|
||||
to 31-Jan-99, which due to the leap second of 31-Dec-98 23:59:60 UTC |
|
||||
gives you just a little more time to complete your entry. |
|
||||
|
||||
Some may complain about the use of 2 digit years in our contest start |
|
||||
and stop dates. These dates have nothing to do with the current Y2K |
|
||||
hype. In fact this contest is currently certified 99.9% Y2K hype free! |
|
||||
We use 2 digit years because they are more obfuscated. :-) |
|
||||
|
||||
|
||||
HINTS AND SUGGESTIONS:
|
||||
|
||||
You are encouraged to examine the winners of previous contests. See
|
||||
FOR MORE INFORMATION for details on how to get previous winners.
|
||||
|
||||
Keep in mind that rules change from year to year, so some winning entries
|
||||
may not be valid entries this year. What was unique and novel one year
|
||||
might be 'old' the next year.
|
||||
|
||||
An entry is usually examined in a number of ways. We typically apply
|
||||
a number of tests to an entry:
|
||||
|
||||
* look at the original source
|
||||
* convert ANSI tri-graphs to ASCII
|
||||
* C pre-process the source ignoring '#include' lines
|
||||
* C pre-process the source ignoring '#define' and '#include' lines
|
||||
* run it through a C beautifier
|
||||
* examine the algorithm
|
||||
* lint it
|
||||
* compile it
|
||||
* execute it
|
||||
|
||||
You should consider how your entry looks in each of the above tests.
|
||||
You should ask yourself if your entry remains obscure after it has been
|
||||
'cleaned up' by the C pre-processor and a C beautifier.
|
||||
|
||||
Your entry need not pass all of the above tests. In certain
|
||||
cases, a test is not important. Entries that compete for the
|
||||
'strangest/most creative source layout' need not do as well as
|
||||
others in terms of their algorithm. On the other hand, given
|
||||
two such entries, we are more inclined to pick the entry that
|
||||
does something interesting when you run it.
|
||||
|
||||
We try to avoid limiting creativity in our rules. As such, we leave
|
||||
the contest open for creative rule interpretation. As in real life
|
||||
programming, interpreting a requirements document or a customer request
|
||||
is important. For this reason, we often award 'worst abuse of the
|
||||
rules' to an entry that illustrates this point in an ironic way.
|
||||
|
||||
We do realize that there are holes in the rules, and invite entries
|
||||
to attempt to exploit them. We will award 'worst abuse of the rules'
|
||||
and then plug the hole next year. Even so, we will attempt to use
|
||||
the smallest plug needed, if not smaller. :-)
|
||||
|
||||
Check out your program and be sure that it works. We sometimes make
|
||||
the effort to debug an entry that has a slight problem, particularly
|
||||
in or near the final round. On the other hand, we have seen some
|
||||
of the best entries fall down because they didn't work.
|
||||
|
||||
We tend to look down on a prime number printer, that claims that
|
||||
16 is a prime number. If you do have a bug, you are better off
|
||||
documenting it. Noting "this entry sometimes prints the 4th power
|
||||
of a prime by mistake" would save the above entry. And sometimes,
|
||||
a strange bug/feature can even help the entry! Of course, a correctly
|
||||
working entry is best.
|
||||
|
||||
People who are considering to just use some complex mathematical
|
||||
function or state machine to spell out something such as "hello,
|
||||
world!" may want to try and be more creative.
|
||||
|
||||
Ultra-obfuscated programs are in some cases some cases easier to
|
||||
deobfuscate than subtly-obfuscated programs. Consider using
|
||||
misleading or subtle tricks layered on top of or under an
|
||||
appropriate level of obfuscation.
|
||||
|
||||
Programs that use VTxxx/ANSI sequences that are NOT limited to a
|
||||
specific terminal brand and that can also work in a standard xterm
|
||||
are considered portable.
|
||||
|
||||
|
||||
OUR LIKES AND DISLIKES:
|
||||
|
||||
Doing masses of #defines to obscure the source has become 'old'. We
|
||||
tend to 'see thru' masses of #defines due to our pre-processor tests
|
||||
that we apply. Simply abusing #defines or -Dfoo=bar won't go as far
|
||||
as a program that is more well rounded in confusion.
|
||||
|
||||
Many ANSI C compilers dislike the following code, and so do we:
|
||||
|
||||
#define d define
|
||||
#d foo <-- don't expect this to turn into #define foo
|
||||
|
||||
When declaring local or global variables, you should declare the type:
|
||||
|
||||
int this_is_ok;
|
||||
this_is_not; <-- don't use such implicit type declaration
|
||||
|
||||
We suggest that you compile your entry with an ANSI C compiler. If you
|
||||
must use non-ANSI C, such as K&R C, you must avoid areas that result in
|
||||
compile/link errors for ANSI C compilers. For example, using gcc
|
||||
local function declarations, such as:
|
||||
|
||||
int |
|
||||
main() { |
|
||||
void blah() { printf("blah\n"); }
|
||||
blah();
|
||||
}
|
||||
|
||||
are not allowed even though their existence seems tailor made for
|
||||
this contest! But for now, since they are not in wide spread use
|
||||
we cannot accept entries that use them.
|
||||
|
||||
If your entry uses functions that have a variable number of
|
||||
arguments, be careful. Systems implement va_list as a wide variety
|
||||
of ways. Because of this, a number of operations using va_list are
|
||||
not portable and must not be used:
|
||||
|
||||
* assigning a non-va_list variable to/from a va_list variable
|
||||
* casting a non-va_list variable into/from a va_list variable
|
||||
* passing a va_list variable to a function expecting a non-va_list arg
|
||||
* passing a non-va_list variable to a function expecting a va_list arg
|
||||
* performing arithmetic on va_list variables
|
||||
* using va_list as a structure or union
|
||||
|
||||
In particular, do not treat va_list variables as if they were a char **'s.
|
||||
|
||||
Avoid using <varargs.h>. Use <stdarg.h> instead.
|
||||
|
||||
If you use C preprocessor directives (#define, #if, #ifdef, ...), |
|
||||
the leading '#' must be the first non-whitespace character on a line. |
|
||||
While some broken C preprocessors do not allow whitespace before a |
|
||||
'#', most do. |
|
||||
|
||||
The exit() function returns void. On some broken systems have exit() |
|
||||
return int. Your entry should assume that exit() returns a void. |
|
||||
|
||||
Small programs are best when they are short, obscure and concise.
|
||||
While such programs are not as complex as other winners, they do
|
||||
serve a useful purpose. They are often the only program that people
|
||||
attempt to completely understand. For this reason, we look for
|
||||
programs that are compact, and are instructional.
|
||||
|
||||
One line programs should be short one line programs, say around 80
|
||||
bytes long. Getting close to 160 bytes is a bit too long in our opinion.
|
||||
|
||||
We tend to dislike programs that:
|
||||
|
||||
* are very hardware specific
|
||||
* are very OS version specific
|
||||
(index/strchr differences are ok, but socket/streams specific
|
||||
code is likely not to be)
|
||||
* dump core or have compiler warnings
|
||||
(it is ok only if you warn us in the 'remark' header item)
|
||||
* won't compile or run under a POSIX P1003.1/P1003.2 like systems
|
||||
* depend on a utility or application not normally found on most
|
||||
most POSIX P1003.1/P1003.2 like systems
|
||||
* abuse the build file to get around the size limit
|
||||
* obfuscate by excessive use of ANSI tri-graphs
|
||||
* are longer than they need to be
|
||||
* are similar to previous winners
|
||||
* are identical to previous losers :-)
|
||||
* are identical to future losers (Windows 95) :-)
|
||||
|
||||
Unless you are cramped for space, or unless you are entering the
|
||||
'best one liner' category, we suggest that you format your program
|
||||
in a more creative way than simply forming excessively long lines.
|
||||
|
||||
The build file should not be used to try and get around the size
|
||||
limit. It is one thing to make use of a several -D's to help out,
|
||||
but it is quite another to use 200+ bytes of -D's in order to
|
||||
try and squeeze the source under the size limit. You should feel
|
||||
free to make use of the build file space, but you are better off
|
||||
if you show some amount of restraint.
|
||||
|
||||
We want to get away from source that is simply a compact blob of
|
||||
characters. To help, we give a break to source that contains
|
||||
whitespace, and in certain cases ; { or } characters. While the
|
||||
number of characters excluding whitespace (tab, space, newline),
|
||||
and excluding any ; { or } followed immediately by either whitespace
|
||||
or end of file, must be <= 1536, the total size may be less than 3217
|
||||
bytes. This means that one may use "free of charge" up to 1681
|
||||
bytes of whitespace, or ; { or } followed by either whitespace
|
||||
or end of file. [[Q: What is special about 1681?]]
|
||||
|
||||
Please do not use things like gzip to get around the size limit. |
|
||||
|
||||
Given two versions of the same program, one that is a compact blob
|
||||
of code, and the other that is formatted more like a typical C
|
||||
program, we tend to favor the second version. Of course, a third
|
||||
version of the same program that is formatted in an interesting
|
||||
and/or obfuscated way, would definitely win over the first two!
|
||||
|
||||
We suggest that you avoid trying for the 'smallest self-replicating'
|
||||
source. The smallest, a zero byte entry, won in 1994.
|
||||
|
||||
We do not like writable strings. That is, we don't want stuff like: |
|
||||
|
||||
char *T = "So many primes, so little time!";
|
||||
...
|
||||
T[14] = ';';
|
||||
|
||||
Please don't make use of this feature, even if your system allows it. |
|
||||
|
||||
X client entries should be as portable as possible. Entries that
|
||||
adapt to a wide collection of environments will be favored. Don't
|
||||
depend on a particular type of display. For example, don't depend
|
||||
on color or a given size. Don't require backing store.
|
||||
|
||||
X client entries should avoid using X related libraries and
|
||||
software that is not in wide spread use. We ask that such X client
|
||||
entries restrict themselves to only the low level Xlib and the
|
||||
Athena widget set (libX11.a, libXaw.a, libXmu.a and libXt.a).
|
||||
Don't use M*tif, Xv*ew, or OpenL*ok toolkits, since not everyone
|
||||
has them. Avoid depending on a particular window manager. Not
|
||||
everyone has X11r5, and some people are stuck back in X11r4 (or
|
||||
earlier), so try to target X11r5 without requiring X11r5. Better
|
||||
yet, try to make your entry run on all version 11 X Window Systems.
|
||||
|
||||
X client entries should not to depend on particular items on
|
||||
.Xdefaults. If you must do so, be sure to note the required lines
|
||||
in the ---remark--- section.
|
||||
|
||||
While we recognize that UN*X is not a universal operating system, the
|
||||
contest does have a bias towards such systems. In an effort to expand
|
||||
the scope of the contest, we phrase our bias in terms of POSIX P1003.1
|
||||
and P1003.2 standards. This will allow certain non-UN*X OS users to
|
||||
submit entries. On the other hand, this is a guideline and not a rule.
|
||||
We will not reject an entry based on some POSIX technicality.
|
||||
|
||||
When dealing with OS and application environments, we suggest that you
|
||||
be reasonable with a nod towards vanilla UN*X-like systems. POSIX will
|
||||
evolve but not as much as the contest, so avoid stuff like POSIX real
|
||||
time, security, etc.
|
||||
|
||||
We like programs that:
|
||||
|
||||
* are as concise and small as they need to be
|
||||
* do something at least quasi-interesting
|
||||
* pass lint without complaint (not a requirement, but it is nice)
|
||||
* are portable
|
||||
* are unique or novel in their obfuscation style
|
||||
* MAKE USE OF A NUMBER OF DIFFERENT TYPES OF OBFUSCATION <== HINT!! |
|
||||
* make us laugh and/or throw up :-) (humor helps!) |
|
||||
|
||||
Some types of programs can't excel (tm) in some areas. Of course, your
|
||||
program doesn't have to excel in all areas, but doing well in several
|
||||
areas really does help.
|
||||
|
||||
You are better off explaining what your entry does in the
|
||||
---remark--- section rather than leaving it obscure for the judges
|
||||
as we might miss something and/or be too tired to notice.
|
||||
|
||||
We freely admit that interesting, creative or humorous comments in
|
||||
the ---remark--- section help your chances of winning. If you had to
|
||||
read so many twisted entries, you too would enjoy a good laugh or two.
|
||||
We think the readers of the contest winners do as well. We do read
|
||||
the ---remark--- section during the judging process, so it is worth
|
||||
your while to write a remarkable ---remark--- section.
|
||||
|
||||
Be creative!
|
||||
|
||||
|
||||
ABUSING THE RULES:
|
||||
|
||||
Legal abuse of the rules is somewhat encouraged. Legal rule abuse may
|
||||
involve, but is not limited to, doing things that are technically
|
||||
allowed by the rules and yet do not fit the spirit of what we
|
||||
intended to be submitted.
|
||||
|
||||
Legal rule abuse is encouraged to help promote creativity. Rule
|
||||
abuse entries, regardless of if they receive an award, result in
|
||||
changes to the next year's rules and guidelines.
|
||||
|
||||
Legal abuse of the rules is NOT an invitation to violate the
|
||||
rules. An entry that violates the rules in the opinion of the
|
||||
judges, WILL be disqualified. RULE ABUSE CARRIES A CERTAIN LEVEL
|
||||
OF RISK! If you have an entry that might otherwise be interesting,
|
||||
you might want to submit two versions; one that does not abuse the
|
||||
rules and one that does.
|
||||
|
||||
If you intend to abuse the rules, indicate so in the ---remark---
|
||||
section. You must try to justify why you consider your rule abuse
|
||||
to be allowed under the rules. That is, you must plead your case
|
||||
as to why your entry is valid. Humor and/or creativity help plead
|
||||
a case.
|
||||
|
||||
Abusing the entry format tends to annoy us more than amuse us.
|
||||
|
||||
We are often asked why the contest rules and guidelines seem too
|
||||
strange or contain mistakes, flaws or grammatical errors.
|
||||
One reason is that we sometimes make genuine mistakes. But in many
|
||||
cases such problems, flaws or areas of confusion are deliberate.
|
||||
Changes to rules and guidelines in response to rule abuses, are
|
||||
done in a minimal fashion. Often we will deliberately leave
|
||||
behind holes (or introduce new ones) so that future rule abuse may
|
||||
continue.
|
||||
|
||||
At the risk of stating the obvious, this contest is a parity of the
|
||||
software development process. The rules and guidelines are
|
||||
only a small part of the overall contest. Even so, one may think
|
||||
the contest rule and guideline process as a parody of the sometimes
|
||||
tragic mismatch between what a customer (or marketing) wants and
|
||||
what engineering delivers.
|
||||
|
||||
|
||||
ENTRY FORMAT:
|
||||
|
||||
In order to help us process the many entries, we must request your
|
||||
assistance by formatting your entries in a certain way. This format,
|
||||
in addition, allows us to quickly separate information about the
|
||||
author from the program itself. (see JUDGING PROCESS)
|
||||
|
||||
We have provided the program, mkentry, as an example of how to
|
||||
format entries. You should be aware of the following warning that
|
||||
is found in mkentry.c:
|
||||
|
||||
This program attempts to implement the IOCCC rules. Every
|
||||
attempt has been made to make sure that this program produces
|
||||
an entry that conforms to the contest rules. In all cases,
|
||||
where this program differs from the contest rules, the
|
||||
contest rules will be used. Be sure to check with the
|
||||
contest rules before submitting an entry.
|
||||
|
||||
You are not required to use mkentry. It is convenient, however,
|
||||
as it attempts to uuencode the needed files, and attempt to check
|
||||
the entry against the size rules.
|
||||
|
||||
If you have any suggestions, comments, fixes or complaints about
|
||||
the mkentry.c program, please send EMail to the judges. (see below)
|
||||
|
||||
The following is a sample entry (the | change bars are not part
|
||||
of the example, don't add them to your entry!)
|
||||
|
||||
---entry---
|
||||
rule: 1998
|
||||
fix: y
|
||||
title: chlejhse
|
||||
entry: 0
|
||||
date: Mon Oct 28 00:47:00 1998
|
||||
host: Un*x v6, pdp11/45
|
||||
2.9BSD, pdp11/70
|
||||
---remark---
|
||||
This is a not-very-obfuscated C program. It is likely not to win a
|
||||
prize, because it doesn't have what it takes to win and because the
|
||||
author plans to forget to send it in before the deadline! :-)
|
||||
---author---
|
||||
name: Landon Curt Noll
|
||||
org: IOCCC Judging Group
|
||||
addr: Toad Hall
|
||||
PO Box 170608
|
||||
San Francisco, California
|
||||
94117-0608
|
||||
USA
|
||||
Earth
|
||||
email: chongo@no_spam.fake.address
|
||||
nobody@toad.com
|
||||
url: http:///www.isthe.com/chongo
|
||||
anon: y
|
||||
---author---
|
||||
name: Leonid A. Broukhis
|
||||
org: IOCCC Judging Group
|
||||
addr: Toad Hall
|
||||
PO Box 170608
|
||||
San Francisco, California
|
||||
94117-0608
|
||||
USA
|
||||
email: leob@no_spam.fake_org
|
||||
url: http://www.mailcom.com/main.shtml
|
||||
anon: n
|
||||
---author---
|
||||
name: Jeremy Horn
|
||||
org: IOCCC Judging Group
|
||||
addr: Toad Hall
|
||||
PO Box 170608
|
||||
San Francisco, California
|
||||
94117-0608
|
||||
USA
|
||||
email: jhorn@no_spam.fake_edu
|
||||
url: none
|
||||
anon: n
|
||||
---author---
|
||||
name: Peter Seebach
|
||||
org: IOCCC Judging Group
|
||||
addr: Toad Hall
|
||||
PO Box 170608
|
||||
San Francisco, California
|
||||
94117-0608
|
||||
USA
|
||||
email: seebs@no_spam.fake_com
|
||||
url: none
|
||||
anon: y
|
||||
---info---
|
||||
begin 444 info.file
|
||||
M5&AI<R!F:6QE(&ES(&EN('1H92!P=6)L:6,@9&]M86EN+@H*:'1T<#HO+W)E
|
||||
M86QI='DN<V=I+F-O;2]C:&]N9V\*:'1T<#HO+W=W=RYI;V-C8RYO<F<*"E1H
|
||||
M870@=&AA="!I<RP@:7,N"E1H870@=&AA="!I<R!N;W0L"B`@("!I<R!N;W0@
|
||||
M=&AA="!T:&%T(&YO="!I<RX*5&AA="!I<RP@=&AA="!T:&%T(&ES(&YO="P@
|
||||
M:7,A"@H)"2TM(&-H;VYG;R`Q.3<T"@I);B`Q.3DW+"!W:&5R92!T:&5R92!W
|
||||
M87,@;F\@8V]N=&5S="`Z+2@@9'5E('1O(%-R:7)A;2!D<F]P<&EN9R!O9F8@
|
||||
M=&AE"F9A8V4@;V8@=&AE($5A<G1H("AA;GEO;F4@:VYO=R!W:&5R92!3<FER
|
||||
M86T@4W)I;FEV87-A;B!W96YT/R`@268@=&\@<V5N9`I%36%I;"!T;R!Q=65S
|
||||
M=&EO;G-`:6]C8V,N;W)G*2!A;F0@3&%R<GD@0F%S<V5L(&)E:6YG('5N86)L
|
||||
M92!T;R!C;VYT:6YU90HH9'5E('1O(&AI<R!C=7)R96YT(%!H1"!W;W)K("XN
|
||||
M+B!B97-T('=I<VAE<R!,87)R>2$I+"!O;F4@;6EG:'0@<V%Y.@H*"3(@:7,@
|
||||
M=&AE(&=R96%T97-T(&]D9"!P<FEM92!B96-A=7-E(&ET(&ES('1H92!L96%S
|
||||
M="!E=F5N('!R:6UE+@H*06YD(&9O<B`Q.3DX(&]N92!M:6=H="!S87DZ"@H)
|
||||
M4V\@;6%N>2!P<FEM97,@+BXN('-O(&QI='1L92!T:6UE(0H*26X@,3DY,BP@
|
||||
M;VYE('!E<G-O;B!T;VQD('5S('1H870@=&AE>2!A8W1U86QL>2!D96-O9&5D
|
||||
M('1H:7,@9FEL92X@($EN"C$Y.3,@86YD(#$Y.30@82!F97<@;6]R92!D:60@
|
||||
M=&AE('-A;64N("!);B`Q.3DU+"!A(&YU;6)E<B!O9B!P96]P;&4@9G)O;0I%
|
||||
M87-T97)N($5U<F]P92!T;VQD('5S('1H870@=&AE>2!D96-O9&5D('1H:7,@
|
||||
M9FEL92X@(%-E96US('1H97)E(&ES(&$*<VUA;&P@=75D96-O9&4@9W)O=7`@
|
||||
M:6X@16%S=&5R;B!%=7)O<&4A("`Z+2D*"E=H>2!D;VXG="!Y;W4@=&5L;"!U
|
||||
M<R!W:'D@>6]U(&1E8V]D960@=&AI<R!F:6QE(&)Y('-E;F1I;F<@14UA:6P@
|
||||
M=&\Z"@H)<75E<W1I;VYS0&EO8V-C+F]R9PH*4&5R:&%P<R!Y;W4@;6EG:'0@
|
||||
M<W5G9V5S="!A(&)E='1E<B!E>&%M<&QE(&9I;&4@86YD('!R;V=R86T@9F]R
|
||||
M('1H:7,*<V%M<&QE(&5N=')Y/R`@268@>6]U(&1O('-E;F0@:7,@82!B971T
|
||||
M97(@97AA;7!L92!F:6QE+"!B92!W87)N960@+BXN"G1H870@:70@8V%N;F]T
|
||||
M(&)E(&-O;G-I9&5R960@87,@82!C;VYT97-T(&5N=')Y+B`@4V\@>6]U(&UI
|
||||
M9VAT(&YO=`IW86YT('1O('-E;F0@:6X@>6]U<B!B97-T('=O<FL@+BXN('-A
|
||||
M=F4@=&AA="!F;W(@=&AE(&-O;G1E<W0N("!/;B!T:&4@"F]T:&5R(&AA;F0@
|
||||
M+BXN('EO=2!M:6=H="!W86YT('1O('-E;F0@=7,@>6]U<B!M;W-T(&AU;6]R
|
||||
M;W5S('=O<FLN("`@.BTI"E5U96YC;V1E9"!C<F5D:70@=VEL;"!B92!G:79E
|
||||
;;B!I9B!W92!P:6-K('EO=7(@97AA;7!L92X*
|
||||
`
|
||||
end
|
||||
---build---
|
||||
begin 444 build
|
||||
K9V-C("UA;G-I('!R;V<N8R`M3R`M1%-)3$Q97T1%1DE.12`M;R!P<F]G"@``
|
||||
`
|
||||
end
|
||||
---program---
|
||||
begin 444 prog.c
|
||||
M;6%I;B@I"GL*("`@("\J"B`@("`@*B!.;W0@=F5R>2!O8F9U<V-A=&5D(&)U
|
||||
M="!T:&5N('=H870@9&ED('EO=2!E>'!E8W0@+BXN('1H:7,@:7,@:G5S=`H@
|
||||
M("`@("H@82!P;&%C96AO;&1E<B!E>&%M<&QE+@H@("`@("HO"B`@("!P<FEN
|
||||
M=&8H(E-O;65D87D@22!M:6=H="!W<FET92!A(&)E='1E<B!E>&%M<&QE+EQN
|
||||
M(BD["B`@("!P<FEN=&8H(D]N('-E8V]N9"!T:&]G=6AT("XN+B!N86@A7&XB
|
||||
M*3L*("`@('!R:6YT9B@B4V5N9"!U<R!A(&=O;V0@97AA;7!L92!B=70@8F4@
|
||||
M=V%R;F5D+"!A;GD@97AA;7!L92!Y;W5<;B(I.PH@("`@<')I;G1F*")S96YD
|
||||
M('5S('=I;&P@;F]T(&)E(&-O;G-I9&5R960@87,@86X@96YT<GD@9F]R('1H
|
||||
M92!C;VYT97-T(5QN(BD["B`@("!P<FEN=&8H(E-O('EO=2!M:6=H="!N;W0@
|
||||
M=V%N="!T;R!S96YD(&%N(&5X86UP;&4@;V8@>6]U<B!B97-T('=O<FM<;B(I
|
||||
M.PH@("`@<')I;G1F*"(N+BX@<V%V92!T:&%T(&9O<B!T:&4@8V]N=&5S="X@
|
||||
M($)U="!A(&=O;V0@:'5M;W)O=7,@<')O9R!M:6=H=%QN(BD["B`@("!P<FEN
|
||||
M=&8H(F1O("XN+B!A;F0@=V4@=VEL;"!G:79E('EO=2!U=65N8V]D960@8W)E
|
||||
M9&ET(&EN(')E='5R;BY<;B(I.PH@("`@+RH@14UA:6PZ('%U97-T:6]N<T!I
|
||||
M;V-C8RYO<F<@*B\*(VEF("%D969I;F5D*%-)3$Q97T1%1DE.12D*("`@(&UA
|
||||
F:6XH*3L*(V5N9&EF"B`@("!E>&ET*#(Q-S`Q("4@,3(W*3L*?0H`
|
||||
`
|
||||
end
|
||||
---end---
|
||||
|
||||
Your entry's sections must be the same order as in the above example.
|
||||
|
||||
Typically the build file should assume that the source is prog.c
|
||||
and will compile into prog. If an entry wins, we will rename
|
||||
its source and binary to avoid filename collision. By tradition,
|
||||
we use the name of the entry's title, followed by an optional
|
||||
digit in case of name conflicts.
|
||||
|
||||
Please note that the title must match the following regexp:
|
||||
|
||||
^[a-zA-Z0-9_=][a-zA-Z0-9_=+-]*$
|
||||
|
||||
and must be 1 to 31 chars in length. Titles such as: |
|
||||
|
||||
foo.c
|
||||
this_invalid_title_is_too_long !
|
||||
/dev/null
|
||||
|
||||
are right out! :-)
|
||||
|
||||
Titles can be 31 chars long now, but please try to keep them short. |
|
||||
Why 31? Because at lesst one of the judges likes Mersenne primes! |
|
||||
|
||||
It is suggested, but not required, that the title should incorporate
|
||||
the author(s) username(s).
|
||||
|
||||
If the above entry somehow won the 'least likely to win' award,
|
||||
we would use chonglab.c and chonglab.
|
||||
|
||||
If your entry depends on, or requires that your build, source
|
||||
and/or binary files be a particular name, please say so in the
|
||||
---remark--- section. If this case applies, it would be be helpful
|
||||
if you did one of the following:
|
||||
|
||||
* Tell us how to change the filename(s) in your entry.
|
||||
|
||||
* Have the build file make copies of the files. For example:
|
||||
|
||||
cc prog.c -o special_name
|
||||
|
||||
or rm -f special_src.c
|
||||
cp prog.c special_src.c
|
||||
cc special_src.c -o special_name
|
||||
|
||||
or rm -f special_build
|
||||
tail +4 build > special_build
|
||||
sh < special_build
|
||||
|
||||
* Assume that we will use the entry title. Send us a version of
|
||||
your build/program files that uses the name convention. You
|
||||
should uuencode these files in ---info--- sections.
|
||||
|
||||
If your entry needs to modify its source, info or binary files,
|
||||
please say so in the ---remark--- section. You should try to avoid
|
||||
touching your original build, source and binary files. You should
|
||||
arrange to make copies of the files you intend to modify. This
|
||||
will allow people to re-generate your entry from scratch.
|
||||
|
||||
Remember that your entry may be built without a build file. We
|
||||
typically incorporate the build lines into a Makefile. If the
|
||||
build file must exist, say so in the ---remark--- section.
|
||||
|
||||
Typically the ---build--- command will contain a "cc" command.
|
||||
It is also ok to use a "gcc" command (and gcc args). However keep
|
||||
in mind that your entry should be compilable by any standard ANSI C
|
||||
compiler and thus should not depend on a special gcc feature.
|
||||
|
||||
If your entry needs special info files, you should uuencode them
|
||||
into ---info--- sections. In the case of multiple info files,
|
||||
use multiple ---info--- sections. If no info files are needed,
|
||||
then skip the ---info--- section.
|
||||
|
||||
Info files are intended to be input, or detailed information that
|
||||
does not fit well into the ---remark--- section. For example, an
|
||||
entry that implements a compiler might want to provide some sample
|
||||
programs for the user to compile. An entry might want to include a
|
||||
lengthy design document, that might not be appropriate for a
|
||||
'hints' file.
|
||||
|
||||
Info files should be used only to supplement your entry. For
|
||||
example, info files may provide sample input or detailed
|
||||
information about your entry. Because they are supplemental,
|
||||
the entry should not require them exist.
|
||||
|
||||
In some cases, your info files might be renamed to avoid name
|
||||
conflicts. If info files should not be renamed for some reason,
|
||||
say so in the ---remark--- section.
|
||||
|
||||
Info files must uudecode into the current directory. If they
|
||||
absolutely must be renamed, or moved into a sub-directory, say
|
||||
so in the ---remark--- section.
|
||||
|
||||
When submitting multiple entries, be sure that each entry has
|
||||
a unique entry number from 0 to 7. Your first entry should
|
||||
have entry number 0.
|
||||
|
||||
With the exception of the header, all text outside of the entry
|
||||
format may be ignored. That is, don't place text outside of the
|
||||
entry and expect us to see it. (Our decoding tools are not AI
|
||||
progs!) If you need tell the judges something, put it in the
|
||||
---remark--- section, or send a EMail to:
|
||||
|
||||
questions@ioccc.org (not the address for submitting entries) |
|
||||
|
||||
You must include the words ``ioccc question'' in the subject of your
|
||||
EMail message when sending EMail to the judges.
|
||||
|
||||
The date should be given with respect to UTC. (Some systems refer
|
||||
to this as GMT or GMT0) The format of the date should be that as
|
||||
returned by asctime() in the C locale. An example of such a string is:
|
||||
|
||||
Mon Oct 28 00:47:00 1998
|
||||
|
||||
This format is similar to the output of the date(1) command. The
|
||||
string does not include the timezone name before the year. On many
|
||||
systems, one of the following command will produce a similar string:
|
||||
|
||||
date -u "+%a %h %d %T 19%y"
|
||||
date -u | sed -e 's/... \(19[0-9][0-9]\)$/\1/'
|
||||
sh -c 'TZ=UTC date | sed -e "s/... \(19[0-9][0-9]\)$/\1/"'
|
||||
sh -c 'TZ=GMT date | sed -e "s/... \(19[0-9][0-9]\)$/\1/"'
|
||||
sh -c 'TZ=GMT0 date | sed -e "s/... \(19[0-9][0-9]\)$/\1/"'
|
||||
|
||||
You are allowed to update/fix/revise your entry. To do so, set
|
||||
the 'fix' line in the ---entry--- section to 'y' instead of 'n'.
|
||||
Be sure that the resubmission uses the same title and entry number
|
||||
as well, as these are used to determine which entry is to be
|
||||
replaced.
|
||||
|
||||
JUDGING PROCESS:
|
||||
|
||||
Entries are judged by Leonid A. Broukhis, Jeremy Horn, Landon Curt Noll |
|
||||
and Peter Seebach. |
|
||||
|
||||
Entries are unpacked into individual directories. The EMail message
|
||||
is unpacked into individual files, each containing:
|
||||
|
||||
---entry--- section
|
||||
all ---author--- sections
|
||||
all ---info--- sections
|
||||
---build--- section
|
||||
---program--- section
|
||||
any other text, including the EMail message headers
|
||||
|
||||
Prior to judging, the 'any other text' file is scanned to be sure
|
||||
it does not contain useful information (or in case the entry was
|
||||
malformed and did not unpack correctly). Information from the
|
||||
---author--- sections and the title from the ---entry--- section
|
||||
are not read until the judging process is complete, and then only
|
||||
from entries that have won an award.
|
||||
|
||||
The above process helps keep us biased for/against any one particular
|
||||
individual. We are usually kept in the dark as much as you are
|
||||
until the final awards are given. We like the surprise of finding
|
||||
out in the end, who won and where they were from.
|
||||
|
||||
We attempt to keep all entries anonymous, unless they win an award.
|
||||
Because the main 'prize' of winning is being announced, we make all
|
||||
attempts to send non-winners into oblivion. We remove all non-winning
|
||||
files, and shred all related paper. By tradition, we do not even
|
||||
reveal the number of entries that we received. (For the curious,
|
||||
we do indicate the volume of paper consumed when presenting the IOCCC
|
||||
winners at talks)
|
||||
|
||||
After the Usenix announcement, we attempt to send EMail to the
|
||||
authors of the winning entries. One reason we do this is to give
|
||||
the authors a chance to comment on the way we have presented their
|
||||
entry. They are given the chance to correct mistakes and typos. We
|
||||
often accept their suggestions/comments about our remarks as well.
|
||||
This is done prior to posting the winners to the wide world.
|
||||
|
||||
Judging consists of a number of elimination rounds. During a round,
|
||||
the collection of entries are divided into two roughly equal piles;
|
||||
the pile that advances on to the next round, and the pile that does
|
||||
not. We also re-examine the entries that were eliminated in the
|
||||
previous round. Thus, an entry gets at least two readings.
|
||||
|
||||
A reading consists of a number of actions:
|
||||
|
||||
* reading the ---entry--- section
|
||||
* reading the uudecoded ---build--- section
|
||||
* reading the uudecoded ---program--- section
|
||||
* reading the uudecoded ---info--- section(s), if any
|
||||
* passing the source thru the C pre-processor
|
||||
skipping over any #include files
|
||||
* performing a number of C beautify/cleanup edits on the source
|
||||
* passing the beautified source thru the C pre-processor
|
||||
skipping over any #include files
|
||||
|
||||
In later rounds, other actions are performed:
|
||||
|
||||
* linting the source
|
||||
* compiling/building the source
|
||||
* running the program
|
||||
* performing miscellaneous tests on the source and binary
|
||||
|
||||
Until we reduce the stack of entries down to about 25 entries, entries
|
||||
are judged on an individual basis. An entry is set aside because it
|
||||
does not, in our opinion, meet the standard established by the round.
|
||||
When the number of entries thins to about 25 entries, we begin to form
|
||||
award categories. Entries begin to compete with each other for awards.
|
||||
An entry often will compete in several categories.
|
||||
|
||||
The actual award category list will vary depending on the types of entries
|
||||
we receive. A typical category list might be:
|
||||
|
||||
* best small one line program
|
||||
* best small program
|
||||
* strangest/most creative source layout
|
||||
* most useful obfuscated program
|
||||
* best game that is obfuscated
|
||||
* most creatively obfuscated program
|
||||
* most deceptive C code
|
||||
* best X client (see OUR LIKES AND DISLIKES)
|
||||
* best abuse of ANSI C
|
||||
* worst abuse of the rules
|
||||
* <anything else so strange that it deserves an award>
|
||||
|
||||
We do not limit ourselves to this list. For example, a few entries are so
|
||||
good/bad that they are declared winners at the start of the final round.
|
||||
We will invent awards categories for them, if necessary.
|
||||
|
||||
In the final round process, we perform the difficult tasks of
|
||||
reducing the remaining entries (typically about 25) down to 8 or 10
|
||||
winners. Often we are confident that the entries that make it into
|
||||
the final round are definitely better than the ones that do not
|
||||
make it. The selection of the winners out of the final round, is
|
||||
less clear cut.
|
||||
|
||||
Sometimes a final round entry os good enough to win, but is beat out
|
||||
by a similar, but slightly better entry. For this reason, it is
|
||||
sometimes worthwhile to re-enter an improved version of an entry
|
||||
that failed to win in a previous year. This assumes, of course,
|
||||
that the entry is worth improving in the first place!
|
||||
|
||||
More often than not, we select a small entry (usually one line), a
|
||||
strange/creative layout entry, and an entry that abuses the contest
|
||||
rules in some way.
|
||||
|
||||
In the end, we traditionally pick one entry as 'best'. Sometimes such
|
||||
an entry simply far exceeds any of the other entries. More often, the
|
||||
'best' is picked because it does well in a number of categories.
|
||||
|
||||
|
||||
ANNOUNCEMENT OF WINNERS:
|
||||
|
||||
The first announcement, occurs at the main Usenix conference. By
|
||||
tradition, this is done during the IOCCC BOF. However due to the |
|
||||
schedule change of 1998, an announcement may take place on the |
|
||||
web first in early 1999. |
|
||||
|
||||
Winning entries will be posted in February to the following groups:
|
||||
|
||||
comp.lang.c comp.lang.c.moderated alt.sources |
|
||||
|
||||
In addition, pointers to these postings are posted to the following
|
||||
|
||||
comp.sources.misc comp.windows.x comp.programming |
|
||||
misc.misc comp.std.c alt.folklore.computers |
|
||||
|
||||
Winning entries will be deposited into the uunet archives. See
|
||||
below for details.
|
||||
|
||||
Often, winning entries are published in selected magazines from around
|
||||
the world. Winners have appeared in books ("The New Hackers Dictionary")
|
||||
and on T-Shirts.
|
||||
|
||||
Last, but not least, winners receive international fame and flames! :-)
|
||||
|
||||
|
||||
FOR MORE INFORMATION:
|
||||
|
||||
You may contact the judges by sending EMail to the following address:
|
||||
|
||||
questions@ioccc.org (not the address for submitting entries) |
|
||||
|
||||
Questions and comments about the contest are welcome. Comments about
|
||||
confusing rules and guidelines are also welcome.
|
||||
|
||||
You must include the words ``ioccc question'' in the subject of your
|
||||
EMail message when sending EMail to the judges.
|
||||
|
||||
The rules and the guidelines may (and often do) change from year to
|
||||
year. You should be sure you have the current rules and guidelines
|
||||
prior to submitting entries.
|
||||
|
||||
Check out the IOCCC Web page:
|
||||
|
||||
http://www.ioccc.org |
|
||||
|
||||
It has rules, guidelines and winners of previous contests (1984 to date). |
|
||||
|
||||
|
||||
Leonid A. Broukhis |
|
||||
Jeremy Horn |
|
||||
chongo <Landon Curt Noll> /\cc/\
|
||||
Peter Seebach |
|
||||
@@ -0,0 +1,22 @@
|
||||
1000000 0 0
|
||||
951057 309017 0
|
||||
809017 587785 0
|
||||
587785 809017 0
|
||||
309017 951057 0
|
||||
0 1000000 0
|
||||
-309017 951057 0
|
||||
-587785 809017 0
|
||||
-809017 587785 0
|
||||
-951057 309017 0
|
||||
-1e+06 0 0
|
||||
-951057 -309017 0
|
||||
-809017 -587785 0
|
||||
-587785 -809017 0
|
||||
-309017 -951057 0
|
||||
0 -1000000 0
|
||||
309017 -951057 0
|
||||
587785 -809017 0
|
||||
809017 -587785 0
|
||||
951057 -309017 0
|
||||
1000000 0 0
|
||||
0 0 0
|
||||
+931
@@ -0,0 +1,931 @@
|
||||
AlWuzEre 5580
|
||||
0.104638 -1.025458 0.533203 0.104591 -1.102728 0.533203
|
||||
0.104591 -1.102728 0.533203 0.104591 -1.102728 0.000000
|
||||
0.104638 -1.025458 0.533203 0.104591 -1.102728 0.000000
|
||||
0.104638 -1.025458 0.533203 0.104591 -1.102728 0.000000
|
||||
0.104591 -1.102728 0.000000 0.104638 -1.025458 0.000000
|
||||
0.104638 -1.025458 0.533203 0.104638 -1.025458 0.000000
|
||||
0.104591 -1.102728 0.533203 0.104638 -1.025458 0.533203
|
||||
0.104638 -1.025458 0.533203 0.104638 -1.025458 0.000000
|
||||
0.104591 -1.102728 0.533203 0.104638 -1.025458 0.000000
|
||||
0.104591 -1.102728 0.533203 0.104638 -1.025458 0.000000
|
||||
0.104638 -1.025458 0.000000 0.104591 -1.102728 0.000000
|
||||
0.104591 -1.102728 0.533203 0.104591 -1.102728 0.000000
|
||||
0.104844 -0.684881 0.543823 0.104812 -0.737661 0.538925
|
||||
0.104812 -0.737661 0.538925 0.104877 -0.630911 0.538925
|
||||
0.104844 -0.684881 0.543823 0.104877 -0.630911 0.538925
|
||||
0.104877 -0.630911 0.538925 0.104812 -0.737661 0.538925
|
||||
0.104812 -0.737661 0.538925 0.104783 -0.786871 0.524231
|
||||
0.104877 -0.630911 0.538925 0.104783 -0.786871 0.524231
|
||||
0.104877 -0.630911 0.538925 0.104783 -0.786871 0.524231
|
||||
0.104783 -0.786871 0.524231 0.104907 -0.581060 0.524231
|
||||
0.104877 -0.630911 0.538925 0.104907 -0.581060 0.524231
|
||||
0.104907 -0.581060 0.524231 0.104783 -0.786871 0.524231
|
||||
0.104783 -0.786871 0.524231 0.104755 -0.832144 0.500015
|
||||
0.104907 -0.581060 0.524231 0.104755 -0.832144 0.500015
|
||||
0.104907 -0.581060 0.524231 0.104755 -0.832144 0.500015
|
||||
0.104755 -0.832144 0.500015 0.104935 -0.535330 0.499832
|
||||
0.104907 -0.581060 0.524231 0.104935 -0.535330 0.499832
|
||||
0.104935 -0.535330 0.499832 0.104755 -0.832144 0.500015
|
||||
0.104755 -0.832144 0.500015 0.104730 -0.873114 0.466553
|
||||
0.104935 -0.535330 0.499832 0.104730 -0.873114 0.466553
|
||||
0.104935 -0.535330 0.499832 0.104730 -0.873114 0.466553
|
||||
0.104730 -0.873114 0.466553 0.104844 -0.685614 0.466553
|
||||
0.104935 -0.535330 0.499832 0.104844 -0.685614 0.466553
|
||||
0.104844 -0.685614 0.466553 0.104730 -0.873114 0.466553
|
||||
0.104730 -0.873114 0.466553 0.104801 -0.757391 0.452271
|
||||
0.104844 -0.685614 0.466553 0.104801 -0.757391 0.452271
|
||||
0.104801 -0.757391 0.452271 0.104730 -0.873114 0.466553
|
||||
0.104730 -0.873114 0.466553 0.104709 -0.909185 0.423798
|
||||
0.104801 -0.757391 0.452271 0.104709 -0.909185 0.423798
|
||||
0.104801 -0.757391 0.452271 0.104709 -0.909185 0.423798
|
||||
0.104709 -0.909185 0.423798 0.104764 -0.817816 0.410889
|
||||
0.104801 -0.757391 0.452271 0.104764 -0.817816 0.410889
|
||||
0.104764 -0.817816 0.410889 0.104709 -0.909185 0.423798
|
||||
0.104709 -0.909185 0.423798 0.104693 -0.935369 0.376099
|
||||
0.104764 -0.817816 0.410889 0.104693 -0.935369 0.376099
|
||||
0.104764 -0.817816 0.410889 0.104693 -0.935369 0.376099
|
||||
0.104693 -0.935369 0.376099 0.104738 -0.860662 0.345337
|
||||
0.104764 -0.817816 0.410889 0.104738 -0.860662 0.345337
|
||||
0.104738 -0.860662 0.345337 0.104693 -0.935369 0.376099
|
||||
0.104693 -0.935369 0.376099 0.104683 -0.951300 0.324463
|
||||
0.104738 -0.860662 0.345337 0.104683 -0.951300 0.324463
|
||||
0.104738 -0.860662 0.345337 0.104683 -0.951300 0.324463
|
||||
0.104683 -0.951300 0.324463 0.104680 -0.956610 0.269897
|
||||
0.104738 -0.860662 0.345337 0.104680 -0.956610 0.269897
|
||||
0.104738 -0.860662 0.345337 0.104680 -0.956610 0.269897
|
||||
0.104680 -0.956610 0.269897 0.104729 -0.876043 0.269165
|
||||
0.104738 -0.860662 0.345337 0.104729 -0.876043 0.269165
|
||||
0.104729 -0.876043 0.269165 0.104680 -0.956610 0.269897
|
||||
0.104680 -0.956610 0.269897 0.104737 -0.862127 0.190247
|
||||
0.104729 -0.876043 0.269165 0.104737 -0.862127 0.190247
|
||||
0.104737 -0.862127 0.190247 0.104680 -0.956610 0.269897
|
||||
0.104680 -0.956610 0.269897 0.104690 -0.939032 0.166809
|
||||
0.104737 -0.862127 0.190247 0.104690 -0.939032 0.166809
|
||||
0.104737 -0.862127 0.190247 0.104690 -0.939032 0.166809
|
||||
0.104690 -0.939032 0.166809 0.104761 -0.822210 0.125977
|
||||
0.104737 -0.862127 0.190247 0.104761 -0.822210 0.125977
|
||||
0.104761 -0.822210 0.125977 0.104690 -0.939032 0.166809
|
||||
0.104690 -0.939032 0.166809 0.104800 -0.758856 0.081665
|
||||
0.104761 -0.822210 0.125977 0.104800 -0.758856 0.081665
|
||||
0.104800 -0.758856 0.081665 0.104690 -0.939032 0.166809
|
||||
0.104690 -0.939032 0.166809 0.104722 -0.887396 0.080933
|
||||
0.104800 -0.758856 0.081665 0.104722 -0.887396 0.080933
|
||||
0.104800 -0.758856 0.081665 0.104722 -0.887396 0.080933
|
||||
0.104722 -0.887396 0.080933 0.104844 -0.685614 0.065918
|
||||
0.104800 -0.758856 0.081665 0.104844 -0.685614 0.065918
|
||||
0.104844 -0.685614 0.065918 0.104722 -0.887396 0.080933
|
||||
0.104722 -0.887396 0.080933 0.104748 -0.844503 0.041107
|
||||
0.104844 -0.685614 0.065918 0.104748 -0.844503 0.041107
|
||||
0.104935 -0.535330 0.499832 0.104844 -0.685614 0.466553
|
||||
0.104844 -0.685614 0.466553 0.104960 -0.493719 0.465820
|
||||
0.104935 -0.535330 0.499832 0.104960 -0.493719 0.465820
|
||||
0.104960 -0.493719 0.465820 0.104844 -0.685614 0.466553
|
||||
0.104844 -0.685614 0.466553 0.104891 -0.608893 0.450989
|
||||
0.104960 -0.493719 0.465820 0.104891 -0.608893 0.450989
|
||||
0.104960 -0.493719 0.465820 0.104891 -0.608893 0.450989
|
||||
0.104891 -0.608893 0.450989 0.104982 -0.458105 0.423523
|
||||
0.104960 -0.493719 0.465820 0.104982 -0.458105 0.423523
|
||||
0.104982 -0.458105 0.423523 0.104891 -0.608893 0.450989
|
||||
0.104891 -0.608893 0.450989 0.104930 -0.543890 0.402832
|
||||
0.104982 -0.458105 0.423523 0.104930 -0.543890 0.402832
|
||||
0.104982 -0.458105 0.423523 0.104930 -0.543890 0.402832
|
||||
0.104930 -0.543890 0.402832 0.104997 -0.432562 0.376465
|
||||
0.104982 -0.458105 0.423523 0.104997 -0.432562 0.376465
|
||||
0.104997 -0.432562 0.376465 0.104930 -0.543890 0.402832
|
||||
0.104930 -0.543890 0.402832 0.104954 -0.504889 0.341125
|
||||
0.104997 -0.432562 0.376465 0.104954 -0.504889 0.341125
|
||||
0.104997 -0.432562 0.376465 0.104954 -0.504889 0.341125
|
||||
0.104954 -0.504889 0.341125 0.105007 -0.417181 0.325104
|
||||
0.104997 -0.432562 0.376465 0.105007 -0.417181 0.325104
|
||||
0.105007 -0.417181 0.325104 0.104954 -0.504889 0.341125
|
||||
0.104954 -0.504889 0.341125 0.104962 -0.491522 0.270630
|
||||
0.105007 -0.417181 0.325104 0.104962 -0.491522 0.270630
|
||||
0.105007 -0.417181 0.325104 0.104962 -0.491522 0.270630
|
||||
0.104962 -0.491522 0.270630 0.105010 -0.412054 0.269897
|
||||
0.105007 -0.417181 0.325104 0.105010 -0.412054 0.269897
|
||||
0.105010 -0.412054 0.269897 0.104962 -0.491522 0.270630
|
||||
0.104962 -0.491522 0.270630 0.104953 -0.505438 0.190567
|
||||
0.105010 -0.412054 0.269897 0.104953 -0.505438 0.190567
|
||||
0.105010 -0.412054 0.269897 0.104953 -0.505438 0.190567
|
||||
0.104953 -0.505438 0.190567 0.104999 -0.429632 0.165344
|
||||
0.105010 -0.412054 0.269897 0.104999 -0.429632 0.165344
|
||||
0.104999 -0.429632 0.165344 0.104953 -0.505438 0.190567
|
||||
0.104953 -0.505438 0.190567 0.104928 -0.547186 0.124695
|
||||
0.104999 -0.429632 0.165344 0.104928 -0.547186 0.124695
|
||||
0.104999 -0.429632 0.165344 0.104928 -0.547186 0.124695
|
||||
0.104928 -0.547186 0.124695 0.104986 -0.451605 0.119980
|
||||
0.104999 -0.429632 0.165344 0.104986 -0.451605 0.119980
|
||||
0.104986 -0.451605 0.119980 0.104928 -0.547186 0.124695
|
||||
0.104928 -0.547186 0.124695 0.104890 -0.609625 0.080612
|
||||
0.104986 -0.451605 0.119980 0.104890 -0.609625 0.080612
|
||||
0.104986 -0.451605 0.119980 0.104890 -0.609625 0.080612
|
||||
0.104890 -0.609625 0.080612 0.104967 -0.482367 0.079468
|
||||
0.104986 -0.451605 0.119980 0.104967 -0.482367 0.079468
|
||||
0.104967 -0.482367 0.079468 0.104890 -0.609625 0.080612
|
||||
0.104890 -0.609625 0.080612 0.104844 -0.685614 0.065918
|
||||
0.104967 -0.482367 0.079468 0.104844 -0.685614 0.065918
|
||||
0.104967 -0.482367 0.079468 0.104844 -0.685614 0.065918
|
||||
0.104844 -0.685614 0.065918 0.104748 -0.844503 0.041107
|
||||
0.104967 -0.482367 0.079468 0.104748 -0.844503 0.041107
|
||||
0.104967 -0.482367 0.079468 0.104748 -0.844503 0.041107
|
||||
0.104748 -0.844503 0.041107 0.104941 -0.526175 0.040283
|
||||
0.104967 -0.482367 0.079468 0.104941 -0.526175 0.040283
|
||||
0.104941 -0.526175 0.040283 0.104748 -0.844503 0.041107
|
||||
0.104748 -0.844503 0.041107 0.104777 -0.796392 0.012451
|
||||
0.104941 -0.526175 0.040283 0.104777 -0.796392 0.012451
|
||||
0.104941 -0.526175 0.040283 0.104777 -0.796392 0.012451
|
||||
0.104777 -0.796392 0.012451 0.104911 -0.574835 0.012085
|
||||
0.104941 -0.526175 0.040283 0.104911 -0.574835 0.012085
|
||||
0.104911 -0.574835 0.012085 0.104777 -0.796392 0.012451
|
||||
0.104777 -0.796392 0.012451 0.104809 -0.743338 -0.004852
|
||||
0.104911 -0.574835 0.012085 0.104809 -0.743338 -0.004852
|
||||
0.104911 -0.574835 0.012085 0.104809 -0.743338 -0.004852
|
||||
0.104809 -0.743338 -0.004852 0.104879 -0.628073 -0.004944
|
||||
0.104911 -0.574835 0.012085 0.104879 -0.628073 -0.004944
|
||||
0.104879 -0.628073 -0.004944 0.104809 -0.743338 -0.004852
|
||||
0.104809 -0.743338 -0.004852 0.104844 -0.685614 -0.010620
|
||||
0.104879 -0.628073 -0.004944 0.104844 -0.685614 -0.010620
|
||||
0.104844 -0.684881 0.543823 0.104877 -0.630911 0.538925
|
||||
0.104877 -0.630911 0.538925 0.104812 -0.737661 0.538925
|
||||
0.104844 -0.684881 0.543823 0.104812 -0.737661 0.538925
|
||||
0.104812 -0.737661 0.538925 0.104877 -0.630911 0.538925
|
||||
0.104877 -0.630911 0.538925 0.104907 -0.581060 0.524231
|
||||
0.104812 -0.737661 0.538925 0.104907 -0.581060 0.524231
|
||||
0.104812 -0.737661 0.538925 0.104907 -0.581060 0.524231
|
||||
0.104907 -0.581060 0.524231 0.104783 -0.786871 0.524231
|
||||
0.104812 -0.737661 0.538925 0.104783 -0.786871 0.524231
|
||||
0.104783 -0.786871 0.524231 0.104907 -0.581060 0.524231
|
||||
0.104907 -0.581060 0.524231 0.104755 -0.832144 0.500015
|
||||
0.104783 -0.786871 0.524231 0.104755 -0.832144 0.500015
|
||||
0.104755 -0.832144 0.500015 0.104907 -0.581060 0.524231
|
||||
0.104907 -0.581060 0.524231 0.104935 -0.535330 0.499832
|
||||
0.104755 -0.832144 0.500015 0.104935 -0.535330 0.499832
|
||||
0.104755 -0.832144 0.500015 0.104935 -0.535330 0.499832
|
||||
0.104935 -0.535330 0.499832 0.104844 -0.685614 0.466553
|
||||
0.104755 -0.832144 0.500015 0.104844 -0.685614 0.466553
|
||||
0.104755 -0.832144 0.500015 0.104844 -0.685614 0.466553
|
||||
0.104844 -0.685614 0.466553 0.104730 -0.873114 0.466553
|
||||
0.104755 -0.832144 0.500015 0.104730 -0.873114 0.466553
|
||||
0.104730 -0.873114 0.466553 0.104844 -0.685614 0.466553
|
||||
0.104844 -0.685614 0.466553 0.104801 -0.757391 0.452271
|
||||
0.104730 -0.873114 0.466553 0.104801 -0.757391 0.452271
|
||||
0.104730 -0.873114 0.466553 0.104801 -0.757391 0.452271
|
||||
0.104801 -0.757391 0.452271 0.104709 -0.909185 0.423798
|
||||
0.104730 -0.873114 0.466553 0.104709 -0.909185 0.423798
|
||||
0.104709 -0.909185 0.423798 0.104801 -0.757391 0.452271
|
||||
0.104801 -0.757391 0.452271 0.104764 -0.817816 0.410889
|
||||
0.104709 -0.909185 0.423798 0.104764 -0.817816 0.410889
|
||||
0.104709 -0.909185 0.423798 0.104764 -0.817816 0.410889
|
||||
0.104764 -0.817816 0.410889 0.104693 -0.935369 0.376099
|
||||
0.104709 -0.909185 0.423798 0.104693 -0.935369 0.376099
|
||||
0.104693 -0.935369 0.376099 0.104764 -0.817816 0.410889
|
||||
0.104764 -0.817816 0.410889 0.104738 -0.860662 0.345337
|
||||
0.104693 -0.935369 0.376099 0.104738 -0.860662 0.345337
|
||||
0.104693 -0.935369 0.376099 0.104738 -0.860662 0.345337
|
||||
0.104738 -0.860662 0.345337 0.104683 -0.951300 0.324463
|
||||
0.104693 -0.935369 0.376099 0.104683 -0.951300 0.324463
|
||||
0.104683 -0.951300 0.324463 0.104738 -0.860662 0.345337
|
||||
0.104738 -0.860662 0.345337 0.104680 -0.956610 0.269897
|
||||
0.104683 -0.951300 0.324463 0.104680 -0.956610 0.269897
|
||||
0.104680 -0.956610 0.269897 0.104738 -0.860662 0.345337
|
||||
0.104738 -0.860662 0.345337 0.104729 -0.876043 0.269165
|
||||
0.104680 -0.956610 0.269897 0.104729 -0.876043 0.269165
|
||||
0.104680 -0.956610 0.269897 0.104729 -0.876043 0.269165
|
||||
0.104729 -0.876043 0.269165 0.104737 -0.862127 0.190247
|
||||
0.104680 -0.956610 0.269897 0.104737 -0.862127 0.190247
|
||||
0.104680 -0.956610 0.269897 0.104737 -0.862127 0.190247
|
||||
0.104737 -0.862127 0.190247 0.104690 -0.939032 0.166809
|
||||
0.104680 -0.956610 0.269897 0.104690 -0.939032 0.166809
|
||||
0.104690 -0.939032 0.166809 0.104737 -0.862127 0.190247
|
||||
0.104737 -0.862127 0.190247 0.104761 -0.822210 0.125977
|
||||
0.104690 -0.939032 0.166809 0.104761 -0.822210 0.125977
|
||||
0.104690 -0.939032 0.166809 0.104761 -0.822210 0.125977
|
||||
0.104761 -0.822210 0.125977 0.104800 -0.758856 0.081665
|
||||
0.104690 -0.939032 0.166809 0.104800 -0.758856 0.081665
|
||||
0.104690 -0.939032 0.166809 0.104800 -0.758856 0.081665
|
||||
0.104800 -0.758856 0.081665 0.104722 -0.887396 0.080933
|
||||
0.104690 -0.939032 0.166809 0.104722 -0.887396 0.080933
|
||||
0.104722 -0.887396 0.080933 0.104800 -0.758856 0.081665
|
||||
0.104800 -0.758856 0.081665 0.104844 -0.685614 0.065918
|
||||
0.104722 -0.887396 0.080933 0.104844 -0.685614 0.065918
|
||||
0.104722 -0.887396 0.080933 0.104844 -0.685614 0.065918
|
||||
0.104844 -0.685614 0.065918 0.104748 -0.844503 0.041107
|
||||
0.104722 -0.887396 0.080933 0.104748 -0.844503 0.041107
|
||||
0.104844 -0.685614 0.466553 0.104935 -0.535330 0.499832
|
||||
0.104935 -0.535330 0.499832 0.104960 -0.493719 0.465820
|
||||
0.104844 -0.685614 0.466553 0.104960 -0.493719 0.465820
|
||||
0.104844 -0.685614 0.466553 0.104960 -0.493719 0.465820
|
||||
0.104960 -0.493719 0.465820 0.104891 -0.608893 0.450989
|
||||
0.104844 -0.685614 0.466553 0.104891 -0.608893 0.450989
|
||||
0.104891 -0.608893 0.450989 0.104960 -0.493719 0.465820
|
||||
0.104960 -0.493719 0.465820 0.104982 -0.458105 0.423523
|
||||
0.104891 -0.608893 0.450989 0.104982 -0.458105 0.423523
|
||||
0.104891 -0.608893 0.450989 0.104982 -0.458105 0.423523
|
||||
0.104982 -0.458105 0.423523 0.104930 -0.543890 0.402832
|
||||
0.104891 -0.608893 0.450989 0.104930 -0.543890 0.402832
|
||||
0.104930 -0.543890 0.402832 0.104982 -0.458105 0.423523
|
||||
0.104982 -0.458105 0.423523 0.104997 -0.432562 0.376465
|
||||
0.104930 -0.543890 0.402832 0.104997 -0.432562 0.376465
|
||||
0.104930 -0.543890 0.402832 0.104997 -0.432562 0.376465
|
||||
0.104997 -0.432562 0.376465 0.104954 -0.504889 0.341125
|
||||
0.104930 -0.543890 0.402832 0.104954 -0.504889 0.341125
|
||||
0.104954 -0.504889 0.341125 0.104997 -0.432562 0.376465
|
||||
0.104997 -0.432562 0.376465 0.105007 -0.417181 0.325104
|
||||
0.104954 -0.504889 0.341125 0.105007 -0.417181 0.325104
|
||||
0.104954 -0.504889 0.341125 0.105007 -0.417181 0.325104
|
||||
0.105007 -0.417181 0.325104 0.104962 -0.491522 0.270630
|
||||
0.104954 -0.504889 0.341125 0.104962 -0.491522 0.270630
|
||||
0.104962 -0.491522 0.270630 0.105007 -0.417181 0.325104
|
||||
0.105007 -0.417181 0.325104 0.105010 -0.412054 0.269897
|
||||
0.104962 -0.491522 0.270630 0.105010 -0.412054 0.269897
|
||||
0.104962 -0.491522 0.270630 0.105010 -0.412054 0.269897
|
||||
0.105010 -0.412054 0.269897 0.104953 -0.505438 0.190567
|
||||
0.104962 -0.491522 0.270630 0.104953 -0.505438 0.190567
|
||||
0.104953 -0.505438 0.190567 0.105010 -0.412054 0.269897
|
||||
0.105010 -0.412054 0.269897 0.104999 -0.429632 0.165344
|
||||
0.104953 -0.505438 0.190567 0.104999 -0.429632 0.165344
|
||||
0.104953 -0.505438 0.190567 0.104999 -0.429632 0.165344
|
||||
0.104999 -0.429632 0.165344 0.104928 -0.547186 0.124695
|
||||
0.104953 -0.505438 0.190567 0.104928 -0.547186 0.124695
|
||||
0.104928 -0.547186 0.124695 0.104999 -0.429632 0.165344
|
||||
0.104999 -0.429632 0.165344 0.104986 -0.451605 0.119980
|
||||
0.104928 -0.547186 0.124695 0.104986 -0.451605 0.119980
|
||||
0.104928 -0.547186 0.124695 0.104986 -0.451605 0.119980
|
||||
0.104986 -0.451605 0.119980 0.104890 -0.609625 0.080612
|
||||
0.104928 -0.547186 0.124695 0.104890 -0.609625 0.080612
|
||||
0.104890 -0.609625 0.080612 0.104986 -0.451605 0.119980
|
||||
0.104986 -0.451605 0.119980 0.104967 -0.482367 0.079468
|
||||
0.104890 -0.609625 0.080612 0.104967 -0.482367 0.079468
|
||||
0.104890 -0.609625 0.080612 0.104967 -0.482367 0.079468
|
||||
0.104967 -0.482367 0.079468 0.104844 -0.685614 0.065918
|
||||
0.104890 -0.609625 0.080612 0.104844 -0.685614 0.065918
|
||||
0.104844 -0.685614 0.065918 0.104967 -0.482367 0.079468
|
||||
0.104967 -0.482367 0.079468 0.104748 -0.844503 0.041107
|
||||
0.104844 -0.685614 0.065918 0.104748 -0.844503 0.041107
|
||||
0.104748 -0.844503 0.041107 0.104967 -0.482367 0.079468
|
||||
0.104967 -0.482367 0.079468 0.104941 -0.526175 0.040283
|
||||
0.104748 -0.844503 0.041107 0.104941 -0.526175 0.040283
|
||||
0.104748 -0.844503 0.041107 0.104941 -0.526175 0.040283
|
||||
0.104941 -0.526175 0.040283 0.104777 -0.796392 0.012451
|
||||
0.104748 -0.844503 0.041107 0.104777 -0.796392 0.012451
|
||||
0.104777 -0.796392 0.012451 0.104941 -0.526175 0.040283
|
||||
0.104941 -0.526175 0.040283 0.104911 -0.574835 0.012085
|
||||
0.104777 -0.796392 0.012451 0.104911 -0.574835 0.012085
|
||||
0.104777 -0.796392 0.012451 0.104911 -0.574835 0.012085
|
||||
0.104911 -0.574835 0.012085 0.104809 -0.743338 -0.004852
|
||||
0.104777 -0.796392 0.012451 0.104809 -0.743338 -0.004852
|
||||
0.104809 -0.743338 -0.004852 0.104911 -0.574835 0.012085
|
||||
0.104911 -0.574835 0.012085 0.104879 -0.628073 -0.004944
|
||||
0.104809 -0.743338 -0.004852 0.104879 -0.628073 -0.004944
|
||||
0.104809 -0.743338 -0.004852 0.104879 -0.628073 -0.004944
|
||||
0.104879 -0.628073 -0.004944 0.104844 -0.685614 -0.010620
|
||||
0.104809 -0.743338 -0.004852 0.104844 -0.685614 -0.010620
|
||||
0.105346 0.143121 0.133667 0.105289 0.047907 0.133667
|
||||
0.105289 0.047907 0.133667 0.105272 0.020853 0.104599
|
||||
0.105346 0.143121 0.133667 0.105272 0.020853 0.104599
|
||||
0.105346 0.143121 0.133667 0.105272 0.020853 0.104599
|
||||
0.105272 0.020853 0.104599 0.105252 -0.012701 0.083313
|
||||
0.105346 0.143121 0.133667 0.105252 -0.012701 0.083313
|
||||
0.105346 0.143121 0.133667 0.105252 -0.012701 0.083313
|
||||
0.105252 -0.012701 0.083313 0.105321 0.101694 0.071915
|
||||
0.105346 0.143121 0.133667 0.105321 0.101694 0.071915
|
||||
0.105321 0.101694 0.071915 0.105252 -0.012701 0.083313
|
||||
0.105252 -0.012701 0.083313 0.105202 -0.095282 0.065918
|
||||
0.105321 0.101694 0.071915 0.105202 -0.095282 0.065918
|
||||
0.105321 0.101694 0.071915 0.105202 -0.095282 0.065918
|
||||
0.105202 -0.095282 0.065918 0.105106 -0.254172 0.041107
|
||||
0.105321 0.101694 0.071915 0.105106 -0.254172 0.041107
|
||||
0.105321 0.101694 0.071915 0.105106 -0.254172 0.041107
|
||||
0.105106 -0.254172 0.041107 0.105288 0.046991 0.026550
|
||||
0.105321 0.101694 0.071915 0.105288 0.046991 0.026550
|
||||
0.105288 0.046991 0.026550 0.105106 -0.254172 0.041107
|
||||
0.105106 -0.254172 0.041107 0.105135 -0.206061 0.012451
|
||||
0.105288 0.046991 0.026550 0.105135 -0.206061 0.012451
|
||||
0.105288 0.046991 0.026550 0.105135 -0.206061 0.012451
|
||||
0.105135 -0.206061 0.012451 0.105248 -0.019247 -0.001328
|
||||
0.105288 0.046991 0.026550 0.105248 -0.019247 -0.001328
|
||||
0.105248 -0.019247 -0.001328 0.105135 -0.206061 0.012451
|
||||
0.105135 -0.206061 0.012451 0.105167 -0.153006 -0.004852
|
||||
0.105248 -0.019247 -0.001328 0.105167 -0.153006 -0.004852
|
||||
0.105248 -0.019247 -0.001328 0.105167 -0.153006 -0.004852
|
||||
0.105167 -0.153006 -0.004852 0.105202 -0.095282 -0.010620
|
||||
0.105248 -0.019247 -0.001328 0.105202 -0.095282 -0.010620
|
||||
0.105113 -0.241812 0.500015 0.105088 -0.282782 0.466553
|
||||
0.105088 -0.282782 0.466553 0.105202 -0.095282 0.466553
|
||||
0.105113 -0.241812 0.500015 0.105202 -0.095282 0.466553
|
||||
0.105202 -0.095282 0.466553 0.105088 -0.282782 0.466553
|
||||
0.105088 -0.282782 0.466553 0.105158 -0.167059 0.452271
|
||||
0.105202 -0.095282 0.466553 0.105158 -0.167059 0.452271
|
||||
0.105158 -0.167059 0.452271 0.105088 -0.282782 0.466553
|
||||
0.105088 -0.282782 0.466553 0.105066 -0.318854 0.423294
|
||||
0.105158 -0.167059 0.452271 0.105066 -0.318854 0.423294
|
||||
0.105158 -0.167059 0.452271 0.105066 -0.318854 0.423294
|
||||
0.105066 -0.318854 0.423294 0.105122 -0.227484 0.410889
|
||||
0.105158 -0.167059 0.452271 0.105122 -0.227484 0.410889
|
||||
0.105122 -0.227484 0.410889 0.105066 -0.318854 0.423294
|
||||
0.105066 -0.318854 0.423294 0.105050 -0.345038 0.375549
|
||||
0.105122 -0.227484 0.410889 0.105050 -0.345038 0.375549
|
||||
0.105122 -0.227484 0.410889 0.105050 -0.345038 0.375549
|
||||
0.105050 -0.345038 0.375549 0.105096 -0.270331 0.345337
|
||||
0.105122 -0.227484 0.410889 0.105096 -0.270331 0.345337
|
||||
0.105096 -0.270331 0.345337 0.105050 -0.345038 0.375549
|
||||
0.105050 -0.345038 0.375549 0.105041 -0.360968 0.324142
|
||||
0.105096 -0.270331 0.345337 0.105041 -0.360968 0.324142
|
||||
0.105096 -0.270331 0.345337 0.105041 -0.360968 0.324142
|
||||
0.105041 -0.360968 0.324142 0.105038 -0.366278 0.269897
|
||||
0.105096 -0.270331 0.345337 0.105038 -0.366278 0.269897
|
||||
0.105096 -0.270331 0.345337 0.105038 -0.366278 0.269897
|
||||
0.105038 -0.366278 0.269897 0.105086 -0.285712 0.269165
|
||||
0.105096 -0.270331 0.345337 0.105086 -0.285712 0.269165
|
||||
0.105086 -0.285712 0.269165 0.105038 -0.366278 0.269897
|
||||
0.105038 -0.366278 0.269897 0.105095 -0.271796 0.190247
|
||||
0.105086 -0.285712 0.269165 0.105095 -0.271796 0.190247
|
||||
0.105095 -0.271796 0.190247 0.105038 -0.366278 0.269897
|
||||
0.105038 -0.366278 0.269897 0.105048 -0.348700 0.166809
|
||||
0.105095 -0.271796 0.190247 0.105048 -0.348700 0.166809
|
||||
0.105095 -0.271796 0.190247 0.105048 -0.348700 0.166809
|
||||
0.105048 -0.348700 0.166809 0.105119 -0.231879 0.125977
|
||||
0.105095 -0.271796 0.190247 0.105119 -0.231879 0.125977
|
||||
0.105119 -0.231879 0.125977 0.105048 -0.348700 0.166809
|
||||
0.105048 -0.348700 0.166809 0.105157 -0.168524 0.081665
|
||||
0.105119 -0.231879 0.125977 0.105157 -0.168524 0.081665
|
||||
0.105157 -0.168524 0.081665 0.105048 -0.348700 0.166809
|
||||
0.105048 -0.348700 0.166809 0.105080 -0.297064 0.080933
|
||||
0.105157 -0.168524 0.081665 0.105080 -0.297064 0.080933
|
||||
0.105157 -0.168524 0.081665 0.105080 -0.297064 0.080933
|
||||
0.105080 -0.297064 0.080933 0.105202 -0.095282 0.065918
|
||||
0.105157 -0.168524 0.081665 0.105202 -0.095282 0.065918
|
||||
0.105202 -0.095282 0.065918 0.105080 -0.297064 0.080933
|
||||
0.105080 -0.297064 0.080933 0.105106 -0.254172 0.041107
|
||||
0.105202 -0.095282 0.065918 0.105106 -0.254172 0.041107
|
||||
0.105202 -0.094550 0.543823 0.105170 -0.147330 0.538925
|
||||
0.105170 -0.147330 0.538925 0.105249 -0.017508 0.534119
|
||||
0.105202 -0.094550 0.543823 0.105249 -0.017508 0.534119
|
||||
0.105249 -0.017508 0.534119 0.105170 -0.147330 0.538925
|
||||
0.105170 -0.147330 0.538925 0.105140 -0.196539 0.524231
|
||||
0.105249 -0.017508 0.534119 0.105140 -0.196539 0.524231
|
||||
0.105249 -0.017508 0.534119 0.105140 -0.196539 0.524231
|
||||
0.105140 -0.196539 0.524231 0.105290 0.049554 0.505005
|
||||
0.105249 -0.017508 0.534119 0.105290 0.049554 0.505005
|
||||
0.105290 0.049554 0.505005 0.105140 -0.196539 0.524231
|
||||
0.105140 -0.196539 0.524231 0.105113 -0.241812 0.500015
|
||||
0.105290 0.049554 0.505005 0.105113 -0.241812 0.500015
|
||||
0.105290 0.049554 0.505005 0.105113 -0.241812 0.500015
|
||||
0.105113 -0.241812 0.500015 0.105202 -0.095282 0.466553
|
||||
0.105290 0.049554 0.505005 0.105202 -0.095282 0.466553
|
||||
0.105290 0.049554 0.505005 0.105202 -0.095282 0.466553
|
||||
0.105202 -0.095282 0.466553 0.105323 0.103983 0.458130
|
||||
0.105290 0.049554 0.505005 0.105323 0.103983 0.458130
|
||||
0.105323 0.103983 0.458130 0.105202 -0.095282 0.466553
|
||||
0.105202 -0.095282 0.466553 0.105253 -0.010687 0.448608
|
||||
0.105323 0.103983 0.458130 0.105253 -0.010687 0.448608
|
||||
0.105323 0.103983 0.458130 0.105253 -0.010687 0.448608
|
||||
0.105253 -0.010687 0.448608 0.105274 0.023737 0.426270
|
||||
0.105323 0.103983 0.458130 0.105274 0.023737 0.426270
|
||||
0.105323 0.103983 0.458130 0.105274 0.023737 0.426270
|
||||
0.105274 0.023737 0.426270 0.105291 0.052301 0.395142
|
||||
0.105323 0.103983 0.458130 0.105291 0.052301 0.395142
|
||||
0.105323 0.103983 0.458130 0.105291 0.052301 0.395142
|
||||
0.105291 0.052301 0.395142 0.105346 0.143121 0.395142
|
||||
0.105323 0.103983 0.458130 0.105346 0.143121 0.395142
|
||||
0.105289 0.047907 0.133667 0.105346 0.143121 0.133667
|
||||
0.105346 0.143121 0.133667 0.105272 0.020853 0.104599
|
||||
0.105289 0.047907 0.133667 0.105272 0.020853 0.104599
|
||||
0.105272 0.020853 0.104599 0.105346 0.143121 0.133667
|
||||
0.105346 0.143121 0.133667 0.105252 -0.012701 0.083313
|
||||
0.105272 0.020853 0.104599 0.105252 -0.012701 0.083313
|
||||
0.105252 -0.012701 0.083313 0.105346 0.143121 0.133667
|
||||
0.105346 0.143121 0.133667 0.105321 0.101694 0.071915
|
||||
0.105252 -0.012701 0.083313 0.105321 0.101694 0.071915
|
||||
0.105252 -0.012701 0.083313 0.105321 0.101694 0.071915
|
||||
0.105321 0.101694 0.071915 0.105202 -0.095282 0.065918
|
||||
0.105252 -0.012701 0.083313 0.105202 -0.095282 0.065918
|
||||
0.105202 -0.095282 0.065918 0.105321 0.101694 0.071915
|
||||
0.105321 0.101694 0.071915 0.105106 -0.254172 0.041107
|
||||
0.105202 -0.095282 0.065918 0.105106 -0.254172 0.041107
|
||||
0.105106 -0.254172 0.041107 0.105321 0.101694 0.071915
|
||||
0.105321 0.101694 0.071915 0.105288 0.046991 0.026550
|
||||
0.105106 -0.254172 0.041107 0.105288 0.046991 0.026550
|
||||
0.105106 -0.254172 0.041107 0.105288 0.046991 0.026550
|
||||
0.105288 0.046991 0.026550 0.105135 -0.206061 0.012451
|
||||
0.105106 -0.254172 0.041107 0.105135 -0.206061 0.012451
|
||||
0.105135 -0.206061 0.012451 0.105288 0.046991 0.026550
|
||||
0.105288 0.046991 0.026550 0.105248 -0.019247 -0.001328
|
||||
0.105135 -0.206061 0.012451 0.105248 -0.019247 -0.001328
|
||||
0.105135 -0.206061 0.012451 0.105248 -0.019247 -0.001328
|
||||
0.105248 -0.019247 -0.001328 0.105167 -0.153006 -0.004852
|
||||
0.105135 -0.206061 0.012451 0.105167 -0.153006 -0.004852
|
||||
0.105167 -0.153006 -0.004852 0.105248 -0.019247 -0.001328
|
||||
0.105248 -0.019247 -0.001328 0.105202 -0.095282 -0.010620
|
||||
0.105167 -0.153006 -0.004852 0.105202 -0.095282 -0.010620
|
||||
0.105113 -0.241812 0.500015 0.105202 -0.095282 0.466553
|
||||
0.105202 -0.095282 0.466553 0.105088 -0.282782 0.466553
|
||||
0.105113 -0.241812 0.500015 0.105088 -0.282782 0.466553
|
||||
0.105088 -0.282782 0.466553 0.105202 -0.095282 0.466553
|
||||
0.105202 -0.095282 0.466553 0.105158 -0.167059 0.452271
|
||||
0.105088 -0.282782 0.466553 0.105158 -0.167059 0.452271
|
||||
0.105088 -0.282782 0.466553 0.105158 -0.167059 0.452271
|
||||
0.105158 -0.167059 0.452271 0.105066 -0.318854 0.423294
|
||||
0.105088 -0.282782 0.466553 0.105066 -0.318854 0.423294
|
||||
0.105066 -0.318854 0.423294 0.105158 -0.167059 0.452271
|
||||
0.105158 -0.167059 0.452271 0.105122 -0.227484 0.410889
|
||||
0.105066 -0.318854 0.423294 0.105122 -0.227484 0.410889
|
||||
0.105066 -0.318854 0.423294 0.105122 -0.227484 0.410889
|
||||
0.105122 -0.227484 0.410889 0.105050 -0.345038 0.375549
|
||||
0.105066 -0.318854 0.423294 0.105050 -0.345038 0.375549
|
||||
0.105050 -0.345038 0.375549 0.105122 -0.227484 0.410889
|
||||
0.105122 -0.227484 0.410889 0.105096 -0.270331 0.345337
|
||||
0.105050 -0.345038 0.375549 0.105096 -0.270331 0.345337
|
||||
0.105050 -0.345038 0.375549 0.105096 -0.270331 0.345337
|
||||
0.105096 -0.270331 0.345337 0.105041 -0.360968 0.324142
|
||||
0.105050 -0.345038 0.375549 0.105041 -0.360968 0.324142
|
||||
0.105041 -0.360968 0.324142 0.105096 -0.270331 0.345337
|
||||
0.105096 -0.270331 0.345337 0.105038 -0.366278 0.269897
|
||||
0.105041 -0.360968 0.324142 0.105038 -0.366278 0.269897
|
||||
0.105038 -0.366278 0.269897 0.105096 -0.270331 0.345337
|
||||
0.105096 -0.270331 0.345337 0.105086 -0.285712 0.269165
|
||||
0.105038 -0.366278 0.269897 0.105086 -0.285712 0.269165
|
||||
0.105038 -0.366278 0.269897 0.105086 -0.285712 0.269165
|
||||
0.105086 -0.285712 0.269165 0.105095 -0.271796 0.190247
|
||||
0.105038 -0.366278 0.269897 0.105095 -0.271796 0.190247
|
||||
0.105038 -0.366278 0.269897 0.105095 -0.271796 0.190247
|
||||
0.105095 -0.271796 0.190247 0.105048 -0.348700 0.166809
|
||||
0.105038 -0.366278 0.269897 0.105048 -0.348700 0.166809
|
||||
0.105048 -0.348700 0.166809 0.105095 -0.271796 0.190247
|
||||
0.105095 -0.271796 0.190247 0.105119 -0.231879 0.125977
|
||||
0.105048 -0.348700 0.166809 0.105119 -0.231879 0.125977
|
||||
0.105048 -0.348700 0.166809 0.105119 -0.231879 0.125977
|
||||
0.105119 -0.231879 0.125977 0.105157 -0.168524 0.081665
|
||||
0.105048 -0.348700 0.166809 0.105157 -0.168524 0.081665
|
||||
0.105048 -0.348700 0.166809 0.105157 -0.168524 0.081665
|
||||
0.105157 -0.168524 0.081665 0.105080 -0.297064 0.080933
|
||||
0.105048 -0.348700 0.166809 0.105080 -0.297064 0.080933
|
||||
0.105080 -0.297064 0.080933 0.105157 -0.168524 0.081665
|
||||
0.105157 -0.168524 0.081665 0.105202 -0.095282 0.065918
|
||||
0.105080 -0.297064 0.080933 0.105202 -0.095282 0.065918
|
||||
0.105080 -0.297064 0.080933 0.105202 -0.095282 0.065918
|
||||
0.105202 -0.095282 0.065918 0.105106 -0.254172 0.041107
|
||||
0.105080 -0.297064 0.080933 0.105106 -0.254172 0.041107
|
||||
0.105170 -0.147330 0.538925 0.105202 -0.094550 0.543823
|
||||
0.105202 -0.094550 0.543823 0.105249 -0.017508 0.534119
|
||||
0.105170 -0.147330 0.538925 0.105249 -0.017508 0.534119
|
||||
0.105170 -0.147330 0.538925 0.105249 -0.017508 0.534119
|
||||
0.105249 -0.017508 0.534119 0.105140 -0.196539 0.524231
|
||||
0.105170 -0.147330 0.538925 0.105140 -0.196539 0.524231
|
||||
0.105140 -0.196539 0.524231 0.105249 -0.017508 0.534119
|
||||
0.105249 -0.017508 0.534119 0.105290 0.049554 0.505005
|
||||
0.105140 -0.196539 0.524231 0.105290 0.049554 0.505005
|
||||
0.105140 -0.196539 0.524231 0.105290 0.049554 0.505005
|
||||
0.105290 0.049554 0.505005 0.105113 -0.241812 0.500015
|
||||
0.105140 -0.196539 0.524231 0.105113 -0.241812 0.500015
|
||||
0.105113 -0.241812 0.500015 0.105290 0.049554 0.505005
|
||||
0.105290 0.049554 0.505005 0.105202 -0.095282 0.466553
|
||||
0.105113 -0.241812 0.500015 0.105202 -0.095282 0.466553
|
||||
0.105202 -0.095282 0.466553 0.105290 0.049554 0.505005
|
||||
0.105290 0.049554 0.505005 0.105323 0.103983 0.458130
|
||||
0.105202 -0.095282 0.466553 0.105323 0.103983 0.458130
|
||||
0.105202 -0.095282 0.466553 0.105323 0.103983 0.458130
|
||||
0.105323 0.103983 0.458130 0.105253 -0.010687 0.448608
|
||||
0.105202 -0.095282 0.466553 0.105253 -0.010687 0.448608
|
||||
0.105253 -0.010687 0.448608 0.105323 0.103983 0.458130
|
||||
0.105323 0.103983 0.458130 0.105274 0.023737 0.426270
|
||||
0.105253 -0.010687 0.448608 0.105274 0.023737 0.426270
|
||||
0.105274 0.023737 0.426270 0.105323 0.103983 0.458130
|
||||
0.105323 0.103983 0.458130 0.105346 0.143121 0.395142
|
||||
0.105274 0.023737 0.426270 0.105346 0.143121 0.395142
|
||||
0.105274 0.023737 0.426270 0.105346 0.143121 0.395142
|
||||
0.105346 0.143121 0.395142 0.105291 0.052301 0.395142
|
||||
0.105274 0.023737 0.426270 0.105291 0.052301 0.395142
|
||||
0.105688 0.707086 0.133667 0.105631 0.611871 0.133667
|
||||
0.105631 0.611871 0.133667 0.105614 0.584817 0.104599
|
||||
0.105688 0.707086 0.133667 0.105614 0.584817 0.104599
|
||||
0.105688 0.707086 0.133667 0.105614 0.584817 0.104599
|
||||
0.105614 0.584817 0.104599 0.105594 0.551263 0.083313
|
||||
0.105688 0.707086 0.133667 0.105594 0.551263 0.083313
|
||||
0.105688 0.707086 0.133667 0.105594 0.551263 0.083313
|
||||
0.105594 0.551263 0.083313 0.105663 0.665659 0.071915
|
||||
0.105688 0.707086 0.133667 0.105663 0.665659 0.071915
|
||||
0.105663 0.665659 0.071915 0.105594 0.551263 0.083313
|
||||
0.105594 0.551263 0.083313 0.105544 0.468683 0.065918
|
||||
0.105663 0.665659 0.071915 0.105544 0.468683 0.065918
|
||||
0.105663 0.665659 0.071915 0.105544 0.468683 0.065918
|
||||
0.105544 0.468683 0.065918 0.105447 0.309793 0.041107
|
||||
0.105663 0.665659 0.071915 0.105447 0.309793 0.041107
|
||||
0.105663 0.665659 0.071915 0.105447 0.309793 0.041107
|
||||
0.105447 0.309793 0.041107 0.105630 0.610956 0.026550
|
||||
0.105663 0.665659 0.071915 0.105630 0.610956 0.026550
|
||||
0.105630 0.610956 0.026550 0.105447 0.309793 0.041107
|
||||
0.105447 0.309793 0.041107 0.105477 0.357904 0.012451
|
||||
0.105630 0.610956 0.026550 0.105477 0.357904 0.012451
|
||||
0.105630 0.610956 0.026550 0.105477 0.357904 0.012451
|
||||
0.105477 0.357904 0.012451 0.105590 0.544717 -0.001328
|
||||
0.105630 0.610956 0.026550 0.105590 0.544717 -0.001328
|
||||
0.105590 0.544717 -0.001328 0.105477 0.357904 0.012451
|
||||
0.105477 0.357904 0.012451 0.105509 0.410959 -0.004852
|
||||
0.105590 0.544717 -0.001328 0.105509 0.410959 -0.004852
|
||||
0.105590 0.544717 -0.001328 0.105509 0.410959 -0.004852
|
||||
0.105509 0.410959 -0.004852 0.105544 0.468683 -0.010620
|
||||
0.105590 0.544717 -0.001328 0.105544 0.468683 -0.010620
|
||||
0.105455 0.322153 0.500015 0.105430 0.281183 0.466553
|
||||
0.105430 0.281183 0.466553 0.105544 0.468683 0.466553
|
||||
0.105455 0.322153 0.500015 0.105544 0.468683 0.466553
|
||||
0.105544 0.468683 0.466553 0.105430 0.281183 0.466553
|
||||
0.105430 0.281183 0.466553 0.105500 0.396906 0.452271
|
||||
0.105544 0.468683 0.466553 0.105500 0.396906 0.452271
|
||||
0.105500 0.396906 0.452271 0.105430 0.281183 0.466553
|
||||
0.105430 0.281183 0.466553 0.105408 0.245111 0.423294
|
||||
0.105500 0.396906 0.452271 0.105408 0.245111 0.423294
|
||||
0.105500 0.396906 0.452271 0.105408 0.245111 0.423294
|
||||
0.105408 0.245111 0.423294 0.105464 0.336481 0.410889
|
||||
0.105500 0.396906 0.452271 0.105464 0.336481 0.410889
|
||||
0.105464 0.336481 0.410889 0.105408 0.245111 0.423294
|
||||
0.105408 0.245111 0.423294 0.105392 0.218927 0.375549
|
||||
0.105464 0.336481 0.410889 0.105392 0.218927 0.375549
|
||||
0.105464 0.336481 0.410889 0.105392 0.218927 0.375549
|
||||
0.105392 0.218927 0.375549 0.105438 0.293634 0.345337
|
||||
0.105464 0.336481 0.410889 0.105438 0.293634 0.345337
|
||||
0.105438 0.293634 0.345337 0.105392 0.218927 0.375549
|
||||
0.105392 0.218927 0.375549 0.105383 0.202997 0.324142
|
||||
0.105438 0.293634 0.345337 0.105383 0.202997 0.324142
|
||||
0.105438 0.293634 0.345337 0.105383 0.202997 0.324142
|
||||
0.105383 0.202997 0.324142 0.105379 0.197687 0.269897
|
||||
0.105438 0.293634 0.345337 0.105379 0.197687 0.269897
|
||||
0.105438 0.293634 0.345337 0.105379 0.197687 0.269897
|
||||
0.105379 0.197687 0.269897 0.105428 0.278253 0.269165
|
||||
0.105438 0.293634 0.345337 0.105428 0.278253 0.269165
|
||||
0.105428 0.278253 0.269165 0.105379 0.197687 0.269897
|
||||
0.105379 0.197687 0.269897 0.105437 0.292169 0.190247
|
||||
0.105428 0.278253 0.269165 0.105437 0.292169 0.190247
|
||||
0.105437 0.292169 0.190247 0.105379 0.197687 0.269897
|
||||
0.105379 0.197687 0.269897 0.105390 0.215265 0.166809
|
||||
0.105437 0.292169 0.190247 0.105390 0.215265 0.166809
|
||||
0.105437 0.292169 0.190247 0.105390 0.215265 0.166809
|
||||
0.105390 0.215265 0.166809 0.105461 0.332086 0.125977
|
||||
0.105437 0.292169 0.190247 0.105461 0.332086 0.125977
|
||||
0.105461 0.332086 0.125977 0.105390 0.215265 0.166809
|
||||
0.105390 0.215265 0.166809 0.105499 0.395441 0.081665
|
||||
0.105461 0.332086 0.125977 0.105499 0.395441 0.081665
|
||||
0.105499 0.395441 0.081665 0.105390 0.215265 0.166809
|
||||
0.105390 0.215265 0.166809 0.105421 0.266901 0.080933
|
||||
0.105499 0.395441 0.081665 0.105421 0.266901 0.080933
|
||||
0.105499 0.395441 0.081665 0.105421 0.266901 0.080933
|
||||
0.105421 0.266901 0.080933 0.105544 0.468683 0.065918
|
||||
0.105499 0.395441 0.081665 0.105544 0.468683 0.065918
|
||||
0.105544 0.468683 0.065918 0.105421 0.266901 0.080933
|
||||
0.105421 0.266901 0.080933 0.105447 0.309793 0.041107
|
||||
0.105544 0.468683 0.065918 0.105447 0.309793 0.041107
|
||||
0.105544 0.469415 0.543823 0.105512 0.416635 0.538925
|
||||
0.105512 0.416635 0.538925 0.105591 0.546457 0.534119
|
||||
0.105544 0.469415 0.543823 0.105591 0.546457 0.534119
|
||||
0.105591 0.546457 0.534119 0.105512 0.416635 0.538925
|
||||
0.105512 0.416635 0.538925 0.105482 0.367426 0.524231
|
||||
0.105591 0.546457 0.534119 0.105482 0.367426 0.524231
|
||||
0.105591 0.546457 0.534119 0.105482 0.367426 0.524231
|
||||
0.105482 0.367426 0.524231 0.105632 0.613519 0.505005
|
||||
0.105591 0.546457 0.534119 0.105632 0.613519 0.505005
|
||||
0.105632 0.613519 0.505005 0.105482 0.367426 0.524231
|
||||
0.105482 0.367426 0.524231 0.105455 0.322153 0.500015
|
||||
0.105632 0.613519 0.505005 0.105455 0.322153 0.500015
|
||||
0.105632 0.613519 0.505005 0.105455 0.322153 0.500015
|
||||
0.105455 0.322153 0.500015 0.105544 0.468683 0.466553
|
||||
0.105632 0.613519 0.505005 0.105544 0.468683 0.466553
|
||||
0.105632 0.613519 0.505005 0.105544 0.468683 0.466553
|
||||
0.105544 0.468683 0.466553 0.105665 0.667947 0.458130
|
||||
0.105632 0.613519 0.505005 0.105665 0.667947 0.458130
|
||||
0.105665 0.667947 0.458130 0.105544 0.468683 0.466553
|
||||
0.105544 0.468683 0.466553 0.105595 0.553278 0.448608
|
||||
0.105665 0.667947 0.458130 0.105595 0.553278 0.448608
|
||||
0.105665 0.667947 0.458130 0.105595 0.553278 0.448608
|
||||
0.105595 0.553278 0.448608 0.105616 0.587701 0.426270
|
||||
0.105665 0.667947 0.458130 0.105616 0.587701 0.426270
|
||||
0.105665 0.667947 0.458130 0.105616 0.587701 0.426270
|
||||
0.105616 0.587701 0.426270 0.105633 0.616266 0.395142
|
||||
0.105665 0.667947 0.458130 0.105633 0.616266 0.395142
|
||||
0.105665 0.667947 0.458130 0.105633 0.616266 0.395142
|
||||
0.105633 0.616266 0.395142 0.105688 0.707086 0.395142
|
||||
0.105665 0.667947 0.458130 0.105688 0.707086 0.395142
|
||||
0.105631 0.611871 0.133667 0.105688 0.707086 0.133667
|
||||
0.105688 0.707086 0.133667 0.105614 0.584817 0.104599
|
||||
0.105631 0.611871 0.133667 0.105614 0.584817 0.104599
|
||||
0.105614 0.584817 0.104599 0.105688 0.707086 0.133667
|
||||
0.105688 0.707086 0.133667 0.105594 0.551263 0.083313
|
||||
0.105614 0.584817 0.104599 0.105594 0.551263 0.083313
|
||||
0.105594 0.551263 0.083313 0.105688 0.707086 0.133667
|
||||
0.105688 0.707086 0.133667 0.105663 0.665659 0.071915
|
||||
0.105594 0.551263 0.083313 0.105663 0.665659 0.071915
|
||||
0.105594 0.551263 0.083313 0.105663 0.665659 0.071915
|
||||
0.105663 0.665659 0.071915 0.105544 0.468683 0.065918
|
||||
0.105594 0.551263 0.083313 0.105544 0.468683 0.065918
|
||||
0.105544 0.468683 0.065918 0.105663 0.665659 0.071915
|
||||
0.105663 0.665659 0.071915 0.105447 0.309793 0.041107
|
||||
0.105544 0.468683 0.065918 0.105447 0.309793 0.041107
|
||||
0.105447 0.309793 0.041107 0.105663 0.665659 0.071915
|
||||
0.105663 0.665659 0.071915 0.105630 0.610956 0.026550
|
||||
0.105447 0.309793 0.041107 0.105630 0.610956 0.026550
|
||||
0.105447 0.309793 0.041107 0.105630 0.610956 0.026550
|
||||
0.105630 0.610956 0.026550 0.105477 0.357904 0.012451
|
||||
0.105447 0.309793 0.041107 0.105477 0.357904 0.012451
|
||||
0.105477 0.357904 0.012451 0.105630 0.610956 0.026550
|
||||
0.105630 0.610956 0.026550 0.105590 0.544717 -0.001328
|
||||
0.105477 0.357904 0.012451 0.105590 0.544717 -0.001328
|
||||
0.105477 0.357904 0.012451 0.105590 0.544717 -0.001328
|
||||
0.105590 0.544717 -0.001328 0.105509 0.410959 -0.004852
|
||||
0.105477 0.357904 0.012451 0.105509 0.410959 -0.004852
|
||||
0.105509 0.410959 -0.004852 0.105590 0.544717 -0.001328
|
||||
0.105590 0.544717 -0.001328 0.105544 0.468683 -0.010620
|
||||
0.105509 0.410959 -0.004852 0.105544 0.468683 -0.010620
|
||||
0.105455 0.322153 0.500015 0.105544 0.468683 0.466553
|
||||
0.105544 0.468683 0.466553 0.105430 0.281183 0.466553
|
||||
0.105455 0.322153 0.500015 0.105430 0.281183 0.466553
|
||||
0.105430 0.281183 0.466553 0.105544 0.468683 0.466553
|
||||
0.105544 0.468683 0.466553 0.105500 0.396906 0.452271
|
||||
0.105430 0.281183 0.466553 0.105500 0.396906 0.452271
|
||||
0.105430 0.281183 0.466553 0.105500 0.396906 0.452271
|
||||
0.105500 0.396906 0.452271 0.105408 0.245111 0.423294
|
||||
0.105430 0.281183 0.466553 0.105408 0.245111 0.423294
|
||||
0.105408 0.245111 0.423294 0.105500 0.396906 0.452271
|
||||
0.105500 0.396906 0.452271 0.105464 0.336481 0.410889
|
||||
0.105408 0.245111 0.423294 0.105464 0.336481 0.410889
|
||||
0.105408 0.245111 0.423294 0.105464 0.336481 0.410889
|
||||
0.105464 0.336481 0.410889 0.105392 0.218927 0.375549
|
||||
0.105408 0.245111 0.423294 0.105392 0.218927 0.375549
|
||||
0.105392 0.218927 0.375549 0.105464 0.336481 0.410889
|
||||
0.105464 0.336481 0.410889 0.105438 0.293634 0.345337
|
||||
0.105392 0.218927 0.375549 0.105438 0.293634 0.345337
|
||||
0.105392 0.218927 0.375549 0.105438 0.293634 0.345337
|
||||
0.105438 0.293634 0.345337 0.105383 0.202997 0.324142
|
||||
0.105392 0.218927 0.375549 0.105383 0.202997 0.324142
|
||||
0.105383 0.202997 0.324142 0.105438 0.293634 0.345337
|
||||
0.105438 0.293634 0.345337 0.105379 0.197687 0.269897
|
||||
0.105383 0.202997 0.324142 0.105379 0.197687 0.269897
|
||||
0.105379 0.197687 0.269897 0.105438 0.293634 0.345337
|
||||
0.105438 0.293634 0.345337 0.105428 0.278253 0.269165
|
||||
0.105379 0.197687 0.269897 0.105428 0.278253 0.269165
|
||||
0.105379 0.197687 0.269897 0.105428 0.278253 0.269165
|
||||
0.105428 0.278253 0.269165 0.105437 0.292169 0.190247
|
||||
0.105379 0.197687 0.269897 0.105437 0.292169 0.190247
|
||||
0.105379 0.197687 0.269897 0.105437 0.292169 0.190247
|
||||
0.105437 0.292169 0.190247 0.105390 0.215265 0.166809
|
||||
0.105379 0.197687 0.269897 0.105390 0.215265 0.166809
|
||||
0.105390 0.215265 0.166809 0.105437 0.292169 0.190247
|
||||
0.105437 0.292169 0.190247 0.105461 0.332086 0.125977
|
||||
0.105390 0.215265 0.166809 0.105461 0.332086 0.125977
|
||||
0.105390 0.215265 0.166809 0.105461 0.332086 0.125977
|
||||
0.105461 0.332086 0.125977 0.105499 0.395441 0.081665
|
||||
0.105390 0.215265 0.166809 0.105499 0.395441 0.081665
|
||||
0.105390 0.215265 0.166809 0.105499 0.395441 0.081665
|
||||
0.105499 0.395441 0.081665 0.105421 0.266901 0.080933
|
||||
0.105390 0.215265 0.166809 0.105421 0.266901 0.080933
|
||||
0.105421 0.266901 0.080933 0.105499 0.395441 0.081665
|
||||
0.105499 0.395441 0.081665 0.105544 0.468683 0.065918
|
||||
0.105421 0.266901 0.080933 0.105544 0.468683 0.065918
|
||||
0.105421 0.266901 0.080933 0.105544 0.468683 0.065918
|
||||
0.105544 0.468683 0.065918 0.105447 0.309793 0.041107
|
||||
0.105421 0.266901 0.080933 0.105447 0.309793 0.041107
|
||||
0.105512 0.416635 0.538925 0.105544 0.469415 0.543823
|
||||
0.105544 0.469415 0.543823 0.105591 0.546457 0.534119
|
||||
0.105512 0.416635 0.538925 0.105591 0.546457 0.534119
|
||||
0.105512 0.416635 0.538925 0.105591 0.546457 0.534119
|
||||
0.105591 0.546457 0.534119 0.105482 0.367426 0.524231
|
||||
0.105512 0.416635 0.538925 0.105482 0.367426 0.524231
|
||||
0.105482 0.367426 0.524231 0.105591 0.546457 0.534119
|
||||
0.105591 0.546457 0.534119 0.105632 0.613519 0.505005
|
||||
0.105482 0.367426 0.524231 0.105632 0.613519 0.505005
|
||||
0.105482 0.367426 0.524231 0.105632 0.613519 0.505005
|
||||
0.105632 0.613519 0.505005 0.105455 0.322153 0.500015
|
||||
0.105482 0.367426 0.524231 0.105455 0.322153 0.500015
|
||||
0.105455 0.322153 0.500015 0.105632 0.613519 0.505005
|
||||
0.105632 0.613519 0.505005 0.105544 0.468683 0.466553
|
||||
0.105455 0.322153 0.500015 0.105544 0.468683 0.466553
|
||||
0.105544 0.468683 0.466553 0.105632 0.613519 0.505005
|
||||
0.105632 0.613519 0.505005 0.105665 0.667947 0.458130
|
||||
0.105544 0.468683 0.466553 0.105665 0.667947 0.458130
|
||||
0.105544 0.468683 0.466553 0.105665 0.667947 0.458130
|
||||
0.105665 0.667947 0.458130 0.105595 0.553278 0.448608
|
||||
0.105544 0.468683 0.466553 0.105595 0.553278 0.448608
|
||||
0.105595 0.553278 0.448608 0.105665 0.667947 0.458130
|
||||
0.105665 0.667947 0.458130 0.105616 0.587701 0.426270
|
||||
0.105595 0.553278 0.448608 0.105616 0.587701 0.426270
|
||||
0.105616 0.587701 0.426270 0.105665 0.667947 0.458130
|
||||
0.105665 0.667947 0.458130 0.105688 0.707086 0.395142
|
||||
0.105616 0.587701 0.426270 0.105688 0.707086 0.395142
|
||||
0.105616 0.587701 0.426270 0.105688 0.707086 0.395142
|
||||
0.105688 0.707086 0.395142 0.105633 0.616266 0.395142
|
||||
0.105616 0.587701 0.426270 0.105633 0.616266 0.395142
|
||||
0.106030 1.271051 0.133667 0.105972 1.175836 0.133667
|
||||
0.105972 1.175836 0.133667 0.105956 1.148782 0.104599
|
||||
0.106030 1.271051 0.133667 0.105956 1.148782 0.104599
|
||||
0.106030 1.271051 0.133667 0.105956 1.148782 0.104599
|
||||
0.105956 1.148782 0.104599 0.105936 1.115228 0.083313
|
||||
0.106030 1.271051 0.133667 0.105936 1.115228 0.083313
|
||||
0.106030 1.271051 0.133667 0.105936 1.115228 0.083313
|
||||
0.105936 1.115228 0.083313 0.106005 1.229623 0.071915
|
||||
0.106030 1.271051 0.133667 0.106005 1.229623 0.071915
|
||||
0.106005 1.229623 0.071915 0.105936 1.115228 0.083313
|
||||
0.105936 1.115228 0.083313 0.105886 1.032648 0.065918
|
||||
0.106005 1.229623 0.071915 0.105886 1.032648 0.065918
|
||||
0.106005 1.229623 0.071915 0.105886 1.032648 0.065918
|
||||
0.105886 1.032648 0.065918 0.105789 0.873758 0.041107
|
||||
0.106005 1.229623 0.071915 0.105789 0.873758 0.041107
|
||||
0.106005 1.229623 0.071915 0.105789 0.873758 0.041107
|
||||
0.105789 0.873758 0.041107 0.105972 1.174921 0.026550
|
||||
0.106005 1.229623 0.071915 0.105972 1.174921 0.026550
|
||||
0.105972 1.174921 0.026550 0.105789 0.873758 0.041107
|
||||
0.105789 0.873758 0.041107 0.105818 0.921869 0.012451
|
||||
0.105972 1.174921 0.026550 0.105818 0.921869 0.012451
|
||||
0.105972 1.174921 0.026550 0.105818 0.921869 0.012451
|
||||
0.105818 0.921869 0.012451 0.105932 1.108682 -0.001328
|
||||
0.105972 1.174921 0.026550 0.105932 1.108682 -0.001328
|
||||
0.105932 1.108682 -0.001328 0.105818 0.921869 0.012451
|
||||
0.105818 0.921869 0.012451 0.105851 0.974924 -0.004852
|
||||
0.105932 1.108682 -0.001328 0.105851 0.974924 -0.004852
|
||||
0.105932 1.108682 -0.001328 0.105851 0.974924 -0.004852
|
||||
0.105851 0.974924 -0.004852 0.105886 1.032648 -0.010620
|
||||
0.105932 1.108682 -0.001328 0.105886 1.032648 -0.010620
|
||||
0.105797 0.886118 0.500015 0.105772 0.845148 0.466553
|
||||
0.105772 0.845148 0.466553 0.105886 1.032648 0.466553
|
||||
0.105797 0.886118 0.500015 0.105886 1.032648 0.466553
|
||||
0.105886 1.032648 0.466553 0.105772 0.845148 0.466553
|
||||
0.105772 0.845148 0.466553 0.105842 0.960870 0.452271
|
||||
0.105886 1.032648 0.466553 0.105842 0.960870 0.452271
|
||||
0.105842 0.960870 0.452271 0.105772 0.845148 0.466553
|
||||
0.105772 0.845148 0.466553 0.105750 0.809076 0.423294
|
||||
0.105842 0.960870 0.452271 0.105750 0.809076 0.423294
|
||||
0.105842 0.960870 0.452271 0.105750 0.809076 0.423294
|
||||
0.105750 0.809076 0.423294 0.105805 0.900446 0.410889
|
||||
0.105842 0.960870 0.452271 0.105805 0.900446 0.410889
|
||||
0.105805 0.900446 0.410889 0.105750 0.809076 0.423294
|
||||
0.105750 0.809076 0.423294 0.105734 0.782892 0.375549
|
||||
0.105805 0.900446 0.410889 0.105734 0.782892 0.375549
|
||||
0.105805 0.900446 0.410889 0.105734 0.782892 0.375549
|
||||
0.105734 0.782892 0.375549 0.105779 0.857599 0.345337
|
||||
0.105805 0.900446 0.410889 0.105779 0.857599 0.345337
|
||||
0.105779 0.857599 0.345337 0.105734 0.782892 0.375549
|
||||
0.105734 0.782892 0.375549 0.105725 0.766962 0.324142
|
||||
0.105779 0.857599 0.345337 0.105725 0.766962 0.324142
|
||||
0.105779 0.857599 0.345337 0.105725 0.766962 0.324142
|
||||
0.105725 0.766962 0.324142 0.105721 0.761652 0.269897
|
||||
0.105779 0.857599 0.345337 0.105721 0.761652 0.269897
|
||||
0.105779 0.857599 0.345337 0.105721 0.761652 0.269897
|
||||
0.105721 0.761652 0.269897 0.105770 0.842218 0.269165
|
||||
0.105779 0.857599 0.345337 0.105770 0.842218 0.269165
|
||||
0.105770 0.842218 0.269165 0.105721 0.761652 0.269897
|
||||
0.105721 0.761652 0.269897 0.105779 0.856134 0.190247
|
||||
0.105770 0.842218 0.269165 0.105779 0.856134 0.190247
|
||||
0.105779 0.856134 0.190247 0.105721 0.761652 0.269897
|
||||
0.105721 0.761652 0.269897 0.105732 0.779230 0.166809
|
||||
0.105779 0.856134 0.190247 0.105732 0.779230 0.166809
|
||||
0.105779 0.856134 0.190247 0.105732 0.779230 0.166809
|
||||
0.105732 0.779230 0.166809 0.105803 0.896051 0.125977
|
||||
0.105779 0.856134 0.190247 0.105803 0.896051 0.125977
|
||||
0.105803 0.896051 0.125977 0.105732 0.779230 0.166809
|
||||
0.105732 0.779230 0.166809 0.105841 0.959406 0.081665
|
||||
0.105803 0.896051 0.125977 0.105841 0.959406 0.081665
|
||||
0.105841 0.959406 0.081665 0.105732 0.779230 0.166809
|
||||
0.105732 0.779230 0.166809 0.105763 0.830866 0.080933
|
||||
0.105841 0.959406 0.081665 0.105763 0.830866 0.080933
|
||||
0.105841 0.959406 0.081665 0.105763 0.830866 0.080933
|
||||
0.105763 0.830866 0.080933 0.105886 1.032648 0.065918
|
||||
0.105841 0.959406 0.081665 0.105886 1.032648 0.065918
|
||||
0.105886 1.032648 0.065918 0.105763 0.830866 0.080933
|
||||
0.105763 0.830866 0.080933 0.105789 0.873758 0.041107
|
||||
0.105886 1.032648 0.065918 0.105789 0.873758 0.041107
|
||||
0.105886 1.033380 0.543823 0.105854 0.980600 0.538925
|
||||
0.105854 0.980600 0.538925 0.105933 1.110422 0.534119
|
||||
0.105886 1.033380 0.543823 0.105933 1.110422 0.534119
|
||||
0.105933 1.110422 0.534119 0.105854 0.980600 0.538925
|
||||
0.105854 0.980600 0.538925 0.105824 0.931390 0.524231
|
||||
0.105933 1.110422 0.534119 0.105824 0.931390 0.524231
|
||||
0.105933 1.110422 0.534119 0.105824 0.931390 0.524231
|
||||
0.105824 0.931390 0.524231 0.105973 1.177484 0.505005
|
||||
0.105933 1.110422 0.534119 0.105973 1.177484 0.505005
|
||||
0.105973 1.177484 0.505005 0.105824 0.931390 0.524231
|
||||
0.105824 0.931390 0.524231 0.105797 0.886118 0.500015
|
||||
0.105973 1.177484 0.505005 0.105797 0.886118 0.500015
|
||||
0.105973 1.177484 0.505005 0.105797 0.886118 0.500015
|
||||
0.105797 0.886118 0.500015 0.105886 1.032648 0.466553
|
||||
0.105973 1.177484 0.505005 0.105886 1.032648 0.466553
|
||||
0.105973 1.177484 0.505005 0.105886 1.032648 0.466553
|
||||
0.105886 1.032648 0.466553 0.106006 1.231912 0.458130
|
||||
0.105973 1.177484 0.505005 0.106006 1.231912 0.458130
|
||||
0.106006 1.231912 0.458130 0.105886 1.032648 0.466553
|
||||
0.105886 1.032648 0.466553 0.105937 1.117242 0.448608
|
||||
0.106006 1.231912 0.458130 0.105937 1.117242 0.448608
|
||||
0.106006 1.231912 0.458130 0.105937 1.117242 0.448608
|
||||
0.105937 1.117242 0.448608 0.105958 1.151666 0.426270
|
||||
0.106006 1.231912 0.458130 0.105958 1.151666 0.426270
|
||||
0.106006 1.231912 0.458130 0.105958 1.151666 0.426270
|
||||
0.105958 1.151666 0.426270 0.105975 1.180231 0.395142
|
||||
0.106006 1.231912 0.458130 0.105975 1.180231 0.395142
|
||||
0.106006 1.231912 0.458130 0.105975 1.180231 0.395142
|
||||
0.105975 1.180231 0.395142 0.106030 1.271051 0.395142
|
||||
0.106006 1.231912 0.458130 0.106030 1.271051 0.395142
|
||||
0.105972 1.175836 0.133667 0.106030 1.271051 0.133667
|
||||
0.106030 1.271051 0.133667 0.105956 1.148782 0.104599
|
||||
0.105972 1.175836 0.133667 0.105956 1.148782 0.104599
|
||||
0.105956 1.148782 0.104599 0.106030 1.271051 0.133667
|
||||
0.106030 1.271051 0.133667 0.105936 1.115228 0.083313
|
||||
0.105956 1.148782 0.104599 0.105936 1.115228 0.083313
|
||||
0.105936 1.115228 0.083313 0.106030 1.271051 0.133667
|
||||
0.106030 1.271051 0.133667 0.106005 1.229623 0.071915
|
||||
0.105936 1.115228 0.083313 0.106005 1.229623 0.071915
|
||||
0.105936 1.115228 0.083313 0.106005 1.229623 0.071915
|
||||
0.106005 1.229623 0.071915 0.105886 1.032648 0.065918
|
||||
0.105936 1.115228 0.083313 0.105886 1.032648 0.065918
|
||||
0.105886 1.032648 0.065918 0.106005 1.229623 0.071915
|
||||
0.106005 1.229623 0.071915 0.105789 0.873758 0.041107
|
||||
0.105886 1.032648 0.065918 0.105789 0.873758 0.041107
|
||||
0.105789 0.873758 0.041107 0.106005 1.229623 0.071915
|
||||
0.106005 1.229623 0.071915 0.105972 1.174921 0.026550
|
||||
0.105789 0.873758 0.041107 0.105972 1.174921 0.026550
|
||||
0.105789 0.873758 0.041107 0.105972 1.174921 0.026550
|
||||
0.105972 1.174921 0.026550 0.105818 0.921869 0.012451
|
||||
0.105789 0.873758 0.041107 0.105818 0.921869 0.012451
|
||||
0.105818 0.921869 0.012451 0.105972 1.174921 0.026550
|
||||
0.105972 1.174921 0.026550 0.105932 1.108682 -0.001328
|
||||
0.105818 0.921869 0.012451 0.105932 1.108682 -0.001328
|
||||
0.105818 0.921869 0.012451 0.105932 1.108682 -0.001328
|
||||
0.105932 1.108682 -0.001328 0.105851 0.974924 -0.004852
|
||||
0.105818 0.921869 0.012451 0.105851 0.974924 -0.004852
|
||||
0.105851 0.974924 -0.004852 0.105932 1.108682 -0.001328
|
||||
0.105932 1.108682 -0.001328 0.105886 1.032648 -0.010620
|
||||
0.105851 0.974924 -0.004852 0.105886 1.032648 -0.010620
|
||||
0.105797 0.886118 0.500015 0.105886 1.032648 0.466553
|
||||
0.105886 1.032648 0.466553 0.105772 0.845148 0.466553
|
||||
0.105797 0.886118 0.500015 0.105772 0.845148 0.466553
|
||||
0.105772 0.845148 0.466553 0.105886 1.032648 0.466553
|
||||
0.105886 1.032648 0.466553 0.105842 0.960870 0.452271
|
||||
0.105772 0.845148 0.466553 0.105842 0.960870 0.452271
|
||||
0.105772 0.845148 0.466553 0.105842 0.960870 0.452271
|
||||
0.105842 0.960870 0.452271 0.105750 0.809076 0.423294
|
||||
0.105772 0.845148 0.466553 0.105750 0.809076 0.423294
|
||||
0.105750 0.809076 0.423294 0.105842 0.960870 0.452271
|
||||
0.105842 0.960870 0.452271 0.105805 0.900446 0.410889
|
||||
0.105750 0.809076 0.423294 0.105805 0.900446 0.410889
|
||||
0.105750 0.809076 0.423294 0.105805 0.900446 0.410889
|
||||
0.105805 0.900446 0.410889 0.105734 0.782892 0.375549
|
||||
0.105750 0.809076 0.423294 0.105734 0.782892 0.375549
|
||||
0.105734 0.782892 0.375549 0.105805 0.900446 0.410889
|
||||
0.105805 0.900446 0.410889 0.105779 0.857599 0.345337
|
||||
0.105734 0.782892 0.375549 0.105779 0.857599 0.345337
|
||||
0.105734 0.782892 0.375549 0.105779 0.857599 0.345337
|
||||
0.105779 0.857599 0.345337 0.105725 0.766962 0.324142
|
||||
0.105734 0.782892 0.375549 0.105725 0.766962 0.324142
|
||||
0.105725 0.766962 0.324142 0.105779 0.857599 0.345337
|
||||
0.105779 0.857599 0.345337 0.105721 0.761652 0.269897
|
||||
0.105725 0.766962 0.324142 0.105721 0.761652 0.269897
|
||||
0.105721 0.761652 0.269897 0.105779 0.857599 0.345337
|
||||
0.105779 0.857599 0.345337 0.105770 0.842218 0.269165
|
||||
0.105721 0.761652 0.269897 0.105770 0.842218 0.269165
|
||||
0.105721 0.761652 0.269897 0.105770 0.842218 0.269165
|
||||
0.105770 0.842218 0.269165 0.105779 0.856134 0.190247
|
||||
0.105721 0.761652 0.269897 0.105779 0.856134 0.190247
|
||||
0.105721 0.761652 0.269897 0.105779 0.856134 0.190247
|
||||
0.105779 0.856134 0.190247 0.105732 0.779230 0.166809
|
||||
0.105721 0.761652 0.269897 0.105732 0.779230 0.166809
|
||||
0.105732 0.779230 0.166809 0.105779 0.856134 0.190247
|
||||
0.105779 0.856134 0.190247 0.105803 0.896051 0.125977
|
||||
0.105732 0.779230 0.166809 0.105803 0.896051 0.125977
|
||||
0.105732 0.779230 0.166809 0.105803 0.896051 0.125977
|
||||
0.105803 0.896051 0.125977 0.105841 0.959406 0.081665
|
||||
0.105732 0.779230 0.166809 0.105841 0.959406 0.081665
|
||||
0.105732 0.779230 0.166809 0.105841 0.959406 0.081665
|
||||
0.105841 0.959406 0.081665 0.105763 0.830866 0.080933
|
||||
0.105732 0.779230 0.166809 0.105763 0.830866 0.080933
|
||||
0.105763 0.830866 0.080933 0.105841 0.959406 0.081665
|
||||
0.105841 0.959406 0.081665 0.105886 1.032648 0.065918
|
||||
0.105763 0.830866 0.080933 0.105886 1.032648 0.065918
|
||||
0.105763 0.830866 0.080933 0.105886 1.032648 0.065918
|
||||
0.105886 1.032648 0.065918 0.105789 0.873758 0.041107
|
||||
0.105763 0.830866 0.080933 0.105789 0.873758 0.041107
|
||||
0.105854 0.980600 0.538925 0.105886 1.033380 0.543823
|
||||
0.105886 1.033380 0.543823 0.105933 1.110422 0.534119
|
||||
0.105854 0.980600 0.538925 0.105933 1.110422 0.534119
|
||||
0.105854 0.980600 0.538925 0.105933 1.110422 0.534119
|
||||
0.105933 1.110422 0.534119 0.105824 0.931390 0.524231
|
||||
0.105854 0.980600 0.538925 0.105824 0.931390 0.524231
|
||||
0.105824 0.931390 0.524231 0.105933 1.110422 0.534119
|
||||
0.105933 1.110422 0.534119 0.105973 1.177484 0.505005
|
||||
0.105824 0.931390 0.524231 0.105973 1.177484 0.505005
|
||||
0.105824 0.931390 0.524231 0.105973 1.177484 0.505005
|
||||
0.105973 1.177484 0.505005 0.105797 0.886118 0.500015
|
||||
0.105824 0.931390 0.524231 0.105797 0.886118 0.500015
|
||||
0.105797 0.886118 0.500015 0.105973 1.177484 0.505005
|
||||
0.105973 1.177484 0.505005 0.105886 1.032648 0.466553
|
||||
0.105797 0.886118 0.500015 0.105886 1.032648 0.466553
|
||||
0.105886 1.032648 0.466553 0.105973 1.177484 0.505005
|
||||
0.105973 1.177484 0.505005 0.106006 1.231912 0.458130
|
||||
0.105886 1.032648 0.466553 0.106006 1.231912 0.458130
|
||||
0.105886 1.032648 0.466553 0.106006 1.231912 0.458130
|
||||
0.106006 1.231912 0.458130 0.105937 1.117242 0.448608
|
||||
0.105886 1.032648 0.466553 0.105937 1.117242 0.448608
|
||||
0.105937 1.117242 0.448608 0.106006 1.231912 0.458130
|
||||
0.106006 1.231912 0.458130 0.105958 1.151666 0.426270
|
||||
0.105937 1.117242 0.448608 0.105958 1.151666 0.426270
|
||||
0.105958 1.151666 0.426270 0.106006 1.231912 0.458130
|
||||
0.106006 1.231912 0.458130 0.106030 1.271051 0.395142
|
||||
0.105958 1.151666 0.426270 0.106030 1.271051 0.395142
|
||||
0.105958 1.151666 0.426270 0.106030 1.271051 0.395142
|
||||
0.106030 1.271051 0.395142 0.105975 1.180231 0.395142
|
||||
0.105958 1.151666 0.426270 0.105975 1.180231 0.395142
|
||||
+1280
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,42 @@
|
||||
1e+06 0 -18084
|
||||
987688 156434 -15630
|
||||
951056 309016 -201
|
||||
891006 453990 5139
|
||||
809017 587785 24594
|
||||
707106 707106 -19208
|
||||
587785 809016 -21229
|
||||
453990 891006 -15010
|
||||
309017 951056 -13161
|
||||
156434 987688 20032
|
||||
0 999999 -20092
|
||||
-156434 987688 -7521
|
||||
-309016 951056 18472
|
||||
-453990 891006 8668
|
||||
-587785 809017 -12963
|
||||
-707106 707106 -22986
|
||||
-809016 587785 -19944
|
||||
-891006 453990 15048
|
||||
-951056 309017 20336
|
||||
-987688 156434 6819
|
||||
-999999 0 13015
|
||||
-987688 -156434 7485
|
||||
-951056 -309016 -15857
|
||||
-891006 -453990 6584
|
||||
-809017 -587785 21741
|
||||
-707106 -707106 -1338
|
||||
-587785 -809016 -1247
|
||||
-453990 -891006 2410
|
||||
-309017 -951056 14432
|
||||
-156434 -987688 12342
|
||||
0 -999999 5533
|
||||
156434 -987688 2973
|
||||
309016 -951056 21713
|
||||
453990 -891006 -19668
|
||||
587785 -809017 -16888
|
||||
707106 -707106 21307
|
||||
809016 -587785 -13876
|
||||
891006 -453990 -13116
|
||||
951056 -309017 -18702
|
||||
987688 -156434 -2036
|
||||
1e+06 0 -18084
|
||||
0 0 0
|
||||
@@ -0,0 +1,781 @@
|
||||
-4851 33852 0
|
||||
-5301 32379 0
|
||||
-5487 31325 0
|
||||
-5115 30101 0
|
||||
-4014 29062 0
|
||||
-2573 28675 0
|
||||
-1498 28633 0
|
||||
-423 28592 0
|
||||
651 28551 0
|
||||
1790 27985 0
|
||||
2929 27419 0
|
||||
3632 26603 0
|
||||
4334 25786 0
|
||||
5037 24970 0
|
||||
5409 23699 0
|
||||
5781 22428 0
|
||||
6153 21157 0
|
||||
5928 20173 0
|
||||
5704 19189 0
|
||||
5680 17693 0
|
||||
5657 16197 0
|
||||
6122 15255 0
|
||||
6587 14314 0
|
||||
7052 13372 0
|
||||
7517 12431 0
|
||||
8401 11237 0
|
||||
8571 11268 0
|
||||
8982 12710 0
|
||||
9393 14151 0
|
||||
9889 15213 0
|
||||
10385 16275 0
|
||||
11185 17205 0
|
||||
11986 18135 0
|
||||
12787 19065 0
|
||||
13516 19785 0
|
||||
14244 20506 0
|
||||
14973 21227 0
|
||||
15701 21948 0
|
||||
16729 22630 0
|
||||
17757 23312 0
|
||||
18786 23994 0
|
||||
19741 24490 0
|
||||
20697 24986 0
|
||||
21653 25482 0
|
||||
22924 26737 0
|
||||
23420 27677 0
|
||||
23916 28618 0
|
||||
24412 29558 0
|
||||
24893 30907 0
|
||||
25373 32255 0
|
||||
0 0 0
|
||||
-5890 33991 0
|
||||
-6083 32666 0
|
||||
-6277 31341 0
|
||||
-5936 29822 0
|
||||
-4557 28380 0
|
||||
-2836 27838 0
|
||||
-1756 27796 0
|
||||
-676 27755 0
|
||||
403 27714 0
|
||||
1689 27233 0
|
||||
2658 26427 0
|
||||
3627 25621 0
|
||||
4185 24668 0
|
||||
4743 23715 0
|
||||
4983 22475 0
|
||||
5223 21235 0
|
||||
5073 20155 0
|
||||
4923 19075 0
|
||||
4774 17995 0
|
||||
4758 16833 0
|
||||
4743 15670 0
|
||||
5266 14779 0
|
||||
5789 13888 0
|
||||
6312 12996 0
|
||||
6835 12105 0
|
||||
7445 11160 0
|
||||
8054 10214 0
|
||||
8664 9269 0
|
||||
9362 7471 0
|
||||
10049 6680 0
|
||||
10736 5890 0
|
||||
11423 5099 0
|
||||
12282 4274 0
|
||||
13140 3450 0
|
||||
13999 2625 0
|
||||
14858 1801 0
|
||||
15717 976 0
|
||||
16972 573 0
|
||||
18197 1007 0
|
||||
18631 1550 0
|
||||
19623 1472 0
|
||||
20599 1069 0
|
||||
21917 -124 0
|
||||
0 0 0
|
||||
22707 620 0
|
||||
21343 1875 0
|
||||
20049 2348 0
|
||||
18755 2821 0
|
||||
17786 3410 0
|
||||
16817 3999 0
|
||||
15748 4611 0
|
||||
14678 5223 0
|
||||
13632 5332 0
|
||||
12586 5440 0
|
||||
11578 6262 0
|
||||
10431 7657 0
|
||||
9842 9114 0
|
||||
9455 11051 0
|
||||
9594 11981 0
|
||||
10075 13857 0
|
||||
10586 14911 0
|
||||
11098 15965 0
|
||||
12152 17329 0
|
||||
13004 18160 0
|
||||
13857 18992 0
|
||||
14709 19824 0
|
||||
15593 20320 0
|
||||
16476 20816 0
|
||||
17360 21312 0
|
||||
18135 22041 0
|
||||
18910 22769 0
|
||||
19741 23343 0
|
||||
20573 23916 0
|
||||
21405 24490 0
|
||||
22482 25443 0
|
||||
23560 26396 0
|
||||
24288 27435 0
|
||||
25017 28473 0
|
||||
25347 29455 0
|
||||
25678 30436 0
|
||||
26009 31418 0
|
||||
26210 32767 0
|
||||
26412 34115 0
|
||||
0 0 0
|
||||
6525 21638 -30
|
||||
6335 20611 -30
|
||||
6145 19584 -30
|
||||
5955 18557 -30
|
||||
5766 17530 -30
|
||||
5797 16259 -30
|
||||
6401 16523 -30
|
||||
7540 16918 -30
|
||||
8680 17313 -30
|
||||
9594 17825 -30
|
||||
10462 17747 -30
|
||||
11353 16941 -30
|
||||
12245 16135 -30
|
||||
12973 17019 -30
|
||||
0 0 0
|
||||
10385 17577 -30
|
||||
9625 17654 -30
|
||||
8742 17251 -30
|
||||
7571 16848 -30
|
||||
6401 16445 -30
|
||||
5828 16182 -30
|
||||
6296 15236 -30
|
||||
6765 14291 -30
|
||||
7234 13345 -30
|
||||
7703 12400 -30
|
||||
8881 12570 -30
|
||||
10059 12245 -30
|
||||
10788 12849 -30
|
||||
11160 14678 -30
|
||||
12152 15996 -30
|
||||
11268 16786 -30
|
||||
10385 17577 -30
|
||||
10385 17577 -30
|
||||
0 0 0
|
||||
10323 13903 -30
|
||||
9331 14182 -30
|
||||
9346 14229 -30
|
||||
10338 13950 -30
|
||||
10323 13903 -30
|
||||
10323 13903 -30
|
||||
0 0 0
|
||||
10571 14430 -30
|
||||
9579 14709 -30
|
||||
9594 14756 -30
|
||||
10586 14477 -30
|
||||
10571 14430 -30
|
||||
10571 14430 -30
|
||||
0 0 0
|
||||
10757 14880 -30
|
||||
9765 15159 -30
|
||||
9780 15205 -30
|
||||
10772 14926 -30
|
||||
10757 14880 -30
|
||||
10757 14880 -30
|
||||
0 0 0
|
||||
0 0 0
|
||||
8602 16492 -30
|
||||
8602 16492 -841
|
||||
8525 16678 -841
|
||||
8602 16492 -570
|
||||
8525 16678 -570
|
||||
8602 16492 -300
|
||||
8525 16678 -300
|
||||
8602 16492 -30
|
||||
8525 16678 -30
|
||||
8525 16678 -841
|
||||
8711 16647 -841
|
||||
8525 16678 -570
|
||||
8711 16647 -570
|
||||
8525 16678 -300
|
||||
8711 16647 -300
|
||||
8525 16678 -30
|
||||
8711 16647 -30
|
||||
8711 16647 -841
|
||||
8602 16492 -841
|
||||
8711 16647 -570
|
||||
8602 16492 -570
|
||||
8711 16647 -300
|
||||
8602 16492 -300
|
||||
8711 16647 -30
|
||||
8602 16492 -30
|
||||
8602 16492 -841
|
||||
8602 16492 -841
|
||||
8602 16492 -570
|
||||
8602 16492 -570
|
||||
8602 16492 -300
|
||||
8602 16492 -300
|
||||
8602 16492 -30
|
||||
8602 16492 -30
|
||||
0 0 0
|
||||
7905 16151 -30
|
||||
7905 16151 -725
|
||||
7827 16182 -725
|
||||
7905 16151 -377
|
||||
7827 16182 -377
|
||||
7905 16151 -30
|
||||
7827 16182 -30
|
||||
7827 16182 -725
|
||||
7781 16275 -725
|
||||
7827 16182 -377
|
||||
7781 16275 -377
|
||||
7827 16182 -30
|
||||
7781 16275 -30
|
||||
7781 16275 -725
|
||||
7812 16337 -725
|
||||
7781 16275 -377
|
||||
7812 16337 -377
|
||||
7781 16275 -30
|
||||
7812 16337 -30
|
||||
7812 16337 -725
|
||||
7889 16383 -725
|
||||
7812 16337 -377
|
||||
7889 16383 -377
|
||||
7812 16337 -30
|
||||
7889 16383 -30
|
||||
7889 16383 -725
|
||||
7967 16352 -725
|
||||
7889 16383 -377
|
||||
7967 16352 -377
|
||||
7889 16383 -30
|
||||
7967 16352 -30
|
||||
7967 16352 -725
|
||||
8013 16259 -725
|
||||
7967 16352 -377
|
||||
8013 16259 -377
|
||||
7967 16352 -30
|
||||
8013 16259 -30
|
||||
8013 16259 -725
|
||||
7982 16182 -725
|
||||
8013 16259 -377
|
||||
7982 16182 -377
|
||||
8013 16259 -30
|
||||
7982 16182 -30
|
||||
7982 16182 -725
|
||||
7905 16151 -725
|
||||
7982 16182 -377
|
||||
7905 16151 -377
|
||||
7982 16182 -30
|
||||
7905 16151 -30
|
||||
7905 16151 -725
|
||||
7905 16151 -725
|
||||
7905 16151 -377
|
||||
7905 16151 -377
|
||||
7905 16151 -30
|
||||
7905 16151 -30
|
||||
0 0 0
|
||||
8246 13082 -30
|
||||
8246 13082 -250
|
||||
8277 13159 -250
|
||||
8246 13082 -30
|
||||
8277 13159 -30
|
||||
8277 13159 -250
|
||||
8556 13082 -250
|
||||
8277 13159 -30
|
||||
8556 13082 -30
|
||||
8556 13082 -250
|
||||
8525 13004 -250
|
||||
8556 13082 -30
|
||||
8525 13004 -30
|
||||
8525 13004 -250
|
||||
8246 13082 -250
|
||||
8525 13004 -30
|
||||
8246 13082 -30
|
||||
8246 13082 -250
|
||||
8246 13082 -250
|
||||
8246 13082 -30
|
||||
8246 13082 -30
|
||||
0 0 0
|
||||
8416 13981 -30
|
||||
8416 13981 -450
|
||||
8478 14151 -450
|
||||
8416 13981 -240
|
||||
8478 14151 -240
|
||||
8416 13981 -30
|
||||
8478 14151 -30
|
||||
8478 14151 -450
|
||||
8649 14089 -450
|
||||
8478 14151 -240
|
||||
8649 14089 -240
|
||||
8478 14151 -30
|
||||
8649 14089 -30
|
||||
8649 14089 -450
|
||||
8587 13919 -450
|
||||
8649 14089 -240
|
||||
8587 13919 -240
|
||||
8649 14089 -30
|
||||
8587 13919 -30
|
||||
8587 13919 -450
|
||||
8416 13981 -450
|
||||
8587 13919 -240
|
||||
8416 13981 -240
|
||||
8587 13919 -30
|
||||
8416 13981 -30
|
||||
8416 13981 -450
|
||||
8416 13981 -450
|
||||
8416 13981 -240
|
||||
8416 13981 -240
|
||||
8416 13981 -30
|
||||
8416 13981 -30
|
||||
0 0 0
|
||||
7657 13640 -30
|
||||
7657 13640 -630
|
||||
7595 13795 -630
|
||||
7657 13640 -330
|
||||
7595 13795 -330
|
||||
7657 13640 -30
|
||||
7595 13795 -30
|
||||
7595 13795 -630
|
||||
7750 13857 -630
|
||||
7595 13795 -330
|
||||
7750 13857 -330
|
||||
7595 13795 -30
|
||||
7750 13857 -30
|
||||
7750 13857 -630
|
||||
7812 13702 -630
|
||||
7750 13857 -330
|
||||
7812 13702 -330
|
||||
7750 13857 -30
|
||||
7812 13702 -30
|
||||
7812 13702 -630
|
||||
7657 13640 -630
|
||||
7812 13702 -330
|
||||
7657 13640 -330
|
||||
7812 13702 -30
|
||||
7657 13640 -30
|
||||
7657 13640 -630
|
||||
7657 13640 -630
|
||||
7657 13640 -330
|
||||
7657 13640 -330
|
||||
7657 13640 -30
|
||||
7657 13640 -30
|
||||
0 0 0
|
||||
6882 15267 -30
|
||||
6882 15267 -600
|
||||
6820 15422 -600
|
||||
6882 15267 -410
|
||||
6820 15422 -410
|
||||
6882 15267 -220
|
||||
6820 15422 -220
|
||||
6882 15267 -30
|
||||
6820 15422 -30
|
||||
6820 15422 -600
|
||||
6975 15484 -600
|
||||
6820 15422 -410
|
||||
6975 15484 -410
|
||||
6820 15422 -220
|
||||
6975 15484 -220
|
||||
6820 15422 -30
|
||||
6975 15484 -30
|
||||
6975 15484 -600
|
||||
7037 15329 -600
|
||||
6975 15484 -410
|
||||
7037 15329 -410
|
||||
6975 15484 -220
|
||||
7037 15329 -220
|
||||
6975 15484 -30
|
||||
7037 15329 -30
|
||||
7037 15329 -600
|
||||
6882 15267 -600
|
||||
7037 15329 -410
|
||||
6882 15267 -410
|
||||
7037 15329 -220
|
||||
6882 15267 -220
|
||||
7037 15329 -30
|
||||
6882 15267 -30
|
||||
6882 15267 -600
|
||||
6882 15267 -600
|
||||
6882 15267 -410
|
||||
6882 15267 -410
|
||||
6882 15267 -220
|
||||
6882 15267 -220
|
||||
6882 15267 -30
|
||||
6882 15267 -30
|
||||
0 0 0
|
||||
8339 14461 -30
|
||||
8339 14461 -500
|
||||
8261 14647 -500
|
||||
8339 14461 -265
|
||||
8261 14647 -265
|
||||
8339 14461 -30
|
||||
8261 14647 -30
|
||||
8261 14647 -500
|
||||
8401 14709 -500
|
||||
8261 14647 -265
|
||||
8401 14709 -265
|
||||
8261 14647 -30
|
||||
8401 14709 -30
|
||||
8401 14709 -500
|
||||
8478 14523 -500
|
||||
8401 14709 -265
|
||||
8478 14523 -265
|
||||
8401 14709 -30
|
||||
8478 14523 -30
|
||||
8478 14523 -500
|
||||
8339 14461 -500
|
||||
8478 14523 -265
|
||||
8339 14461 -265
|
||||
8478 14523 -30
|
||||
8339 14461 -30
|
||||
8339 14461 -500
|
||||
8339 14461 -500
|
||||
8339 14461 -265
|
||||
8339 14461 -265
|
||||
8339 14461 -30
|
||||
8339 14461 -30
|
||||
0 0 0
|
||||
7440 13500 -30
|
||||
7440 13500 -350
|
||||
7300 13438 -350
|
||||
7440 13500 -190
|
||||
7300 13438 -190
|
||||
7440 13500 -30
|
||||
7300 13438 -30
|
||||
7300 13438 -350
|
||||
7223 13609 -350
|
||||
7300 13438 -190
|
||||
7223 13609 -190
|
||||
7300 13438 -30
|
||||
7223 13609 -30
|
||||
7223 13609 -350
|
||||
7362 13671 -350
|
||||
7223 13609 -190
|
||||
7362 13671 -190
|
||||
7223 13609 -30
|
||||
7362 13671 -30
|
||||
7362 13671 -350
|
||||
7440 13500 -350
|
||||
7362 13671 -190
|
||||
7440 13500 -190
|
||||
7362 13671 -30
|
||||
7440 13500 -30
|
||||
7440 13500 -350
|
||||
7440 13500 -350
|
||||
7440 13500 -190
|
||||
7440 13500 -190
|
||||
7440 13500 -30
|
||||
7440 13500 -30
|
||||
0 0 0
|
||||
7192 11547 0
|
||||
7192 11547 -30
|
||||
7292 11698 -151
|
||||
7393 11849 -191
|
||||
7494 12000 -151
|
||||
7595 12152 -30
|
||||
7595 12152 0
|
||||
0 0 0
|
||||
7269 11501 0
|
||||
7269 11501 -30
|
||||
7366 11652 -149
|
||||
7463 11803 -189
|
||||
7560 11954 -149
|
||||
7657 12105 -30
|
||||
7657 12105 0
|
||||
0 0 0
|
||||
5688 14198 0
|
||||
5688 14198 -80
|
||||
5866 14291 -130
|
||||
6223 14477 -30
|
||||
6401 14570 -30
|
||||
6223 14477 -130
|
||||
5866 14291 -30
|
||||
5688 14198 -80
|
||||
0 0 0
|
||||
6401 14570 -30
|
||||
6401 14570 0
|
||||
0 0 0
|
||||
6370 14632 0
|
||||
6370 14632 -80
|
||||
6192 14539 -130
|
||||
5835 14353 -30
|
||||
5657 14260 -30
|
||||
5835 14353 -130
|
||||
6192 14539 -30
|
||||
6370 14632 -80
|
||||
0 0 0
|
||||
5657 14260 -30
|
||||
5657 14260 0
|
||||
0 0 0
|
||||
9641 12369 0
|
||||
9641 12369 -30
|
||||
9482 12411 -139
|
||||
9323 12454 -176
|
||||
9164 12496 -139
|
||||
9005 12539 -30
|
||||
9005 12539 0
|
||||
0 0 0
|
||||
9610 12260 0
|
||||
9610 12260 -30
|
||||
9451 12303 -139
|
||||
9292 12345 -176
|
||||
9133 12388 -139
|
||||
8974 12431 -30
|
||||
8974 12431 0
|
||||
0 0 0
|
||||
10168 13950 -30
|
||||
10092 13971 -60
|
||||
10016 13993 -150
|
||||
9902 14025 -60
|
||||
9788 14058 -35
|
||||
9674 14091 -60
|
||||
9560 14123 -150
|
||||
9484 14145 -60
|
||||
9408 14167 -30
|
||||
0 0 0
|
||||
10016 13993 -150
|
||||
10016 13993 0
|
||||
0 0 0
|
||||
9560 14123 -150
|
||||
9560 14123 0
|
||||
0 0 0
|
||||
10183 13996 -30
|
||||
10107 14018 -60
|
||||
10031 14039 -150
|
||||
9917 14072 -60
|
||||
9803 14105 -35
|
||||
9689 14137 -60
|
||||
9575 14170 -150
|
||||
9499 14191 -60
|
||||
9424 14213 -30
|
||||
0 0 0
|
||||
10031 14039 -150
|
||||
10031 14039 0
|
||||
0 0 0
|
||||
9575 14170 -150
|
||||
9575 14170 0
|
||||
0 0 0
|
||||
10369 14492 -30
|
||||
10296 14512 -60
|
||||
10223 14532 -150
|
||||
10114 14563 -60
|
||||
10005 14593 -35
|
||||
9895 14623 -60
|
||||
9786 14653 -150
|
||||
9713 14673 -60
|
||||
9641 14694 -30
|
||||
0 0 0
|
||||
10223 14532 -150
|
||||
10223 14532 0
|
||||
0 0 0
|
||||
9786 14653 -150
|
||||
9786 14653 0
|
||||
0 0 0
|
||||
10385 14539 -30
|
||||
10312 14559 -60
|
||||
10239 14579 -150
|
||||
10130 14609 -60
|
||||
10020 14639 -35
|
||||
9911 14669 -60
|
||||
9802 14700 -150
|
||||
9729 14720 -60
|
||||
9656 14740 -30
|
||||
0 0 0
|
||||
10239 14579 -150
|
||||
10239 14579 0
|
||||
0 0 0
|
||||
9802 14700 -150
|
||||
9802 14700 0
|
||||
0 0 0
|
||||
10602 14926 -30
|
||||
10526 14948 -60
|
||||
10450 14969 -150
|
||||
10336 15002 -60
|
||||
10222 15035 -35
|
||||
10108 15067 -60
|
||||
9994 15100 -150
|
||||
9918 15121 -60
|
||||
9842 15143 -30
|
||||
0 0 0
|
||||
10450 14969 -150
|
||||
10450 14969 0
|
||||
0 0 0
|
||||
9994 15100 -150
|
||||
9994 15100 0
|
||||
0 0 0
|
||||
10617 14973 -30
|
||||
10541 14994 -60
|
||||
10465 15016 -150
|
||||
10351 15048 -60
|
||||
10237 15081 -35
|
||||
10123 15114 -60
|
||||
10009 15146 -150
|
||||
9933 15168 -60
|
||||
9858 15190 -30
|
||||
0 0 0
|
||||
10465 15016 -150
|
||||
10465 15016 0
|
||||
0 0 0
|
||||
10009 15146 -150
|
||||
10009 15146 0
|
||||
0 0 0
|
||||
8416 11640 0
|
||||
8277 11749 0
|
||||
8385 11873 0
|
||||
8509 11764 0
|
||||
8416 11640 0
|
||||
8416 11640 0
|
||||
0 0 0
|
||||
6432 21638 -30
|
||||
6246 20626 -30
|
||||
6060 19615 -30
|
||||
5874 18603 -30
|
||||
5688 17592 -30
|
||||
5735 16213 -30
|
||||
4107 15314 -30
|
||||
4138 15236 -30
|
||||
5766 16151 -30
|
||||
6479 14694 -30
|
||||
5099 13965 -30
|
||||
5130 13903 -30
|
||||
6510 14632 -30
|
||||
7044 13531 -30
|
||||
7579 12431 -30
|
||||
7579 12136 -30
|
||||
6789 10943 -30
|
||||
6851 10881 -30
|
||||
7781 12291 -30
|
||||
8866 12462 -30
|
||||
10106 12152 -30
|
||||
10819 11516 -30
|
||||
10839 10493 -30
|
||||
10860 9470 -30
|
||||
10881 8447 -30
|
||||
11051 7827 -30
|
||||
9300 7037 -30
|
||||
9346 6959 -30
|
||||
11098 7750 -30
|
||||
11532 7083 -30
|
||||
12198 6680 -30
|
||||
0 0 0
|
||||
12260 6820 -30
|
||||
11640 7223 -30
|
||||
11253 7812 -30
|
||||
11051 8509 -30
|
||||
11016 9567 -30
|
||||
10981 10625 -30
|
||||
10946 11683 -30
|
||||
10912 12741 -30
|
||||
11284 14601 -30
|
||||
12183 15779 -30
|
||||
13082 16957 -30
|
||||
0 0 0
|
||||
10788 11702 -30
|
||||
10199 12198 -30
|
||||
10757 12663 -30
|
||||
10788 11702 -30
|
||||
10788 11702 -30
|
||||
0 0 0
|
||||
10524 7579 0
|
||||
10524 7579 -30
|
||||
10261 7463 -222
|
||||
9997 7347 -286
|
||||
9734 7230 -222
|
||||
9470 7114 -30
|
||||
9470 7114 0
|
||||
0 0 0
|
||||
10602 7517 0
|
||||
10602 7517 -30
|
||||
10338 7401 -222
|
||||
10075 7285 -286
|
||||
9811 7168 -222
|
||||
9548 7052 -30
|
||||
9548 7052 0
|
||||
0 0 0
|
||||
16352 1581 0
|
||||
15558 2305 0
|
||||
14763 3030 0
|
||||
13969 3754 0
|
||||
13175 4479 0
|
||||
14260 4495 0
|
||||
15391 4045 0
|
||||
16316 3410 0
|
||||
17241 2774 0
|
||||
18166 2139 0
|
||||
18150 1720 0
|
||||
17670 1457 0
|
||||
16352 1581 0
|
||||
16352 1581 0
|
||||
0 0 0
|
||||
20227 976 -30
|
||||
20754 2402 -30
|
||||
20692 2418 -30
|
||||
20165 1038 -30
|
||||
20227 976 -30
|
||||
20227 976 -30
|
||||
0 0 0
|
||||
16724 21018 0
|
||||
17507 21700 0
|
||||
18290 22382 0
|
||||
18150 22521 0
|
||||
17088 21979 0
|
||||
16027 21436 0
|
||||
14802 20181 0
|
||||
15763 20599 0
|
||||
16724 21018 0
|
||||
16724 21018 0
|
||||
0 0 0
|
||||
12400 17019 -30
|
||||
11408 17949 -30
|
||||
11470 17980 -30
|
||||
12446 17050 -30
|
||||
12400 17019 -30
|
||||
12400 17019 -30
|
||||
0 0 0
|
||||
16414 20553 -30
|
||||
15624 21963 -30
|
||||
15686 22025 -30
|
||||
16476 20599 -30
|
||||
16414 20553 -30
|
||||
16414 20553 -30
|
||||
0 0 0
|
||||
19654 23002 -30
|
||||
18693 24242 -30
|
||||
18770 24288 -30
|
||||
19747 23048 -30
|
||||
19654 23002 -30
|
||||
19654 23002 -30
|
||||
0 0 0
|
||||
5704 17887 -30
|
||||
4371 18228 -30
|
||||
4402 18290 -30
|
||||
5750 17933 -30
|
||||
5704 17887 -30
|
||||
5704 17887 -30
|
||||
0 0 0
|
||||
6138 22521 -30
|
||||
4836 22335 -30
|
||||
4836 22444 -30
|
||||
6138 22614 -30
|
||||
6138 22521 -30
|
||||
6138 22521 -30
|
||||
0 0 0
|
||||
-4913 32472 -30
|
||||
-6463 32643 -30
|
||||
-6401 32736 -30
|
||||
-4944 32581 -30
|
||||
-4913 32472 -30
|
||||
-4913 32472 -30
|
||||
0 0 0
|
||||
26365 31976 -30
|
||||
24939 32302 -30
|
||||
24986 32410 -30
|
||||
26412 32069 -30
|
||||
26365 31976 -30
|
||||
26365 31976 -30
|
||||
0 0 0
|
||||
0 0 0
|
||||
@@ -0,0 +1,9 @@
|
||||
AlWuzEre 48
|
||||
-1 -1 -1 -1 -1 1
|
||||
-1 -1 -1 -1 1 -1
|
||||
-1 1 1 -1 -1 1
|
||||
-1 1 1 -1 1 -1
|
||||
-1 -1 1 1 0 0
|
||||
-1 -1 -1 1 0 0
|
||||
-1 1 -1 1 0 0
|
||||
-1 1 1 1 0 0
|
||||
@@ -0,0 +1,264 @@
|
||||
6511 -1785 -30
|
||||
6267 -952 -30
|
||||
7095 -739 -30
|
||||
7339 -1571 -30
|
||||
6511 -1785 -30
|
||||
6803 -1262 -577
|
||||
7095 -739 -30
|
||||
0 0 0
|
||||
6267 -952 -30
|
||||
6803 -1262 -577
|
||||
7339 -1571 -30
|
||||
0 0 0
|
||||
24046 -16204 -30
|
||||
23575 -15543 -30
|
||||
24236 -15072 -30
|
||||
24707 -15732 -30
|
||||
24046 -16204 -30
|
||||
24141 -15638 -546
|
||||
24236 -15072 -30
|
||||
0 0 0
|
||||
23575 -15543 -30
|
||||
24141 -15638 -546
|
||||
24707 -15732 -30
|
||||
0 0 0
|
||||
26090 -16254 -30
|
||||
25960 -16064 -30
|
||||
26150 -15934 -30
|
||||
26280 -16124 -30
|
||||
26090 -16254 -30
|
||||
26120 -16094 -176
|
||||
26150 -15934 -30
|
||||
0 0 0
|
||||
25960 -16064 -30
|
||||
26120 -16094 -176
|
||||
26280 -16124 -30
|
||||
0 0 0
|
||||
41193 -15685 -30
|
||||
40827 -15165 -30
|
||||
41348 -14799 -30
|
||||
41714 -15320 -30
|
||||
41193 -15685 -30
|
||||
41271 -15242 -434
|
||||
41348 -14799 -30
|
||||
0 0 0
|
||||
40827 -15165 -30
|
||||
41271 -15242 -434
|
||||
41714 -15320 -30
|
||||
0 0 0
|
||||
17255 -4645 -30
|
||||
16887 -4140 -30
|
||||
17410 -3759 -30
|
||||
17776 -4280 -30
|
||||
17255 -4645 -30
|
||||
17332 -4206 -434
|
||||
17410 -3759 -30
|
||||
0 0 0
|
||||
16887 -4140 -30
|
||||
17332 -4206 -434
|
||||
17776 -4280 -30
|
||||
0 0 0
|
||||
45863 -17213 -30
|
||||
45495 -16708 -30
|
||||
46018 -16327 -30
|
||||
46383 -16848 -30
|
||||
45863 -17213 -30
|
||||
45940 -16774 -434
|
||||
46018 -16327 -30
|
||||
0 0 0
|
||||
45495 -16708 -30
|
||||
45940 -16774 -434
|
||||
46383 -16848 -30
|
||||
0 0 0
|
||||
66583 -8805 -30
|
||||
66112 -8145 -30
|
||||
66772 -7673 -30
|
||||
67243 -8334 -30
|
||||
66583 -8805 -30
|
||||
66678 -8239 -546
|
||||
66772 -7673 -30
|
||||
0 0 0
|
||||
66112 -8145 -30
|
||||
66678 -8239 -546
|
||||
67243 -8334 -30
|
||||
0 0 0
|
||||
75995 -18851 -30
|
||||
76008 -18777 -150
|
||||
75338 -17822 -150
|
||||
75264 -17810 -30
|
||||
75995 -18851 -30
|
||||
77039 -18105 -30
|
||||
76008 -18777 -150
|
||||
76964 -18092 -150
|
||||
0 0 0
|
||||
77039 -18105 -30
|
||||
76292 -17062 -30
|
||||
75264 -17810 -30
|
||||
0 0 0
|
||||
76964 -18092 -150
|
||||
76280 -17136 -150
|
||||
75338 -17822 -150
|
||||
0 0 0
|
||||
76280 -17136 -150
|
||||
76292 -17062 -30
|
||||
0 0 0
|
||||
76021 -18702 -150
|
||||
76033 -18628 -270
|
||||
75485 -17847 -270
|
||||
75412 -17835 -150
|
||||
76021 -18702 -150
|
||||
76890 -18080 -150
|
||||
76033 -18628 -270
|
||||
76816 -18068 -270
|
||||
0 0 0
|
||||
76890 -18080 -150
|
||||
76268 -17211 -150
|
||||
75412 -17835 -150
|
||||
0 0 0
|
||||
76816 -18068 -270
|
||||
76256 -17285 -270
|
||||
75485 -17847 -270
|
||||
0 0 0
|
||||
76256 -17285 -270
|
||||
76268 -17211 -150
|
||||
0 0 0
|
||||
76046 -18553 -270
|
||||
76059 -18479 -391
|
||||
75632 -17871 -391
|
||||
75559 -17859 -270
|
||||
76046 -18553 -270
|
||||
76742 -18055 -270
|
||||
76059 -18479 -391
|
||||
76667 -18043 -391
|
||||
0 0 0
|
||||
76742 -18055 -270
|
||||
76244 -17360 -270
|
||||
75559 -17859 -270
|
||||
0 0 0
|
||||
76667 -18043 -391
|
||||
76232 -17435 -391
|
||||
75632 -17871 -391
|
||||
0 0 0
|
||||
76232 -17435 -391
|
||||
76244 -17360 -270
|
||||
0 0 0
|
||||
76072 -18404 -391
|
||||
76084 -18330 -511
|
||||
75780 -17896 -511
|
||||
75706 -17884 -391
|
||||
76072 -18404 -391
|
||||
76593 -18031 -391
|
||||
76084 -18330 -511
|
||||
76519 -18019 -511
|
||||
0 0 0
|
||||
76593 -18031 -391
|
||||
76220 -17509 -391
|
||||
75706 -17884 -391
|
||||
0 0 0
|
||||
76519 -18019 -511
|
||||
76208 -17584 -511
|
||||
75780 -17896 -511
|
||||
0 0 0
|
||||
76208 -17584 -511
|
||||
76220 -17509 -391
|
||||
0 0 0
|
||||
76097 -18255 -511
|
||||
76110 -18180 -632
|
||||
75927 -17920 -632
|
||||
75853 -17908 -511
|
||||
76097 -18255 -511
|
||||
76445 -18006 -511
|
||||
76110 -18180 -632
|
||||
76370 -17994 -632
|
||||
0 0 0
|
||||
76445 -18006 -511
|
||||
76196 -17658 -511
|
||||
75853 -17908 -511
|
||||
0 0 0
|
||||
76370 -17994 -632
|
||||
76184 -17733 -632
|
||||
75927 -17920 -632
|
||||
0 0 0
|
||||
76184 -17733 -632
|
||||
76196 -17658 -511
|
||||
0 0 0
|
||||
76122 -18106 -632
|
||||
76135 -18031 -752
|
||||
76074 -17945 -752
|
||||
76000 -17932 -632
|
||||
76122 -18106 -632
|
||||
76296 -17982 -632
|
||||
76135 -18031 -752
|
||||
76222 -17969 -752
|
||||
0 0 0
|
||||
76296 -17982 -632
|
||||
76172 -17808 -632
|
||||
76000 -17932 -632
|
||||
0 0 0
|
||||
76222 -17969 -752
|
||||
76160 -17882 -752
|
||||
76074 -17945 -752
|
||||
0 0 0
|
||||
76160 -17882 -752
|
||||
76172 -17808 -632
|
||||
0 0 0
|
||||
86332 -23736 -30
|
||||
85964 -23231 -30
|
||||
86486 -22850 -30
|
||||
86852 -23371 -30
|
||||
86332 -23736 -30
|
||||
86408 -23297 -434
|
||||
86486 -22850 -30
|
||||
0 0 0
|
||||
85964 -23231 -30
|
||||
86408 -23297 -434
|
||||
86852 -23371 -30
|
||||
0 0 0
|
||||
46429 -18090 -30
|
||||
46299 -17900 -30
|
||||
46489 -17770 -30
|
||||
46619 -17960 -30
|
||||
46429 -18090 -30
|
||||
46459 -17930 -176
|
||||
46489 -17770 -30
|
||||
0 0 0
|
||||
46299 -17900 -30
|
||||
46459 -17930 -176
|
||||
46619 -17960 -30
|
||||
0 0 0
|
||||
97292 -27848 -30
|
||||
98318 -27115 -30
|
||||
99051 -28141 -30
|
||||
98025 -28874 -30
|
||||
97292 -27848 -30
|
||||
98171 -27994 -832
|
||||
99051 -28141 -30
|
||||
0 0 0
|
||||
98318 -27115 -30
|
||||
98171 -27994 -832
|
||||
98025 -28874 -30
|
||||
0 0 0
|
||||
99469 -23347 -30
|
||||
98998 -22687 -30
|
||||
99659 -22216 -30
|
||||
100130 -22876 -30
|
||||
99469 -23347 -30
|
||||
99564 -22782 -546
|
||||
99659 -22216 -30
|
||||
0 0 0
|
||||
98998 -22687 -30
|
||||
99564 -22782 -546
|
||||
100130 -22876 -30
|
||||
0 0 0
|
||||
97982 -24924 -30
|
||||
98832 -24323 -30
|
||||
99434 -25173 -30
|
||||
98583 -25775 -30
|
||||
97982 -24924 -30
|
||||
98708 -25049 -692
|
||||
99434 -25173 -30
|
||||
0 0 0
|
||||
98832 -24323 -30
|
||||
98708 -25049 -692
|
||||
98583 -25775 -30
|
||||
0 0 0
|
||||
+464
@@ -0,0 +1,464 @@
|
||||
2114 800 0
|
||||
2687 1012 0
|
||||
3259 1225 0
|
||||
3831 1437 0
|
||||
4371 1643 0
|
||||
4911 1850 0
|
||||
5451 2056 0
|
||||
5994 2188 0
|
||||
6536 2319 0
|
||||
7079 2451 0
|
||||
7622 2582 0
|
||||
8209 2583 0
|
||||
8795 2583 0
|
||||
9382 2583 0
|
||||
9969 2584 0
|
||||
10506 2538 0
|
||||
11043 2492 0
|
||||
11580 2446 0
|
||||
12117 2400 0
|
||||
12654 2354 0
|
||||
13191 2308 0
|
||||
13727 2263 0
|
||||
14311 2479 0
|
||||
14894 2695 0
|
||||
15477 2911 0
|
||||
16032 2778 0
|
||||
16588 2646 0
|
||||
17143 2514 0
|
||||
17698 2381 0
|
||||
18254 2249 0
|
||||
18809 2117 0
|
||||
19359 2161 0
|
||||
19909 2206 0
|
||||
20459 2251 0
|
||||
21009 2295 0
|
||||
21580 2303 0
|
||||
22151 2311 0
|
||||
22722 2319 0
|
||||
23292 2327 0
|
||||
23863 2335 0
|
||||
24377 2205 0
|
||||
24891 2074 0
|
||||
25405 1944 0
|
||||
25919 1813 0
|
||||
26232 1326 0
|
||||
26545 839 0
|
||||
26857 352 0
|
||||
27564 144 0
|
||||
28270 -63 0
|
||||
28746 -354 0
|
||||
29222 -644 0
|
||||
29698 -935 0
|
||||
30195 -1072 0
|
||||
30693 -1210 0
|
||||
31190 -1347 0
|
||||
31750 -1202 0
|
||||
32310 -1057 0
|
||||
32871 -912 0
|
||||
33431 -767 0
|
||||
33828 -421 0
|
||||
34226 -75 0
|
||||
34624 270 0
|
||||
35297 270 0
|
||||
35970 270 0
|
||||
36578 138 0
|
||||
37185 7 0
|
||||
37571 -367 0
|
||||
37957 -742 0
|
||||
38305 -1111 0
|
||||
38652 -1480 0
|
||||
38865 -1972 0
|
||||
39078 -2463 0
|
||||
39658 -2795 0
|
||||
40205 -2855 0
|
||||
40752 -2916 0
|
||||
41324 -2690 0
|
||||
41895 -2465 0
|
||||
42636 -2428 0
|
||||
42638 -2412 0
|
||||
43131 -2528 0
|
||||
43623 -2643 0
|
||||
44139 -2872 0
|
||||
44655 -3100 0
|
||||
45171 -3329 0
|
||||
45687 -3557 0
|
||||
46142 -3788 0
|
||||
46598 -4018 0
|
||||
47053 -4249 0
|
||||
47509 -4479 0
|
||||
47965 -4710 0
|
||||
48420 -4940 0
|
||||
48978 -5179 0
|
||||
49535 -5417 0
|
||||
50093 -5655 0
|
||||
50650 -5893 0
|
||||
51171 -6091 0
|
||||
51691 -6289 0
|
||||
52211 -6487 0
|
||||
52731 -6684 0
|
||||
53250 -6701 0
|
||||
53768 -6717 0
|
||||
54287 -6734 0
|
||||
54806 -6750 0
|
||||
55324 -6767 0
|
||||
55843 -6783 0
|
||||
56362 -6800 0
|
||||
56873 -6702 0
|
||||
57384 -6604 0
|
||||
57895 -6507 0
|
||||
58407 -6409 0
|
||||
58918 -6311 0
|
||||
59579 -6398 0
|
||||
60240 -6485 0
|
||||
60901 -6572 0
|
||||
61338 -6873 0
|
||||
61776 -7174 0
|
||||
62214 -7476 0
|
||||
62932 -7662 0
|
||||
63649 -7848 0
|
||||
64173 -8057 0
|
||||
64697 -8265 0
|
||||
65221 -8474 0
|
||||
65624 -8836 0
|
||||
66027 -9197 0
|
||||
66602 -9340 0
|
||||
67177 -9483 0
|
||||
67810 -9430 0
|
||||
68444 -9378 0
|
||||
68978 -9462 0
|
||||
69513 -9547 0
|
||||
70047 -9631 0
|
||||
70582 -9716 0
|
||||
71116 -9800 0
|
||||
71651 -9885 0
|
||||
72185 -9970 0
|
||||
72720 -10054 0
|
||||
73255 -10139 0
|
||||
73789 -10223 0
|
||||
74324 -10308 0
|
||||
74828 -10478 0
|
||||
75332 -10648 0
|
||||
75837 -10818 0
|
||||
76341 -10988 0
|
||||
76846 -11158 0
|
||||
77350 -11329 0
|
||||
77855 -11499 0
|
||||
78359 -11669 0
|
||||
78758 -12100 0
|
||||
79157 -12531 0
|
||||
79556 -12963 0
|
||||
80006 -13234 0
|
||||
80456 -13506 0
|
||||
80906 -13777 0
|
||||
81355 -14049 0
|
||||
81805 -14320 0
|
||||
82255 -14591 0
|
||||
82807 -14806 0
|
||||
83360 -15021 0
|
||||
83912 -15236 0
|
||||
84464 -15451 0
|
||||
85016 -15665 0
|
||||
85522 -15740 0
|
||||
86028 -15815 0
|
||||
86534 -15891 0
|
||||
87040 -15966 0
|
||||
87546 -16041 0
|
||||
88052 -16116 0
|
||||
88558 -16191 0
|
||||
89172 -16276 0
|
||||
89786 -16362 0
|
||||
90400 -16448 0
|
||||
91014 -16534 0
|
||||
91601 -16424 0
|
||||
92187 -16314 0
|
||||
92774 -16204 0
|
||||
93361 -16094 0
|
||||
93916 -16151 0
|
||||
94472 -16207 0
|
||||
95027 -16264 0
|
||||
95546 -16284 0
|
||||
96065 -16304 0
|
||||
96584 -16325 0
|
||||
97103 -16345 0
|
||||
97621 -16365 0
|
||||
98140 -16385 0
|
||||
98611 -16597 0
|
||||
99083 -16809 0
|
||||
99554 -17021 0
|
||||
100083 -17023 0
|
||||
100612 -17025 0
|
||||
101142 -17027 0
|
||||
101671 -17029 0
|
||||
102200 -17031 0
|
||||
102729 -17034 0
|
||||
103258 -17036 0
|
||||
103788 -17038 0
|
||||
104317 -17040 0
|
||||
104846 -17042 0
|
||||
105375 -17044 0
|
||||
105904 -17046 0
|
||||
0 0 0
|
||||
2162 465 0
|
||||
2734 677 0
|
||||
3306 889 0
|
||||
3878 1102 0
|
||||
4401 1258 0
|
||||
4923 1415 0
|
||||
5446 1571 0
|
||||
5998 1713 0
|
||||
6550 1856 0
|
||||
7102 1998 0
|
||||
7654 2140 0
|
||||
8223 2185 0
|
||||
8793 2231 0
|
||||
9363 2277 0
|
||||
9933 2323 0
|
||||
10498 2255 0
|
||||
11063 2187 0
|
||||
11628 2120 0
|
||||
12193 2052 0
|
||||
12759 1984 0
|
||||
13324 1916 0
|
||||
13889 1849 0
|
||||
14383 1940 0
|
||||
14877 2032 0
|
||||
15371 2123 0
|
||||
15865 2215 0
|
||||
16455 2139 0
|
||||
17046 2062 0
|
||||
17636 1986 0
|
||||
18226 1910 0
|
||||
18817 1834 0
|
||||
19430 1895 0
|
||||
20044 1955 0
|
||||
20657 2016 0
|
||||
21197 1992 0
|
||||
21736 1969 0
|
||||
22275 1946 0
|
||||
22815 1923 0
|
||||
23354 1900 0
|
||||
23893 1877 0
|
||||
24403 1566 0
|
||||
24912 1255 0
|
||||
25422 944 0
|
||||
25885 597 0
|
||||
26348 251 0
|
||||
26811 -94 0
|
||||
27425 -399 0
|
||||
28040 -704 0
|
||||
28486 -1100 0
|
||||
28931 -1496 0
|
||||
29377 -1892 0
|
||||
29988 -1852 0
|
||||
30598 -1812 0
|
||||
31209 -1772 0
|
||||
31785 -1571 0
|
||||
32361 -1369 0
|
||||
32937 -1168 0
|
||||
33512 -967 0
|
||||
34119 -597 0
|
||||
34727 -228 0
|
||||
35398 -181 0
|
||||
36070 -134 0
|
||||
36579 -299 0
|
||||
37088 -464 0
|
||||
37479 -800 0
|
||||
37871 -1137 0
|
||||
38329 -1889 0
|
||||
38658 -2561 0
|
||||
38931 -2959 0
|
||||
39401 -3181 0
|
||||
39994 -3193 0
|
||||
40587 -3206 0
|
||||
41154 -3066 0
|
||||
41721 -2926 0
|
||||
42286 -2919 0
|
||||
42850 -2911 0
|
||||
43446 -3127 0
|
||||
44042 -3344 0
|
||||
44578 -3575 0
|
||||
45115 -3806 0
|
||||
45651 -4038 0
|
||||
46108 -4294 0
|
||||
46565 -4551 0
|
||||
47022 -4808 0
|
||||
47480 -5065 0
|
||||
47937 -5322 0
|
||||
48394 -5578 0
|
||||
48957 -5806 0
|
||||
49520 -6033 0
|
||||
50083 -6260 0
|
||||
50646 -6487 0
|
||||
51144 -6619 0
|
||||
51642 -6752 0
|
||||
52140 -6884 0
|
||||
52638 -7016 0
|
||||
53145 -7033 0
|
||||
53653 -7050 0
|
||||
54160 -7067 0
|
||||
54667 -7084 0
|
||||
55175 -7101 0
|
||||
55682 -7119 0
|
||||
56189 -7136 0
|
||||
56738 -7062 0
|
||||
57287 -6988 0
|
||||
57835 -6915 0
|
||||
58384 -6841 0
|
||||
58933 -6767 0
|
||||
59564 -6876 0
|
||||
60196 -6985 0
|
||||
60828 -7094 0
|
||||
61438 -7485 0
|
||||
62049 -7875 0
|
||||
62552 -7971 0
|
||||
63055 -8068 0
|
||||
63558 -8164 0
|
||||
64060 -8458 0
|
||||
64561 -8752 0
|
||||
65062 -9047 0
|
||||
65504 -9304 0
|
||||
65945 -9561 0
|
||||
66561 -9804 0
|
||||
67177 -10046 0
|
||||
67811 -9876 0
|
||||
68445 -9707 0
|
||||
68973 -9801 0
|
||||
69502 -9895 0
|
||||
70030 -9989 0
|
||||
70558 -10083 0
|
||||
71087 -10177 0
|
||||
71615 -10271 0
|
||||
72143 -10365 0
|
||||
72672 -10459 0
|
||||
73200 -10553 0
|
||||
73728 -10647 0
|
||||
74205 -10818 0
|
||||
74682 -10989 0
|
||||
75159 -11160 0
|
||||
75636 -11331 0
|
||||
76113 -11502 0
|
||||
76590 -11673 0
|
||||
77067 -11843 0
|
||||
77544 -12014 0
|
||||
78021 -12185 0
|
||||
78467 -12581 0
|
||||
78912 -12977 0
|
||||
79358 -13373 0
|
||||
79777 -13661 0
|
||||
80196 -13949 0
|
||||
80614 -14237 0
|
||||
81033 -14525 0
|
||||
81452 -14813 0
|
||||
81871 -15101 0
|
||||
82336 -15302 0
|
||||
82801 -15502 0
|
||||
83266 -15703 0
|
||||
83731 -15903 0
|
||||
84196 -16104 0
|
||||
84661 -16304 0
|
||||
85179 -16361 0
|
||||
85696 -16418 0
|
||||
86214 -16474 0
|
||||
86732 -16531 0
|
||||
87250 -16587 0
|
||||
87767 -16644 0
|
||||
88285 -16700 0
|
||||
88803 -16757 0
|
||||
89320 -16814 0
|
||||
89838 -16870 0
|
||||
90356 -16927 0
|
||||
90873 -16983 0
|
||||
91376 -17028 0
|
||||
91879 -17074 0
|
||||
92382 -17119 0
|
||||
92885 -17164 0
|
||||
93388 -17209 0
|
||||
93890 -17254 0
|
||||
94393 -17299 0
|
||||
94896 -17344 0
|
||||
95399 -17389 0
|
||||
95902 -17435 0
|
||||
96405 -17480 0
|
||||
96908 -17525 0
|
||||
97410 -17570 0
|
||||
97913 -17615 0
|
||||
98416 -17660 0
|
||||
98945 -17654 0
|
||||
99473 -17647 0
|
||||
100002 -17640 0
|
||||
100530 -17633 0
|
||||
101059 -17627 0
|
||||
101588 -17620 0
|
||||
102116 -17613 0
|
||||
102645 -17606 0
|
||||
103173 -17600 0
|
||||
103702 -17593 0
|
||||
104230 -17586 0
|
||||
104759 -17579 0
|
||||
105288 -17573 0
|
||||
105816 -17566 0
|
||||
0 0 0
|
||||
92115 -16718 0
|
||||
92688 -16767 0
|
||||
93260 -16816 0
|
||||
93832 -16864 0
|
||||
94152 -16705 0
|
||||
94092 -16462 0
|
||||
93530 -16337 0
|
||||
92812 -16440 0
|
||||
92133 -16705 0
|
||||
92115 -16718 0
|
||||
92115 -16718 0
|
||||
0 0 0
|
||||
94634 -16835 0
|
||||
94977 -17071 0
|
||||
95769 -17228 0
|
||||
96425 -17179 0
|
||||
97082 -17130 0
|
||||
97609 -17274 0
|
||||
98137 -17418 0
|
||||
98557 -17210 0
|
||||
98398 -16891 0
|
||||
97556 -16758 0
|
||||
97062 -16595 0
|
||||
96519 -16730 0
|
||||
95976 -16866 0
|
||||
95484 -16688 0
|
||||
94993 -16510 0
|
||||
94618 -16614 0
|
||||
94582 -16765 0
|
||||
94634 -16835 0
|
||||
94634 -16835 0
|
||||
0 0 0
|
||||
24830 1637 0
|
||||
24832 1762 0
|
||||
24979 1804 0
|
||||
25332 1755 0
|
||||
25641 1617 0
|
||||
26002 1176 0
|
||||
26128 845 0
|
||||
25983 818 0
|
||||
25463 1126 0
|
||||
25129 1423 0
|
||||
24830 1637 0
|
||||
24830 1637 0
|
||||
0 0 0
|
||||
30671 -1587 0
|
||||
30754 -1443 0
|
||||
30609 -1360 0
|
||||
30151 -1280 0
|
||||
29513 -1144 0
|
||||
28801 -747 0
|
||||
28260 -359 0
|
||||
27538 -39 0
|
||||
27392 -81 0
|
||||
27936 -439 0
|
||||
28549 -759 0
|
||||
28991 -1181 0
|
||||
29395 -1535 0
|
||||
29709 -1641 0
|
||||
30334 -1650 0
|
||||
30671 -1587 0
|
||||
30671 -1587 0
|
||||
0 0 0
|
||||
+214
@@ -0,0 +1,214 @@
|
||||
14th International Obfuscated C Code Contest Rules |
|
||||
|
||||
Copyright (c) Leonid A. Broukhis, Jeremy Horn, Landon Curt Noll and |
|
||||
Peter Seebach, 1998. |
|
||||
|
||||
All Rights Reserved. Permission for personal, education or non-profit use is |
|
||||
granted provided this this copyright and notice are included in its entirety |
|
||||
and remains unaltered. All other uses must receive prior permission in |
|
||||
writing from the contest judges. |
|
||||
|
||||
Obfuscate: tr.v. -cated, -cating, -cates. 1. a. To render obscure.
|
||||
b. To darken. 2. To confuse: his emotions obfuscated his
|
||||
judgment. [LLat. obfuscare, to darken : ob(intensive) +
|
||||
Lat. fuscare, to darken < fuscus, dark.] -obfuscation n.
|
||||
obfuscatory adj.
|
||||
|
||||
|
||||
GOALS OF THE CONTEST:
|
||||
|
||||
* To write the most Obscure/Obfuscated C program under the rules below.
|
||||
* To show the importance of programming style, in an ironic way.
|
||||
* To stress C compilers with unusual code.
|
||||
* To illustrate some of the subtleties of the C language.
|
||||
* To provide a safe forum for poor C code. :-)
|
||||
|
||||
The 14th IOCCC contest window is: |
|
||||
|
||||
26-Nov-98 12:00 UTC to 31-Jan-99 23:59:59 UTC |
|
||||
|
||||
NOTE: Some of the changes from the 1998 rules are denoted by change bars. ---> |
|
||||
However some changes such as 1996 to 1998 are not marked. |
|
||||
|
||||
|
||||
RULES:
|
||||
|
||||
To help us with the volume of entries, we ask that you follow these rules:
|
||||
|
||||
1) Your entry must be a complete program.
|
||||
|
||||
2) Your entry must be <= 3217 bytes in length. The number of characters
|
||||
excluding whitespace (tab, space, newline), and excluding any ; { or }
|
||||
immediately followed by whitespace or end of file, must be <= 1536.
|
||||
|
||||
3) Your entry must be submitted in the following format:
|
||||
|
||||
---entry---
|
||||
rule: 1998
|
||||
fix: y or n (n => this is a new entry, y => this replaces an older entry)
|
||||
title: title of entry (see comments below)
|
||||
entry: Entry number from 0 to 7 inclusive (your 1st entry should by 0)
|
||||
date: Date/time of submission in UTC (see comments below)
|
||||
host: Machine(s) and OS(s) under which your entry was tested
|
||||
Use tab indented lines if needed
|
||||
---remark---
|
||||
Place remarks about this entry in this section. It would be helpful if
|
||||
you were to indent your remarks with 4 spaces, though it is not a
|
||||
requirement. Also, if possible, try to avoid going beyond the 79th
|
||||
column. Blank lines are permitted.
|
||||
---author---
|
||||
name: your name
|
||||
org: School/Company/Organization
|
||||
addr: postal address
|
||||
use tab indented lines to continue
|
||||
don't forget to include the country
|
||||
email: EMail address from a well known site or registered domain.
|
||||
If you give several forms, list them on separate tab indented lines.
|
||||
url: http://your/home/page.html or say none if you don't have one
|
||||
anon: y or n (y => remain anonymous, n => OK to publish this info)
|
||||
---info---
|
||||
If your program needs an info file, place a uuencoded copy of it in
|
||||
this section. In the case of multiple info files, use multiple info
|
||||
sections. If your entry does not need a info file, skip this section.
|
||||
---build---
|
||||
Place a uuencoded copy of the command(s) used to compile/build your program
|
||||
in this section. It must uudecode into a file named 'build'. The resulting
|
||||
file must be 255 bytes or less.
|
||||
---program---
|
||||
Place a uuencoded copy of your program in this section. It must uudecode
|
||||
into a file named is 'prog.c'. The resulting file must follow rule #2.
|
||||
---end---
|
||||
|
||||
Regarding the above format:
|
||||
|
||||
* The title must match the expression: |
|
||||
|
||||
^[a-zA-Z0-9_=][a-zA-Z0-9_=+-]*$ |
|
||||
|
||||
and must be 1 to 31 characters in length. |
|
||||
|
||||
It is suggested, but not required, that the title should
|
||||
incorporate the author(s) username(s).
|
||||
|
||||
* The date in the ---entry--- section should be given with respect
|
||||
to UTC. The format of the date should be as returned by asctime()
|
||||
using the C locale. (see guidelines for more info)
|
||||
|
||||
* You may correct/revise a previously submitted entry by sending
|
||||
it to the contest email address. Be sure to set 'fix' in the
|
||||
---entry--- section to 'y'. The corrected entry must use the same
|
||||
title and entry number as submission that is being corrected. Be
|
||||
sure that you note the re-submission in the ---remark--- as well.
|
||||
|
||||
* With the exception of the header, all text outside of the above
|
||||
format may be ignored by the judges. If you need to tell the judges
|
||||
something, put it in the ---remark--- section, or send a separate
|
||||
EMail message to the judges.
|
||||
|
||||
* Information from the ---author--- section will be published unless
|
||||
'y' was given to the respective author's 'anon' line.
|
||||
|
||||
* To credit multiple authors, include an ---author--- section for
|
||||
each author. Each should start with ---author--- line, and
|
||||
should be found between the ---entry--- and ---build--- sections.
|
||||
|
||||
* The home page URL in the ---author--- section must be fully |
|
||||
qualified or must be the word `none'. |
|
||||
|
||||
* The entry's remarks should include:
|
||||
- note if this entry is a re-submission of a previous entry.
|
||||
- what this program does
|
||||
- how to run the program (sample args or input)
|
||||
- special compile or execution instructions, if any
|
||||
- special filename requirements (see rule 4 and 5)
|
||||
- information about any ---info--- files
|
||||
- why you think the program is obfuscated
|
||||
- any other remarks (humorous or otherwise)
|
||||
|
||||
* Do not rot13 your entry's remarks. You may suggest that certain
|
||||
portions of your remarks be rot13ed if your entry wins an award.
|
||||
|
||||
* Info files should be used only to supplement your entry. They
|
||||
should not be required to exist.
|
||||
|
||||
* If your entry does not need an info file, skip the ---info---
|
||||
section. If your entry needs multiple info files, use multiple
|
||||
---info--- sections, one per info file. You should describe
|
||||
each info file in the ---remark--- section.
|
||||
|
||||
* Your sections must in the same order as in the above template.
|
||||
|
||||
4) If your entry is selected as a winner, it will be modified as follows:
|
||||
|
||||
'build' is incorporated into a makefile, and 'build' is removed
|
||||
'prog.c' is renamed to your entry's title, followed by an optional
|
||||
digit, followed by '.c'
|
||||
your entry is compiled into a file with the name of your entry's
|
||||
title, possibly followed by a digit
|
||||
|
||||
If your entry requires that a build file exist, state so in your
|
||||
entry's remark section. The makefile will be arranged to execute a
|
||||
build shell script containing the 'build' information. The name of
|
||||
this build shell script will be your entry's title, possibly followed
|
||||
by a digit, followed by '.sh'.
|
||||
|
||||
If needed, your entry's remarks should indicate how your entry must
|
||||
be changed in order to deal with the new filenames.
|
||||
|
||||
5) The build file, the source and the resulting executable should be
|
||||
treated as read-only files. If your entry needs to modify these files,
|
||||
it should make and modify a copy of the appropriate file. If this
|
||||
occurs, state so in your entry's remarks.
|
||||
|
||||
6) The uudecoded ---program--- section must be able to be compiled
|
||||
cleanly by an ANSI C compiler, or if there are any compile errors,
|
||||
they must be documented in the ---remark--- section.
|
||||
|
||||
7) The program must be of original work. All programs must be in the
|
||||
public domain. All copyrighted programs will be rejected.
|
||||
|
||||
8) Entries must be received prior to 31-Jan-99 23:59:59 UTC. (UTC is |
|
||||
essentially equivalent to Greenwich Mean Time) EMail your entries to:
|
||||
|
||||
entry@ioccc.org |
|
||||
|
||||
You must include the words ``ioccc entry'' in the subject
|
||||
of your EMail when sending in your entry! Failure to do so may
|
||||
result in the loss of your entry!
|
||||
|
||||
If possible, we request that you hold off on EMailing your entries
|
||||
until 26-Nov-98 12:00 UTC. Early entries will be accepted, however. |
|
||||
We will attempt to EMail a confirmation to the sender of any entry
|
||||
received after 26-Nov-98 12:00 UTC and before the close of the contest. |
|
||||
|
||||
9) Each person may submit up to 8 entries per contest year. Each entry
|
||||
must be sent in a separate EMail letter.
|
||||
|
||||
10) Entries requiring human interaction to be built are not allowed.
|
||||
|
||||
11) Programs that require special privileges (setuid, setgid, super-user,
|
||||
special owner or group) are not allowed.
|
||||
|
||||
12) Legal abuse of the rules is somewhat encouraged. An entry that, in
|
||||
the opinion of the judges, violates the rules will be disqualified.
|
||||
Entries that attempt to abuse the rules must try to justify why
|
||||
their rule abuse is legal in the ---remark--- section.
|
||||
|
||||
|
||||
FOR MORE INFORMATION:
|
||||
|
||||
The judging will be done by Leonid A. Broukhis, Jeremy Horn, Landon
|
||||
Curt Noll and Peter Seebach. Please send questions or comments
|
||||
about the contest, to:
|
||||
|
||||
questions@ioccc.org (not the address for submitting entries) |
|
||||
|
||||
Comments about confusing rules and guidelines are also welcome.
|
||||
|
||||
The rules and the guidelines may (and often do) change from year to
|
||||
year. You should be sure you have the current rules and guidelines
|
||||
prior to submitting entries. To obtain them, visit the IOCCC web page: |
|
||||
|
||||
http://www.ioccc.org |
|
||||
|
||||
It has rules, guidelines and winners of previous contests (1984 to date).
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
.\"
|
||||
.\" To format this file into a text file say
|
||||
.\"
|
||||
.\" nroff -man samefile.1 or
|
||||
.\" groff -man -Tascii samefile.1
|
||||
.\"
|
||||
.TH SAMEFILE 1 "OCTOBER 1997" IOCCC "User Manuals"
|
||||
.SH NAME
|
||||
samefile \- find identical files
|
||||
.SH SYNOPSIS
|
||||
.B samefile
|
||||
.SH DESCRIPTION
|
||||
.B samefile
|
||||
reads a list of file names (one file name per line) from stdin.
|
||||
For each file name pair with identical contents, a
|
||||
line consisting of six tab separated fields is output:
|
||||
The size in bytes, two file names, the character ``='' if
|
||||
the two files are on the same device, ``X'' otherwise,
|
||||
and the link counts of the two files.
|
||||
The output is sorted in reverse order by size.
|
||||
|
||||
.B samefile
|
||||
uses two stages to give optimum performance.
|
||||
|
||||
In the first stage, all non-plain files are silently
|
||||
ignored (directories, devices, FIFOs, sockets,
|
||||
symbolic links) as well as files for which
|
||||
.BR stat (2)
|
||||
or
|
||||
.BR open (2)
|
||||
fails.
|
||||
The result of the first stage (the file names) is written into
|
||||
a binary tree with one node for every file size. Each node
|
||||
is in turn a linked list of file names along with inode and
|
||||
device information.
|
||||
It is also at this first stage where checks for hard links are done.
|
||||
For any inode only one filename will be added to the binary tree.
|
||||
|
||||
In the second stage all files having the same
|
||||
size are compared against each other. The rules
|
||||
of mathematical logic are applied to reduce work
|
||||
and output noise: if files A, B, and C have the same size and
|
||||
.B samefile
|
||||
finds that A = B and A = C then it will not
|
||||
compare B against C (and will not
|
||||
output a line for B and C) but only
|
||||
for A = B and A = C. The algorithm will detect
|
||||
equality across arbitrarily long chains.
|
||||
Note however, that because
|
||||
only the first filename per inode gets into the
|
||||
first stage, the output for a group of identical files
|
||||
with different inode numbers is also minimized. Suppose
|
||||
you have six identical files of size 100
|
||||
in an inode group consisting of the three
|
||||
inodes with numbers 10, 20 and 30:
|
||||
|
||||
.nf
|
||||
$ ls -i # output edited for readabilty:
|
||||
10 file1 20 file4 30 file6
|
||||
10 file2 20 file5
|
||||
10 file3
|
||||
$ ls | samefile
|
||||
100 file1 file4 = 3 2
|
||||
100 file1 file6 = 3 1
|
||||
|
||||
.fi
|
||||
The sum of the sizes in the first column is the amount of disk space
|
||||
you could gain by making all 6 files links to only one
|
||||
file or remove all but one of the files. To be precise,
|
||||
disk space is allocated in blocks - you will probably gain
|
||||
two blocks here, rather than 200 bytes.
|
||||
Note that it is not enough to just remove file4 and
|
||||
file6 (you would gain only 100 bytes because file5
|
||||
still exists.)
|
||||
|
||||
.SH LIMITATIONS
|
||||
.B Samefile
|
||||
was written with no limits in mind. The number of input lines is
|
||||
unlimited. The size of the actual files is only limited by
|
||||
available virtual memory needed to compare one pair of files.
|
||||
The only hard limit is the constraint that there should not
|
||||
be more than about 8192 files having the same size. Experience
|
||||
has shown that there are rarely more than a couple dozen
|
||||
files of the same size.
|
||||
.SH EXAMPLES
|
||||
.nf
|
||||
|
||||
For everybody:
|
||||
What are the duplicates under my home directory?
|
||||
|
||||
$ find $HOME | samefile
|
||||
|
||||
For the sysadmin folks:
|
||||
Report all duplicate files under /usr larger than 16k:
|
||||
|
||||
$ find /usr -size +16384c -a -type f | samefile
|
||||
|
||||
For the ftp and WWW admins:
|
||||
How much space is wasted below our site's /pub directory?
|
||||
|
||||
$ find /pub -type f | samefile | awk '{sum += $1} END {print sum}'
|
||||
|
||||
.fi
|
||||
|
||||
.SH "EXIT STATUS"
|
||||
If
|
||||
.B samefile
|
||||
runs out of memory the exit status is 1,
|
||||
zero otherwise.
|
||||
.fi
|
||||
.SH "SEE ALSO"
|
||||
.BR find (1),
|
||||
.BR ln (1),
|
||||
.BR rm (1)
|
||||
.\"
|
||||
.\" End Of Man Page
|
||||
@@ -0,0 +1,56 @@
|
||||
typedef void e();
|
||||
|
||||
e *w,*l,*u,*_o,*j,*t,*O,exit,b,c_,b_,a_,c,a,z_,x_,d,y_,_m;
|
||||
int q,m,_d,z,k,h,f[99];
|
||||
char y[26],_p[40][26],_q,r[2],*_,**s,*i,
|
||||
|
||||
*x[]= { "\n", ")", "if (", "}\n", ");\n\n", " ", ",&", "\"",
|
||||
",", " %%d", ";\n\n scanf(\"%%d", "%%d ", "else ", ",", "<",
|
||||
");\n", "printf(\"", "main()\n{\n int a" };
|
||||
|
||||
void g(){ O=j; printf(_); }
|
||||
void _j(){ O=_o; m=!m; h=h+m*(long)t; }
|
||||
void _u(){ O=g; _=x[0]; j=b; }
|
||||
void _r(){ O=g; _=x[1]; j=_u; }
|
||||
void _f(){ O=g; *r=y[k-1]; _=r; j=_r; }
|
||||
void _l(){ O=g; _=x[2]; j=x_; }
|
||||
void _c(){ O=(e*)h; }
|
||||
void n(){ O=_j; t=w; _o=_c; }
|
||||
void p(){ O=_j; h=0; t=l; _o=n; }
|
||||
void _b(){ O=p; q=*i+q*10-'0'; i=i+1; m=*i; w=_b; l=c; }
|
||||
void _s(){ O=g; _=x[3]; j=exit; }
|
||||
void v(){ O=p; z=z-1; m=z; w=z_; l=_s; }
|
||||
void _a(){ O=g; _=x[4]; *y=x[17][1]; z=0; j=b; }
|
||||
void _z(){ O=g; _=x[5]; j=p; k=k-1; m=k; w=_z; l=u; }
|
||||
void _h(){ O=g; _=x[6]; j=a_; }
|
||||
void _e(){ O=g; _=x[7]; k=0; j=_h; }
|
||||
void _t(){ O=g; _=x[8]; j=d; }
|
||||
void _g(){ O=g; _=x[7]; j=_t; k=0; }
|
||||
void _k(){ O=_z; k=f[z]; _q=y[k]; y[k]=y[k-1]; y[k-1]=_q; u=b_; k=z; }
|
||||
void d_(){ O=_k; y[z+1]=x[17][1]+z; f[z]=z+1; }
|
||||
void b (){ O=p; z=z+1; m=q-z; w=c_; k=z; l=_z; u=a; }
|
||||
void e_(){ O=g; _=x[9]; k=k+1; m=k<q; w=e_; l=_e; j=p; }
|
||||
void f_(){ O=g; _=x[10]; k=1; j=e_; }
|
||||
void g_(){ O=g; _=x[11]; j=p; k=k-1; m=k; w=g_; l=_g; }
|
||||
void h_(){ O=p; _p[z][k]=y[k]; k=k+1; m=k<=z; w=h_; l=d_; }
|
||||
void i_(){ O=p; y[k]=_p[z][k]; k=k+1; m=k<=z; w=i_; l=v; }
|
||||
void j_(){ O=i_; k=0; }
|
||||
void k_(){ O=p; m=k>1; w=_l; l=_u; }
|
||||
void l_(){ O=g; _=x[12]; j=k_; }
|
||||
void m_(){ O=g; _=x[13]; j=y_; }
|
||||
void n_(){ O=p; k=k+1; m=k<q; w=_h; l=_a; }
|
||||
void o_(){ O=g; _=x[14]; j=_f; }
|
||||
void c_(){ O=h_; k=0; }
|
||||
void p_(){ O=g; _=x[15]; j=v; }
|
||||
void b_(){ O=p; k=f[z]; m=k<=z; w=l_; l=k_; }
|
||||
void a_(){ O=g; *r=x[17][1]+k; _=r; j=n_; }
|
||||
void q_(){ O=p; k=k+1; m=k<q; w=m_; l=f_; }
|
||||
void c (){ O=g; r[1]=0; k=1; j=m_; }
|
||||
void a (){ O=g; k=z; j=g_; _=x[16]; }
|
||||
void z_(){ O=p; f[z]=f[z]-1; m=f[z]; w=_k; l=j_; }
|
||||
void x_(){ O=g; *r=y[k-2]; _=r; j=o_; }
|
||||
void d (){ O=g; *r=y[k]; _=r; k=k+1; m=k<z; w=_t; l=p_; j=p; }
|
||||
void y_(){ O=g; *r=x[17][1]+k; _=r; j=q_; }
|
||||
void r_(){ O=_b; _=x[17]; s=(char**)_d; s=s+1; i=*s; q=0; }
|
||||
main(v,c){ O=r_; _d=c;
|
||||
x: (O)(); goto x; }
|
||||
@@ -0,0 +1,92 @@
|
||||
Best Flow Control:
|
||||
|
||||
Mark Schnitzius
|
||||
ISX Corporation
|
||||
1280 West Peachtree St. Apt. 1507
|
||||
Atlanta, GA 30309
|
||||
USA
|
||||
|
||||
http://east.isx.com/~schnitzi/
|
||||
|
||||
|
||||
Judge's Comments:
|
||||
|
||||
To build:
|
||||
|
||||
make schnitzi
|
||||
|
||||
To use:
|
||||
|
||||
./schnitzi 5 > sort.c
|
||||
cc sort.c -o sort
|
||||
echo 123 > data
|
||||
echo 234 >> data
|
||||
echo 413 >> data
|
||||
echo 134 >> data
|
||||
echo 324 >> data
|
||||
./sort < data
|
||||
|
||||
This is a beautiful program. How can a program with no conditional
|
||||
behavior at all have output which depends on anything?
|
||||
|
||||
For hints on deciphering this, see below past the Author's Comments;
|
||||
they're a nice summary, but they leave the mystery intact.
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
In literary circles, there is a poetic form called a "lipogram",
|
||||
which is a poem in which a specific letter has been distinctly
|
||||
avoided. This principle can be applied in other ways. For
|
||||
instance, in this paragraph, the vowel which immediately follows
|
||||
't' in the alphabet is nowhere to be seen. There is even an
|
||||
entire novel (E. V. Wright's "Gadsby") in which no word contains
|
||||
the letter 'e'.
|
||||
|
||||
The IOCCC has been no stranger to this concept. Several winning
|
||||
entries from years past have accomplished interesting feats while
|
||||
completely avoiding the use of certain C constructs thought to
|
||||
be essential (e.g. 1988's robison.c). If you have to ask why they
|
||||
would do it this way, then this contest just isn't for you.
|
||||
|
||||
In continuing with this fine tradition, this program suggests to
|
||||
the ANSI committee some new practical simplifications for the C
|
||||
language. For instance, it appears that CONDITIONAL BRANCHING isn't
|
||||
really necessary. So, we can do away with while, do...while, for,
|
||||
if/else, switch, ?:, or anything else that might cause any kind of
|
||||
nondeterministic jump in the code. There's too much uncertainty
|
||||
in the world anyway.
|
||||
|
||||
Function parameters and return types just confuse people anyway, so
|
||||
get rid of them. Same with local variables. In fact, all you really
|
||||
need are assignment statements, and maybe one printf() and one goto.
|
||||
|
||||
This style of programming is also ideal for systems with limited
|
||||
memory capacity, since the function call stack never goes beyond
|
||||
a depth of one.
|
||||
|
||||
So what does it do? Give it an integer (1 < n < 27) on the command
|
||||
line, such as
|
||||
|
||||
schnitzi 5
|
||||
|
||||
The output will itself be a lipographic program, one which inputs
|
||||
(in this case) five numbers and prints them out sorted. It sorts
|
||||
them, however, using only "if/else" statements, without arrays or
|
||||
looping. To see the resulting program run, redirect the output from
|
||||
"schnitzi" into another file, like this
|
||||
|
||||
schnitzi 4 > sort.c
|
||||
|
||||
and then compile it.
|
||||
|
||||
Spoilers And Hints:
|
||||
|
||||
The big key to this program is figuring out what the names of the
|
||||
functions ought to be; a bit of research may allow you to guess at
|
||||
a few crucial ones.
|
||||
|
||||
The only function ever called is "O", but "O" is just set to point to
|
||||
other functions all the time. Or, almost all the time.
|
||||
|
||||
So how does 'h' get set, and what to?
|
||||
@@ -0,0 +1,70 @@
|
||||
%:define H(x) <st%:%:x##.h>
|
||||
#include H(dio)
|
||||
#include H(dlib)
|
||||
#include H(ring)
|
||||
|
||||
#define x ) == 0 ?__LINE__:0){O =__LINE__;break;} }
|
||||
#define X(x) __LINE__ x __LINE__
|
||||
#define t(a)\
|
||||
for (c = 0; c <n##a; ++c) { \
|
||||
if (strchr (a[c], 0[__FILE__])) { if (*a[c] == 0[__FILE__]) { \
|
||||
if (strcmp (a[c]+__LINE__, I + strlen (I) + __LINE__ - strlen (a[c]) x else { \
|
||||
if (strncmp (a[c], I, strlen (a[c])-__LINE__ x \
|
||||
} else { if (strcmp (a[c], I x }
|
||||
|
||||
#line 4 "info\0r"
|
||||
int
|
||||
main (int C, char **V)
|
||||
{
|
||||
FILE *H;
|
||||
int c, ne, nn, S = C < 2 ? 060 : *V[1];
|
||||
|
||||
char f[__LINE__][X(*)], K[X(*)], L[X(<<)],
|
||||
e[X(<<)][3*__LINE__], n[X(<<)][3*__LINE__], F[__LINE__];
|
||||
|
||||
if (freopen (__FILE__, 5+__FILE__, stdin) == 0) return __LINE__-13;
|
||||
for (c = 0;;) {
|
||||
#line 1 "#\n"
|
||||
if (!fgets (f[c], (int)sizeof *f, stdin)) return __LINE__; if (*f[c] == 0[__FILE__]) continue; if (*f[c] != __LINE__[__FILE__]) { f[c][strlen (f[c]) - __LINE__] = 2[__FILE__];
|
||||
++c;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
for (ne = 0;;) {
|
||||
do {
|
||||
#line 1 "#%s%s"
|
||||
if (!fgets (L, (int)sizeof L, stdin)) return __LINE__; } while (*L == 0[__FILE__]); switch (sscanf (L, __LINE__+__FILE__, F, e[ne])) { default: goto O;
|
||||
case __LINE__: switch (strchr (F, S)!=0) case 1: ++ne;
|
||||
}
|
||||
}
|
||||
|
||||
O:
|
||||
nn = 0;
|
||||
while ((fgets (L, (int) sizeof L, stdin)) != 0) {
|
||||
|
||||
|
||||
char A[__LINE__], f3; if (*L == 0[__FILE__]) continue;
|
||||
#line 1 "%s%s %c"
|
||||
switch (sscanf (L, __FILE__, A, n[nn], &f3)) {
|
||||
case __LINE__: if (strchr (A, S)) ++nn; break;
|
||||
case __LINE__:
|
||||
if (strchr (A, S)) {
|
||||
#line 8 "<%s>:\n"
|
||||
char *I = L + __LINE__;
|
||||
int O = printf (__FILE__, n[nn]) +
|
||||
#line 2 "0gcc -ansi -E -dM -undef %s /usr/include/%s>r\0 ("
|
||||
sprintf (K, 1+__FILE__, f[S-*__FILE__] + __LINE__, n[nn]);
|
||||
O += system (K);
|
||||
if ((H = fopen (__FILE__+44, 44+__FILE__)) == 0) return 1;
|
||||
while ((fgets (L, (int)sizeof L, H)) != 0) {
|
||||
I[strcspn (I, 46+__FILE__)] = O = 0;
|
||||
#line 1 "*r"
|
||||
t (n) t (e)
|
||||
if (0 == O) O = puts (L);
|
||||
}
|
||||
nn = fclose (H);
|
||||
}
|
||||
}
|
||||
}
|
||||
return remove (1+__FILE__);
|
||||
}
|
||||
@@ -0,0 +1,222 @@
|
||||
CPP Abuse:
|
||||
|
||||
Jens Schweikhardt
|
||||
DFN Network Operation Center
|
||||
Schlartaeckerweg 3 (Home address)
|
||||
D-71384 Weinstadt
|
||||
Germany
|
||||
|
||||
http://www.shuttle.de/schweikh/
|
||||
|
||||
|
||||
Judge's Comments:
|
||||
|
||||
To build:
|
||||
|
||||
make schweikh1
|
||||
|
||||
To use:
|
||||
|
||||
./schweikh1
|
||||
|
||||
What does it do? It seems to print a list of system headers, perhaps
|
||||
with words after them. Curiously, if you look at the list of words
|
||||
defined in a given standard header, they are never printed directly
|
||||
after that header's name. Ah-hah! It's a conformance test for the
|
||||
standard headers.
|
||||
|
||||
This code is a wonder; it's a wonder that it compiles. I wonder
|
||||
whether or not it should. The innovative realization that you can
|
||||
use special characters, such as '\n', in #file directives alone
|
||||
merits some recognition.
|
||||
|
||||
I've included most of the author's comments; they're fairly thorough.
|
||||
Do not read them if you want to figure this out yourself. "Amendment
|
||||
One" refers to "NA1", the add-on to C89 which added some fairly
|
||||
crufty internationalization support.
|
||||
|
||||
NOTE: Some non-gcc compilers that are not fully ANSI standard do not
|
||||
compile this entry correctly. Using cc by default is not helpful
|
||||
most of the time on this entry, because the program has a hardcoded
|
||||
gcc invocation anyway. Anyone who uses egcs and has no plain gcc
|
||||
will need to frob the source anyway and can be expected to do the
|
||||
right thing with ${CC}. So use gcc.
|
||||
|
||||
NOTE: One may build the original entry, which incorrectly used
|
||||
^K's and ^L's after a # cpp-directive. While this works under
|
||||
gcc, it is not ISO C89. One may build this original entry by:
|
||||
|
||||
make schweikh1.orig
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
Important! This program, if it compiles at all, is mis-compiled by many
|
||||
compilers due to compiler bugs. It could be the "least likely
|
||||
to compile and execute" in conjunction with preprocessor abuse.
|
||||
When run, it is likely to uncover bugs in your system headers.
|
||||
|
||||
The program is run without arguments. If your compiler is buggy,
|
||||
the most likely result is no output and/or an exit status of 1.
|
||||
|
||||
If Amendment One headers are missing you will see
|
||||
<iso646.h>:
|
||||
gcc: /usr/include/iso646.h: No such file or directory
|
||||
gcc: No input files specified
|
||||
<wctype.h>:
|
||||
gcc: /usr/include/wctype.h: No such file or directory
|
||||
gcc: No input files specified
|
||||
<wchar.h>:
|
||||
gcc: /usr/include/wchar.h: No such file or directory
|
||||
gcc: No input files specified
|
||||
|
||||
Bug your vendor for an upgrade.
|
||||
|
||||
The format of the info file is straightforward and described in the file
|
||||
itself. Just load it in your favorite editor.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
Gcc (the GNU C compiler) must be available at runtime. It is assumed
|
||||
that your C implementation keeps headers as files in the /usr/include
|
||||
directory. The info file must be readable and reside in the current
|
||||
working directory. The current working directory must be writable in
|
||||
order to create a temporary file (which is removed upon program
|
||||
termination). In case you don't have gcc at runtime, not all is lost
|
||||
if your compiler or preprocessor can produce a list of defined macros
|
||||
in the format output by gcc -dM, i.e. lines of the form
|
||||
#define MACRO value
|
||||
Edit the source at line 55 in this case.
|
||||
|
||||
Background
|
||||
----------
|
||||
|
||||
ISO C has a very strict idea of visibility of identifiers. All possible
|
||||
macros are explicitly enumerated. In a compliant implementation no other
|
||||
macros can be defined, because you could write strictly conforming
|
||||
programs that may fail to compile due to syntax errors: suppose
|
||||
<stdio.h> defines PIPE_BUF, then the conforming
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h> /* <- or where the bogus macro is defined */
|
||||
#include <string.h>
|
||||
#define STR(x) #x
|
||||
#define XSTR(x) STR(x)
|
||||
int main (void)
|
||||
{
|
||||
int PIPE_BUF = 0;
|
||||
assert (strcmp ("PIPE_BUF", XSTR (PIPE_BUF)) == 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
is expected to compile and meet the assertion. If it does not, your
|
||||
compiler compiles some other language than ISO C.
|
||||
|
||||
Why I think my program is obfuscated
|
||||
------------------------------------
|
||||
|
||||
Not only is the program's purpose a thorough standard conformance
|
||||
test. The source itself is a beast and has uncovered bugs in many
|
||||
C compilers.
|
||||
|
||||
1. The token sequence after #include can consist of pp-tokens and
|
||||
"are processed just as in normal text." [ISO 6.8.2] The result
|
||||
must resemble one of the canonical forms, "foo.h" or <bar.h>.
|
||||
This lets us write things like
|
||||
#define HEADER "foo.h"
|
||||
#include HEADER
|
||||
I could not find a compiler rejecting this. However, if we're
|
||||
torturing the preprocessor a little more, by using token pasting,
|
||||
at least one compiler falls over.
|
||||
#define H(x) <st##x##.h>
|
||||
#include H(dio) /* expands to <stdio.h> */
|
||||
is rejected by tcc version 4.1.2, the TenDRA compiler:
|
||||
"t.c", line 3: Error:
|
||||
[ISO 6.8.3.3]: Invalid result for '##' operator in macro 'H'.
|
||||
To be honest, I don't know if the rules for pp-tokens and token
|
||||
pasting don't forbid what I do (and tcc is correct in rejecting it).
|
||||
In this case, all other compilers I tried are buggy, or the Standard
|
||||
itself :-)
|
||||
|
||||
2. The #line directive allows to set a line number, and optionally
|
||||
a file name, i.e. modify __LINE__ and __FILE__. Strange things
|
||||
happen if the file name contains a NUL byte -- which the Standard
|
||||
allows: in #line num "file" the "file" is an s-char-sequence per
|
||||
ISO 6.8.4. ISO 6.1.4 defines string literals as s-char-sequences,
|
||||
which may include octal escape sequences. Let's look at
|
||||
#include <stdio.h>
|
||||
#line 42 "foo\0bar"
|
||||
int main (void) {
|
||||
printf ("%s %d\n", __FILE__, (int)sizeof __FILE__);
|
||||
return 0;
|
||||
}
|
||||
This is supposed to output 'foo 8'. Here's what happens in RL:
|
||||
foo 4 gcc 2.7.2.1, lcc
|
||||
foo\0bar 9 tcc 4.1.2, Sunsoft cc turn "\0" into "\\0", ugh!
|
||||
(I have written a bug report for gcc. Newer versions and egcs are ok.)
|
||||
|
||||
3. The %: and %:%: digraphs test for conformance to Amendment One.
|
||||
|
||||
Ask your local guru if C allows the same case label in the same switch
|
||||
statement to appear more than once. Ask him/her to think real hard.
|
||||
The answer will be "no". The true guru will cite a constraint in
|
||||
ISO 6.6.4.2. Then make fun of the guru's answer by waving 'case __LINE__:'
|
||||
under his/her nose. Easy money from a bet! Make sure your guru has
|
||||
no chance to use Standardese weasel words as an escape: can I have
|
||||
case <some_token>:
|
||||
case <some_token>:
|
||||
in the same switch? (Note that you need the [invisible] newline. You
|
||||
can generously allow the additional constraint that no #undefs or
|
||||
#defines are allowed between the two cases.)
|
||||
|
||||
Lots of integer constants and string literals come into the source
|
||||
via __LINE__ and __FILE__ which are redefined at various places.
|
||||
Sometimes the __FILE__ contains \0 bytes; different strings or
|
||||
characters are then accessed with offsets, say 10+__FILE__ or
|
||||
__LINE__+__FILE__ or 2[__FILE__]. One integral constant in octal.
|
||||
This makes the source and header input depend on ASCII.
|
||||
|
||||
A few old obfuscations, like one character identifiers, not too
|
||||
many macros, a goto O, "needless" assignments to satisfy lint
|
||||
with its "function value ignored" warnings. My lint has nothing
|
||||
to complain.
|
||||
|
||||
There's more whitespace in the Standard than just space, tab and
|
||||
newline. In particular, there are vertical tab and formfeed that
|
||||
can be used in certain places (outside of preprocessing directives,
|
||||
i.e. they are not allowed from just after the # up to the final
|
||||
newline. See 6.8 for details.)
|
||||
On many implementations these appear as ^L and ^K. My source starts
|
||||
with an extremely uncommon 32bit word consisting of ^L, ^K, % and :.
|
||||
I have grepped old winning entries for ^K, none of them contains one,
|
||||
so this is something new -- after 14 years of IOCCC. Be sure to have
|
||||
enough paper in your printer when you make a hardcopy of the source...
|
||||
|
||||
While I'm at it, the rules state that only space, tab and newline
|
||||
are ignored for the count (plus '{', '}', ';' followed by
|
||||
whitespace). The mkentry.c program, however, uses isspace() which
|
||||
returns nonzero for vtab and formfeed and other characters as well.
|
||||
I could have used a lot more ^K and ^L probably undetected by your
|
||||
counter but decided to err on the side of safety. I use a perl
|
||||
script to compute the character count according to the rules.
|
||||
The advantages of an independent clean room approach...
|
||||
#!/usr/bin/perl -w
|
||||
$/ = "\0";
|
||||
$_ = <>;
|
||||
s/[;{}][ \t\n]/\n/g;
|
||||
s/[ \t\n]+//g;
|
||||
print length ($_),"\n";
|
||||
|
||||
I have tried, as suggested in the guidelines, to let the code look
|
||||
like ordinary C code. Apart from a few long lines I think I left
|
||||
the indentation like I would in RL. You should however not try to
|
||||
use indent on the source. The code is extremely fragile because of the
|
||||
myriads of __LINE__ macros -- indenting is a sure way to break
|
||||
the program. Don't even think of maintaining that beast; I've
|
||||
had my share of core dumps during development :-) A test suite
|
||||
was used after every minor change to find out if the program still
|
||||
does what it should.
|
||||
|
||||
From the goals: "To stress C compilers with unusual code."
|
||||
That describes exactly my modest attempts...
|
||||
@@ -0,0 +1,70 @@
|
||||
%:defineH(x) <st%:%:x##.h>
|
||||
#includeH(dio)
|
||||
#includeH(dlib)
|
||||
#includeH(ring)
|
||||
|
||||
#definex)==0?__LINE__:0){O=__LINE__;break;}}
|
||||
#defineX(x)__LINE__x__LINE__
|
||||
#definet(a)\
|
||||
for(c=0;c<n##a; ++c) { \
|
||||
if(strchr (a[c], 0[__FILE__])) { if (*a[c] == 0[__FILE__]) { \
|
||||
if (strcmp (a[c]+__LINE__, I + strlen (I) + __LINE__ - strlen (a[c]) x else { \
|
||||
if (strncmp (a[c], I, strlen (a[c])-__LINE__ x \
|
||||
}else { if (strcmp (a[c], I x }
|
||||
|
||||
#line 4 "info\0r"
|
||||
int
|
||||
main (int C, char **V)
|
||||
{
|
||||
FILE *H;
|
||||
int c, ne, nn, S = C < 2 ? 060 : *V[1];
|
||||
|
||||
char f[__LINE__][X(*)], K[X(*)], L[X(<<)],
|
||||
e[X(<<)][3*__LINE__], n[X(<<)][3*__LINE__], F[__LINE__];
|
||||
|
||||
if (freopen (__FILE__, 5+__FILE__, stdin) == 0) return __LINE__-13;
|
||||
for (c = 0;;) {
|
||||
#line 1 "#\n"
|
||||
if (!fgets (f[c], (int)sizeof *f, stdin)) return __LINE__; if (*f[c] == 0[__FILE__]) continue; if (*f[c] != __LINE__[__FILE__]) { f[c][strlen (f[c]) - __LINE__] = 2[__FILE__];
|
||||
++c;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
for (ne = 0;;) {
|
||||
do {
|
||||
#line 1 "#%s%s"
|
||||
if (!fgets (L, (int)sizeof L, stdin)) return __LINE__; } while (*L == 0[__FILE__]); switch (sscanf (L, __LINE__+__FILE__, F, e[ne])) { default: goto O;
|
||||
case __LINE__: switch (strchr (F, S)!=0) case 1: ++ne;
|
||||
}
|
||||
}
|
||||
|
||||
O:
|
||||
nn = 0;
|
||||
while ((fgets (L, (int) sizeof L, stdin)) != 0) {
|
||||
|
||||
|
||||
char A[__LINE__], f3; if (*L == 0[__FILE__]) continue;
|
||||
#line 1 "%s%s %c"
|
||||
switch (sscanf (L, __FILE__, A, n[nn], &f3)) {
|
||||
case __LINE__: if (strchr (A, S)) ++nn; break;
|
||||
case __LINE__:
|
||||
if (strchr (A, S)) {
|
||||
#line 8 "<%s>:\n"
|
||||
char *I = L + __LINE__;
|
||||
int O = printf (__FILE__, n[nn]) +
|
||||
#line 2 "0gcc -ansi -E -dM -undef %s /usr/include/%s>r\0 ("
|
||||
sprintf (K, 1+__FILE__, f[S-*__FILE__] + __LINE__, n[nn]);
|
||||
O += system (K);
|
||||
if ((H = fopen (__FILE__+44, 44+__FILE__)) == 0) return 1;
|
||||
while ((fgets (L, (int)sizeof L, H)) != 0) {
|
||||
I[strcspn (I, 46+__FILE__)] = O = 0;
|
||||
#line 1 "*r"
|
||||
t (n) t (e)
|
||||
if (0 == O) O = puts (L);
|
||||
}
|
||||
nn = fclose (H);
|
||||
}
|
||||
}
|
||||
}
|
||||
return remove (1+__FILE__);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
#define _POSIX_SOURCE /* you are not supposed to understand this */
|
||||
#define O(OOO,OO0,O00,O0O,OO,O0)\0##O0O%:%:OO\0##O0%:%:OOO\0##OO0%:%:O00
|
||||
#include<signal.h>
|
||||
static volatile sig_atomic_t One;
|
||||
#include<stdlib.h>
|
||||
#include<unistd.h>
|
||||
#define Zero(NULL)#NULL
|
||||
#define ONE(One) Zero(One)
|
||||
in??/
|
||||
t
|
||||
#line 10 "01\015"
|
||||
main (register zero, char **ONE)
|
||||
%:
|
||||
<% switch (sizeof __FILE__ < zero) case 1: return One /= zero;
|
||||
{ auto one = zero = atoi (ONE<:zero-1:>);
|
||||
do for (one += alarm (One |= (signal (__LINE__, (void(*)(register))main)
|
||||
!= SIG_ERR)); One; ++one);
|
||||
while (zero -= write (1, __FILE__+(one&1), 1));
|
||||
return write (1, 1+__FILE__+1, 1) != 1;
|
||||
%>}
|
||||
@@ -0,0 +1,180 @@
|
||||
Most Erratic Behavior:
|
||||
|
||||
Jens Schweikhardt
|
||||
DFN Network Operation Center
|
||||
Schlartaeckerweg 3 (Home address)
|
||||
D-71384 Weinstadt
|
||||
Germany
|
||||
|
||||
http://www.shuttle.de/schweikh/
|
||||
|
||||
|
||||
Judges' comments:
|
||||
|
||||
To build:
|
||||
|
||||
make schweikh2
|
||||
|
||||
Almost every compiler is supposed to be able to accept the code in
|
||||
schweikh2.c; try compiling schweikh2.orig.c to see if your compiler
|
||||
is fully standard-compliant.
|
||||
|
||||
To use:
|
||||
|
||||
./schweikh2
|
||||
or
|
||||
./schweikh2 integer_number
|
||||
|
||||
Run the program with a small argument, like 5 or 10, several times.
|
||||
Are the results different? Why?
|
||||
|
||||
Some non-gcc compilers that are not fully ANSI standard do not
|
||||
compile this entry correctly.
|
||||
|
||||
At the time this hint file was written, some gcc and egcs
|
||||
implementations ran into problem when building the original entry:
|
||||
|
||||
make schweikh2.orig
|
||||
|
||||
This program often will produce an error of the form:
|
||||
|
||||
gcc -ansi schweikh2.orig.c -o schweikh2.orig
|
||||
as: Error: cca00NzV.s, line 58: Missing " at end of string
|
||||
"
|
||||
as: Error: cca00NzV.s, line 58: malformed statement
|
||||
*** Error code 1 (bu21)
|
||||
|
||||
because the line:
|
||||
|
||||
??=line 10 ONE(O(1,1,2,6,0,6))
|
||||
|
||||
turns into the line:
|
||||
|
||||
# 9 "01\012"
|
||||
|
||||
which causes gcc to give to the assembler the following two lines:
|
||||
|
||||
.stabs "whey.c
|
||||
",132,0,0,Ltext1
|
||||
|
||||
and the lone " after the #.file line results in an assembler syntax error.
|
||||
|
||||
In some cases one must compile using 'gcc -g':
|
||||
|
||||
make schweikh2.orig CFLAGS=-g
|
||||
|
||||
to trigger this error.
|
||||
|
||||
And with the proper text beyond the \012, it may be possible to have
|
||||
all kinds of fun adding ``inline assembly'' via #line directives. :-)
|
||||
For extra credit:
|
||||
|
||||
If your compiler has this bug, transform the line in the C
|
||||
program to inject assembly instructions in such a way that
|
||||
the program will compile.
|
||||
|
||||
If you are able to do the above, try adding assembly instructions
|
||||
so that it will compile, execute and do something interesting.
|
||||
If you succeed in doing this (especially on FreeBSD, Linux or Sparc),
|
||||
email the author for a free pat on the back.
|
||||
|
||||
|
||||
Selected author's comments:
|
||||
|
||||
What this program does
|
||||
----------------------
|
||||
|
||||
My entry is a yarng, which stands for, you guessed it, yet another
|
||||
random number generator, and is pronounced 'yawn' due to its
|
||||
incredible speed. Seriously, it exploits the randomness of quantum
|
||||
mechanical events that build up the hardware as well as some other
|
||||
non-deterministic factors. Here's how it works:
|
||||
|
||||
1) an alarm is scheduled to be delivered in a second
|
||||
2) an infinite loop is entered that just increments a counter
|
||||
3) on delivery of the alarm signal, the counter's LSB is printed.
|
||||
4) while some other counter is not zero, go to 1)
|
||||
5) exit
|
||||
|
||||
The yarng therefore produces output at a rate of 1 baud. The number of
|
||||
bits may be specified by an argument and defaults either to UINT_MAX
|
||||
(least likely) or UINT_MAX+1 (most likely). Extra credit: why the
|
||||
different values? How long would you need for an empirical test?
|
||||
|
||||
For example:
|
||||
|
||||
$ yarng 32
|
||||
10111001010101110110010101001111
|
||||
$ yarng 5
|
||||
10011
|
||||
|
||||
Why I think this is obfuscated
|
||||
------------------------------
|
||||
|
||||
-Ever seen a 'do for ... while' loop?
|
||||
-I avoided 'int' like the plague. Instead I used storage class specifiers
|
||||
(register, auto) to get implicit int. The Standard allows implicit int
|
||||
even in casts as you can see in '(void(*)(register))main'. Where implicit
|
||||
int is impossible, like in the 'int main' declaration I have int split
|
||||
across two lines. All indent programs I use insert space at the beginning
|
||||
of the continuation line and thereby introduce a syntax error.
|
||||
-main (ab)used as a signal handler. Shocking. Yeah, this leads to undefined
|
||||
behaviour. I have yet to see a system where it does not work. If it
|
||||
doesn't work for you, I'd appreciate if you mail me about it.
|
||||
Uh-oh, schweikh did it, uttered "Works for me". Don't quote me on that!
|
||||
-Even if you know how the program works, you just can't predict the output.
|
||||
-Chained use of token pasting operators ## with shuffled arguments
|
||||
-So you think you can't assign to __LINE__ and __FILE__? Not so. The
|
||||
#line preprocessor directive does the trick. But saying '#line 10 "01\n"'
|
||||
is a little lame and I came up with '??=line 10 ONE(O(1,1,2,6,0,6))'
|
||||
-__LINE__ is used as the signal number argument to signal(). If indenting
|
||||
or other editing changes the number of lines the program is likely to be
|
||||
killed after one second... Thanks to POSIX for specifying SIGALRM as 14.
|
||||
You're SOL if your system does not conform. Get a real OS.
|
||||
-All strings (or characters) needed are crammed into __FILE__ using
|
||||
octal notation and then extracted using pointer + offset notation.
|
||||
-Use of a # (null) preprocessor directive (hidden as a %: digraph)
|
||||
Delete this line and prepare for a core dump.
|
||||
-Identifiers reused with different capitalization: one, One, ONE, zero,
|
||||
Zero. ONE is particularly nasty because it appears as a macro taking
|
||||
an arg and as a plain identifier in main's parameters. The rule is that
|
||||
whenever ONE is followed by '(' it must be the macro.
|
||||
-A quote from Kernighan and Plauger, "The Elements of Programming Style",
|
||||
2nd Ed., page 21: "A useful way to decide if some piece of code is
|
||||
clear or not is the ``telephone test.'' If someone could understand your
|
||||
code when read aloud over the telephone, it's clear enough. If not then
|
||||
it needs rewriting."
|
||||
Now try the telephone test for 'one = zero = atoi (ONE[zero-1])'
|
||||
-Don't you love the aesthetics of symmetry: write (1, 1+__FILE__+1, 1)
|
||||
(telephone test this as well; is it 1, One, ONE, one? Maybe won?).
|
||||
|
||||
Where does the randomness come from?
|
||||
------------------------------------
|
||||
|
||||
Each bit obviously depends on the number of times the loop body is
|
||||
executed between two calls of the signal handler. But what determines
|
||||
this number?
|
||||
|
||||
+ The accuracy of the clock driving the CPU
|
||||
+ The accuracy of the clock driving the timer responsible for alarm signals
|
||||
+ On multitasking OS's: The total time the process is scheduled
|
||||
to run between successive invocations of the signal handler.
|
||||
|
||||
How about the randomness of the yarng? To measure these properties I
|
||||
counted the number of bit sequences and compared them to what I would
|
||||
expect from a generator with uniform distribution (all sequences
|
||||
equally likely to occur).
|
||||
|
||||
It is interesting to note that yarng's maximum deviations are less
|
||||
than or equal to rand()'s. Randomness however tends to degrade under
|
||||
high load averages on my system (Linux). This could be avoided by
|
||||
allowing the process one second of execution time instead of wall
|
||||
clock time (using the SIGVTALRM sent by the virtual timer
|
||||
instead of SIGALRM).
|
||||
|
||||
I'm not surprised. Yarng in the end depends on fluctuations of the
|
||||
electrical field and the heat distribution in the oscillators, the
|
||||
implementation and state of the scheduling algorithm, the system
|
||||
load, number and temporal distribution of asynchronous events and
|
||||
last but not least the phase of the moon. God _does_ play dice.
|
||||
Type yarng and watch Him roll.
|
||||
@@ -0,0 +1,20 @@
|
||||
#define _POSIX_SOURCE /* you are not supposed to understand this */
|
||||
#define O(OOO,OO0,O00,O0O,OO,O0)\0##O0O%:%:OO\0##O0%:%:OOO\0##OO0%:%:O00
|
||||
#include<signal.h>
|
||||
static volatile sig_atomic_t One;
|
||||
#include<stdlib.h>
|
||||
#include<unistd.h>
|
||||
#define Zero(NULL)#NULL
|
||||
#define ONE(One) Zero(One)
|
||||
in??/
|
||||
t
|
||||
??=line 10 ONE(O(1,1,2,6,0,6))
|
||||
main (register zero, char **ONE)
|
||||
%:
|
||||
<% switch (sizeof __FILE__ < zero) case 1: return One /= zero;
|
||||
{ auto one = zero = atoi (ONE<:zero-1:>);
|
||||
do for (one += alarm (One |= (signal (__LINE__, (void(*)(register))main)
|
||||
!= SIG_ERR)); One; ++one);
|
||||
while (zero -= write (1, __FILE__+(one&1), 1));
|
||||
return write (1, 1+__FILE__+1, 1) != 1;
|
||||
%>}
|
||||
@@ -0,0 +1,61 @@
|
||||
%:define _POSIX_SOURCE
|
||||
#include<fcntl.h>
|
||||
#include<stdio.h>
|
||||
#include<unistd.h>
|
||||
#include<stdlib.h>
|
||||
#include<string.h>
|
||||
#include<sys/types.h>
|
||||
#include<sys/stat.h>
|
||||
#define D(N,t)Z t*N V<%t*z U M0*z); H z)u z; X}
|
||||
#define k(x,y)x<0||fstat(x,&y)||
|
||||
#define h(x)=open(x,O_RDONLY)
|
||||
#define b(x),(int)x.st_nlink
|
||||
#define B ;typedef g
|
||||
#define X exit (1);
|
||||
#define O .st_size
|
||||
#define U =malloc(
|
||||
#define Y S.st_ino
|
||||
#define v ;%>else
|
||||
#define W .st_dev
|
||||
#define o ||read(
|
||||
#define Z static
|
||||
#define g struct
|
||||
#define u return
|
||||
#define I char*
|
||||
#define V (M2)
|
||||
#define H if(
|
||||
#define _ ->
|
||||
|
||||
/* HE WHO SAYS */
|
||||
|
||||
Z I A<:32767/ M0(I )]; Z g stat S,T; Z size_t y B f{
|
||||
I n ; g f * x ; dev_t d ; ino_t i; } f B t{ M1 s,c; f
|
||||
*l; g t*L,*R; } t; D(a,t)D(E ,f)Z t*J(t*p,I n){ H! p){ p=
|
||||
a(); p _ s =S O; p _ c=1; p _ L=p _ R=0;
|
||||
p _ l= E(); p _ l _ n=n; p _ l _ x=0; p
|
||||
_ l _ d=S W; p _ l _ i= Y v H S O==p _
|
||||
s){ f* e; for (e=p _ l; e; e=e _ x) { H S W==e _
|
||||
d&&Y== e _ i) { u p; } } e=E(); e _ x=p _ l; e _
|
||||
n=n; e _ d =S W; e _ i=Y; p _ l=e; ++p _
|
||||
c v H S O< p _ s) { p _ L= J( p _ L,n)v{
|
||||
p _ R= J (p _ R,n ); } u p ; } Z int Q(
|
||||
I G,I F){ int d h(G),D h(F); I m,*M; H k(d,S )k(D,T )(y =S
|
||||
O)-T O){ y= 0; goto d; } H! (m U y))||!(M U y))o d ,m,y)-
|
||||
y o D,M,y)-y) X y=!memcmp( m,M,y); M5(m) ; M5(M ); d:V
|
||||
|
||||
close (d );V close(D); u y; } Z M2 C(M1 z,M1 N){ M1 i=N*(N-1)/2,
|
||||
j=1,s; I q,*e,* p,*w,*l; e=q= M4((size_t)i,1); H!e) X p=q+i; for(i=0; e-p
|
||||
; ++e){ H!*e&&Q (A[i:>,A[j])){ V printf("%""l""d" "\t""%" "s""\t" "%""s"
|
||||
"??/t" "%""c" "\11" "%""d" "??/t" "%""d" "\n", z,A[i]
|
||||
,A[j], S W -T W?'X' :'='b( S)b(T) ); H j -i-1) { s=N-
|
||||
i-3; w =e+s+1; l=q+N* (j-1)- j*(j-1 )/ 2 ; do{ *w
|
||||
=1; H w==l) break; w+= s; } while( s-->0); } } H++j ==N){ j=i+++
|
||||
2; } } M5(q); } Z M2 P(t*p ){ H p){ P(p _ R); H p _ c>1){ M1 i=0
|
||||
; f*l= p _ l; for (; i< p _ c; ++i ){ A[i
|
||||
]= l _ n; l=l _ x; } C (p _ s, p _ c); } P (p _
|
||||
L) ; } } int main V { t*r= 0; I F ; for (; ; )
|
||||
{ H!(F U 1024)) )X H ! fgets( F,1024 ,stdin) )break; *(F+(y
|
||||
=strlen(F))-1)= 0; H!( F=M3(F, y)))X H stat(F,&S)==0 &&S_ISREG(S.
|
||||
st_mode)&&S O )r=J(r ,F ); } H r)P(r ); u 0; }/* Obfuscated C
|
||||
|
||||
IS FREE THINKS MONEY GROWS ON DIRECTORY TREE */
|
||||
@@ -0,0 +1,193 @@
|
||||
Most Space Efficient:
|
||||
|
||||
Jens Schweikhardt
|
||||
DFN Network Operation Center
|
||||
Schlartaeckerweg 3 (Home address)
|
||||
D-71384 Weinstadt
|
||||
Germany
|
||||
|
||||
http://www.shuttle.de/schweikh/
|
||||
|
||||
|
||||
Judges' comments:
|
||||
|
||||
To build:
|
||||
|
||||
make schweikh3
|
||||
|
||||
To use:
|
||||
|
||||
If "dir" is the directory (or a directory tree) where you keep
|
||||
all your favorite pictures off the Internet or from
|
||||
alt.binaries.pictures.*, do
|
||||
|
||||
find dir -type f -print | ./schweikh3
|
||||
|
||||
Maybe you will not need to buy another 10 Gb disk to store them. :-)
|
||||
|
||||
Also Try:
|
||||
|
||||
cp schweikh3 file1
|
||||
cp schweikh3 file2
|
||||
cp schweikh3.c file3
|
||||
ln file3 file4
|
||||
|
||||
ls -1 file? | ./schweikh3
|
||||
|
||||
NOTE: this program is not as smart as to detect identity of JPEG
|
||||
files with the same picture but with different compression levels.
|
||||
|
||||
NOTE: Some non-gcc compilers that are not fully ANSI standard do
|
||||
not compile this entry correctly.
|
||||
|
||||
|
||||
Selected author's comments:
|
||||
|
||||
The source is expected to conform to IEEE Std 1003.1-1990 ("POSIX").
|
||||
Thank God the IEEE does not standardize a coding style...
|
||||
|
||||
What this program does
|
||||
----------------------
|
||||
|
||||
This is best explained in the man page. The troff source for this
|
||||
man page can be found in the file samefile.1.
|
||||
|
||||
SAMEFILE(1) User Manuals SAMEFILE(1)
|
||||
|
||||
|
||||
NAME
|
||||
samefile - find identical files
|
||||
|
||||
SYNOPSIS
|
||||
samefile
|
||||
|
||||
DESCRIPTION
|
||||
samefile reads a list of file names (one file name per
|
||||
line) from stdin. For each file name pair with identical
|
||||
contents, a line consisting of six tab separated fields is
|
||||
output: The size in bytes, two file names, the character
|
||||
``='' if the two files are on the same device, ``X'' oth-
|
||||
erwise, and the link counts of the two files. The output
|
||||
is sorted in reverse order by size.
|
||||
|
||||
samefile uses two stages to give optimum performance.
|
||||
|
||||
In the first stage, all non-plain files are silently
|
||||
ignored (directories, devices, FIFOs, sockets, symbolic
|
||||
links) as well as files for which stat(2) or open(2)
|
||||
fails. The result of the first stage (the file names) is
|
||||
written into a binary tree with one node for every file
|
||||
size. Each node is in turn a linked list of file names
|
||||
along with inode and device information. It is also at
|
||||
this first stage where checks for hard links are done.
|
||||
For any inode only one filename will be added to the
|
||||
binary tree.
|
||||
|
||||
In the second stage all files having the same size are
|
||||
compared against each other. The rules of mathematical
|
||||
logic are applied to reduce work and output noise: if
|
||||
files A, B, and C have the same size and samefile finds
|
||||
that A = B and A = C then it will not compare B against C
|
||||
(and will not output a line for B and C) but only for A =
|
||||
B and A = C. The algorithm will detect equality across
|
||||
arbitrarily long chains. Note however, that because only
|
||||
the first filename per inode gets into the first stage,
|
||||
the output for a group of identical files with different
|
||||
inode numbers is also minimized. Suppose you have six
|
||||
identical files of size 100 in an inode group consisting
|
||||
of the three inodes with numbers 10, 20 and 30:
|
||||
|
||||
$ ls -i # output edited for readability:
|
||||
10 file1 20 file4 30 file6
|
||||
10 file2 20 file5
|
||||
10 file3
|
||||
$ ls | samefile
|
||||
100 file1 file4 = 3 2
|
||||
100 file1 file6 = 3 1
|
||||
|
||||
The sum of the sizes in the first column is the amount of
|
||||
disk space you could gain by making all 6 files links to
|
||||
only one file or remove all but one of the files. To be
|
||||
precise, disk space is allocated in blocks - you will
|
||||
probably gain two blocks here, rather than 200 bytes.
|
||||
Note that it is not enough to just remove file4 and file6
|
||||
(you would gain only 100 bytes because file5 still
|
||||
exists.)
|
||||
|
||||
|
||||
LIMITATIONS
|
||||
Samefile was written with no limits in mind. The number of
|
||||
input lines is unlimited. The size of the actual files is
|
||||
only limited by available virtual memory needed to compare
|
||||
one pair of files. The only hard limit is the constraint
|
||||
that there should not be more than about 8192 files having
|
||||
the same size. Experience has shown that there are rarely
|
||||
more than a couple dozen files of the same size.
|
||||
|
||||
EXAMPLES
|
||||
For everybody:
|
||||
What are the duplicates under my home directory?
|
||||
|
||||
$ find $HOME | samefile
|
||||
|
||||
For the sysadmin folks:
|
||||
Report all duplicate files under /usr larger than 16k:
|
||||
|
||||
$ find /usr -size +16384c -a -type f | samefile
|
||||
|
||||
For the ftp and WWW admins:
|
||||
How much space is wasted below our site's /pub directory?
|
||||
|
||||
$ find /pub -type f | samefile | awk '{sum += $1} END {print sum}'
|
||||
|
||||
|
||||
|
||||
EXIT STATUS
|
||||
If samefile runs out of memory the exit status is 1, zero
|
||||
otherwise.
|
||||
|
||||
SEE ALSO
|
||||
find(1), ln(1), rm(1)
|
||||
|
||||
|
||||
Why I think it is obfuscated
|
||||
----------------------------
|
||||
|
||||
- the code is commented but this gives only an *extremely* faint clue.
|
||||
- the layout does not reflect the program structure, or does it?
|
||||
- The data structure the program builds is an ordered binary tree
|
||||
where each node consists of a linked list. This is probably too
|
||||
heavy to comprehend for N percent of all programmers ;-)
|
||||
- The tree is built and traversed by recursive function calls.
|
||||
- Why does this program look at dev_t and ino_t? Heavy wizardry.
|
||||
- Can you find out how the algorithm works that detects identity
|
||||
of files across arbitrarily long chains? In my private unobfuscated
|
||||
source there are 17 lines describing just that. A classical case for
|
||||
the well known /* You're not supposed to understand this */ comment.
|
||||
- Would Dijkstra consider this goto harmful?
|
||||
- The only string literal is split in more than a dozen substrings
|
||||
- For the task at hand the code is pretty terse. Some dynamic memory
|
||||
is even freed as soon as it's no longer needed. I have tried to
|
||||
make the preprocessor directives as short as possible. This means
|
||||
no spaces after #include and no spaces after some of the macro
|
||||
names.
|
||||
|
||||
Are you an algorithms guru? If so you should know why the output
|
||||
appears sorted without any use of qsort() or system("sort").
|
||||
|
||||
Rewrite (hah!) the program to use memory mapping of files instead
|
||||
of read(). Does this affect performance noticeably?
|
||||
|
||||
It's easy to write a script that takes samefile's output and
|
||||
hardlinks (or symlinks) identical files. Writing such a script is
|
||||
left as an exercise for the deobfuscator.
|
||||
|
||||
When you run samefile on some directory tree, try to estimate
|
||||
how much you think it will find. Is the actual result anywhere
|
||||
near your estimate? How many copies of the GPL COPYING file
|
||||
are there on your filesystems? :-)
|
||||
|
||||
In the remote event that the input has more than 8192 files with
|
||||
the same size (on systems where sizeof (char *) == 4, or 4096 when
|
||||
sizeof (char *) == 8), increase the manifest constant 32767 on line
|
||||
31.
|
||||
@@ -0,0 +1,20 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int a,char **A){FILE*B;typedef unsigned long C;C b
|
||||
[8]; if(!(a==7&&(B= fopen(1[A],"rb")))) return 1;for(7[b]=0
|
||||
;7[b]<5;7[b]++)b[7[ b]]=strtoul(A[2+7[b ]],0,16-!7[b]*6);5[
|
||||
b]=3[b] ; while ((6[b]= getc(B)
|
||||
)!=(C)- 1){if(2 [b])for (7[b]=0
|
||||
;7[b]<4 ;7[b]++ )if(((6 [b]>>7[
|
||||
b])^(6[ b]>>(7-7[b])))&1)6[ b] ^=(1
|
||||
<<7[b]) ^(1<<(7-7[b]));5[b] ^= 6[b]
|
||||
<<(0[b] -8);for(7[b]=0;7[b] <8;7[b]
|
||||
++)if(( 5[b]>>(0[b]- 1))&1)5
|
||||
[b]=(5[ b]<<1)^ 1[b]; else 5[
|
||||
b]<<=1; }5[b]&=((((C)1 <<(0[b]
|
||||
-1))-1) <<1)|1; if(2[b] )for(7[
|
||||
b]=0;7[ b]<(0[b ]>>1);7 [b] ++)
|
||||
if(((5[b]>>7[b])^(5 [b]>>(0 [b]-1-7 [b])))&1)5[b]^=((C)
|
||||
1<<7[b])^((C)1<<(0[ b]-1-7[ b]));5[ b]^=4[b];fclose(B);
|
||||
printf("%0*lX\n", ( int)(0[ b]+3)>> 2,5[b]); return 0;}
|
||||
@@ -0,0 +1,104 @@
|
||||
Best Self-Documenting:
|
||||
|
||||
Tom Torfs
|
||||
De Nayer Instituut
|
||||
Cuperuslei 12 (home address)
|
||||
2220 Heist-op-den-Berg
|
||||
Belgium
|
||||
|
||||
http://members.xoom.com/tomtorfs
|
||||
|
||||
|
||||
Judges' comments:
|
||||
|
||||
To build:
|
||||
|
||||
make tomtorfs
|
||||
|
||||
To use:
|
||||
|
||||
./tomtorfs tomtorfs.c 32 04C11DB7 1 FFFFFFFF FFFFFFFF
|
||||
|
||||
Also try:
|
||||
|
||||
echo "abscond conferrable" > file.A
|
||||
echo "adorn condolence" > file.B
|
||||
echo "adorn condolence too" > file.C
|
||||
./tomtorfs file.A 32 04C11DB7 1 FFFFFFFF FFFFFFFF
|
||||
./tomtorfs file.B 32 04C11DB7 1 FFFFFFFF FFFFFFFF
|
||||
./tomtorfs file.C 32 04C11DB7 1 FFFFFFFF FFFFFFFF
|
||||
|
||||
If you don't believe the program is correct, try and compare the output
|
||||
of the program with the value of CRC computed by PKZIP or any other
|
||||
archiver that uses the CRC-32 algorithm.
|
||||
|
||||
|
||||
Selected author's comments:
|
||||
|
||||
Usage:
|
||||
crc filename bitwidth polynom reflected init xor
|
||||
|
||||
filename : file to calculate the CRC of
|
||||
bitwidth : width of the CRC in bits (decimal)
|
||||
polynom : polynomial used for the CRC (hexadecimal)
|
||||
reflected : 0 if the CRC is not reflected, 1 if it is
|
||||
init : initial value for the CRC (hexadecimal)
|
||||
xor : value to xor the final CRC with (hexadecimal)
|
||||
|
||||
Examples:
|
||||
|
||||
CRC-16: crc filename 16 1021 0 FFFF 0000
|
||||
CRC-32: crc filename 32 04C11DB7 1 FFFFFFFF FFFFFFFF
|
||||
XMODEM: crc filename 16 8408 1 0000 0000
|
||||
ARC: crc filename 16 8005 1 0000 0000
|
||||
|
||||
Portability notes:
|
||||
|
||||
The program assumes CHAR_BIT==8. Results are undefined if
|
||||
bitwidth > sizeof(unsigned long) * 8. It is also assumed
|
||||
that EOF is -1 and 1 is a valid exit value to indicate
|
||||
failure (replace them with EOF resp. EXIT_FAILURE if the
|
||||
assumptions are false). Otherwise ANSI/ISO C.
|
||||
No special build options required.
|
||||
|
||||
Special notes:
|
||||
|
||||
Count the number of non-whitespace characters in the source
|
||||
file to find out what dark force drove me to write this ;-).
|
||||
|
||||
Spoiler:
|
||||
|
||||
First of all, if you run a C beautifier on the program
|
||||
(thereby of course losing the nice code shape I worked
|
||||
so hard on ;-) the code will become a bit more readable.
|
||||
|
||||
The variable names are not very descriptive. They have the
|
||||
following meanings:
|
||||
a = argc
|
||||
A = argv
|
||||
b = array of unsigned long variables
|
||||
b[0] = bit-width of the CRC (argv[2])
|
||||
b[1] = CRC polynomial (argv[3])
|
||||
b[2] = nonzero if CRC is reflected (argv[4])
|
||||
b[3] = initial value of CRC (argv[5])
|
||||
b[4] = value final CRC is XORed with (argv[6])
|
||||
b[5] = CRC value
|
||||
b[6] = byte from file
|
||||
b[7] = counter
|
||||
B = FILE * through which the file argv[1] is opened
|
||||
C = typedef for unsigned long
|
||||
|
||||
The first for loop simply reads the command-line arguments
|
||||
in the b[] array. The third parameter to strtoul() causes
|
||||
all arguments to be in base-16 (hex) except the first one,
|
||||
which will be in base-10 (decimal).
|
||||
|
||||
The rest of the program "simply" calculates the crc in b[5]
|
||||
and then prints it to stdout. The bit reflection loops may
|
||||
appear a bit tricky at first, but if you have a good look
|
||||
at them they should become obvious also.
|
||||
|
||||
Acknowledgments:
|
||||
|
||||
Ross N. Williams, whose CRC guide was very useful to me
|
||||
for writing this. You can find it as CRC.TXT in Snippets.
|
||||
+3751
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user