Season 2002: Races and Regulations

Race Dates
----------

03/03/2002   Melbourne - Australia               albrtprk.trk       A
17/03/2002   Kuala Lumpur - Malaysia             sepang1.trk        R
31/03/2002   Interlagos - Brazil                 brazil.trk         A
14/04/2002   Imola - San Marino                  imola.trk          R
28/04/2002   Barcelona - Spain                   barcelon.trk       A
12/05/2002   A1 ring - Austria                   austria.trk        R
26/05/2002   Monaco - Monte Carlo                monaco.trk         A
09/06/2002   Montreal - Canada                   montreal.trk       R
23/06/2002   Nurburgring - Germany (European GP) nurnburg.trk       A
07/07/2002   Silverstone - Great Britain         silver97.trk       A
21/07/2002   Magny-Cours - France                magnycrs.trk       R
28/07/2002   Hockenheim - Germany                hock.trk           R
18/08/2002   Hungaroring - Hungary               hungary.trk        A
01/09/2002   Spa-Francorchamps - Belgium         spa.trk            R
15/09/2002   Monza - Italy                       monza-76.trk       A
29/09/2002   Indianapolis - United States        indy.trk           R
13/10/2002   Suzuka - Japan                      suzuka.trk         A

A = alternate track:

chosen day of the race from the following list:

adelaide.trk, brands.trk, buenos.trk, cstlcomb.trk, doningtn.trk,
estoril.trk, indy500.trk, jerez.trk, loudon.trk, michigan.trk,
mlwaukee.trk, mosport.trk, nazareth.trk, oval2.trk, phoenix.trk,
pocono.trk, ra.trk, speed2.trk, tremblnt.trk, watglen.trk, zandvort.trk,
wierd.trk, elev2.trk, fourmile.trk, trouble.trk, midohio.trk, s1.trk,
s2.trk, kevin.trk

R = randomly generated track

Regulations
-----------
Entries will be received by e-mail, directed to
gcp@sjeng.org

The entries are of course, robot driver functions. They must be
source code, either _portable_ ANSI C or C++ to be compiled with
GNU C/C++ 2.95.2 for Linux. Watch out for any platform dependent
assumption, as well as nonstandard language extensions your compiler
may allow. Your robots should run with version 0.90 of the RARS
software available at http://rars.sourceforge.net.
Maximum TWO drivers per person are allowed.

Entries must be received by 8:00 GMT, the day of the race.  If the
net is slow, too bad, so send them as early as possible.
It is better if I receive them a week early, in case there are any
problems with compilation, linking, or execution. If you send your
robot late, there will be no time for testing, and you will be in
a weak position should a problem occur.

Any robots that cause run-time problems with any part of the software,
including the other robots, will be disqualified.  Gian-Carlo's judgement
will be final here. I may take a quick try to fix things or disable the
offending code, but you're obviously better off making sure everything
works. In particular, check every division to ensure that the denominator
will never be zero.  The same applies to certain mathematical functions
that can have illegal arguments, such as sqrt(). If you allocate RAM,
with "new" or malloc(), be sure to do it only once, even if there are
multiple races.  (We can't have you accumulating more RAM with each race!)
Also check for un-initialized variables that can cause seemingly random
behaviour.

Robot code should not make any direct OS or BIOS calls, nor access
memory in any strange ways.  No peripheral hardware may be accessed,
with the possible exception of disk reading during initialization (but
see next paragraph).  Robots may use the "extern" keyword to access any
data that they can find, but may not alter such data.  Any robot driver
function that causes any problems with any other part of the software
will simply not be used.

Your robot should be less than 1 000 000 bytes in size, and be reasonable
about its memory and cpu usage. (The hardware is an Athlon XP 1800
with 768M RAM, so you should have plenty of leeway)

Your robot may not crash into or hit other drivers on purpose. If you
submit 2 robots, team tactics, like obstructing other drivers, are
allowed. You may not submit two identical drivers.

To be able to check whether your submission meets these rules, it
should be human-readable (i.e. not obfuscated).

How/What to submit
------------------
Submissions should consist of a source code file with an optional data
file.  The source code file should contain the driver function
to be entered into the contest.

There are some information requirements for the first few lines of
the program file.  The first few lines of every robot driver must have
the following:

1. the filename, your full name, your e-mail address, and your robot's name.

2. What race(s) you want to enter.  You can say the track name or
just the date, for example.  (Just be clear.)

3. Whether or not you want me to keep the source confidential.

4. Tell me if your program needs to read a data file.

The robot driver function name should be identical or a reasonably close
match to the name string contained in the program.
Therefore, if we have a robot driver named
"Charlie" the name of its function would be Charlie(), and it would be
in a file named CHARLIE.CPP and if it reads a data file the file would
be named CHARLIE.DAT.  The filename(s) should not differ from the robot
name by anything more than a sequence number at the end, and the lack of
case distinctions.  While the name need not be less than eight
characters (it should be less than 254 however), in the interests of
future compatibility, please show some restraint. Keep in mind that
some operating systems have case significant filenames, so your data
file should be named exactly as your code assumes it will be.

In the interest of bookkeeping, the filename must change for each new
version of your software.  The easiest way is just to append a sequence
number, so when BURNS.CPP is changed it becomes BURNS1.CPP, and then
BURNS2.CPP, etc.  The robot name and the function name should not
change.  For example, they could remain "Burns" and Burns().  Of course
you may rename all three if you want to, and then the filename should be
the same as the robot name and function name.

Robots may read a data file.  Hence, the entry may consist of two files,
the program file and the data file.  The filename for these two files
must be the same, except for .dat extension on the data file.  The robot
file will have the extension .cpp or .c.

If your robot reads a data file it must be sent at the same time as the
robot file. You must send a new data file when you send a new robot.
They should always be sent in pairs to help keep me from using the wrong
data file.  It would be best if your data file began with its own name,
and the robot checks it when it reads it, but I won't require that.  You
may send a new data file to go with an old robot, but also send a text
file giving its file name, so that I know for certain which robot it
goes with.

Points
------

Race points will be awarded for each race according to the Indy
car system, as supported by RARS. (you can toggle it via a conditional
define in the code)

No qualifications are run; make sure your driver at least has
some minimal collision avoidance, or you might not survive the
first lap.

If a sufficient number of drivers is entered, the results will
be split into an 'expert' and an 'amateur' section. Both sections
will race together, but have seperate standings. I will make
the division based on the performance of the drivers and the
suggested division by their authors.

Additional comments
-------------------

All seasoned participants who wish to participate in the new season,
please resubmit your robots, after having checked their compatibility
with the new RARS version.

I have updated the rules to reflect most of the problems I saw last
year, and the suggestions that have been sent. I hope they are agreeable
for everyone. They are still open for change, so contact me or the list
if you think something should be changed/corrected/updated/clarified.
If there are no further comments, I will make a usenet posting to the
appropriate newsgroups with this announcement.

One thing I'm thinking about is to make the first race not count
for the final standings. This will give both time to ensure that
everything is working correctly, that there is some more time
between this announcement and the first race, and that there
are hopefully more participants (no more free points in the
first race) at the time the second race starts.

Gian-Carlo Pascutto c/o gcp@sjeng.org