Sections
Home
Hills
Infinite Hills
Tournaments
Software
Evolving
Optimizer
Community
Newsletter
Discussion
History
Sections
 
For Beginners
First Steps
FAQ
Guides
Lexicon
Benchmarks
For Beginners
> Home > The Corewar Newsletters > Core Warrior > Issue #1

Issue 3                                                               30/10/95
______________________________________________________________________________

Core_Warrior_ is a weekly newsletter promoting the game of corewar.  Emphasis
is placed on the most active hills--currently the '94 draft hill and the 
beginner hill.  Coverage will follow where ever the action is.  If you have 
no clue what I'm talking about then check out these five-star internet locals
for more information:

FAQs are available by anonymous FTP from rtfm.mit.edu as
pub/usenet/news.answers/games/corewar-faq.Z
FTP site is: ftp.csua.berkeley.edu /pub/corewar
Web pages are at:
http://www.stormking.com/~koth
http://www.ecst.csuchico.edu/~pizza/koth
______________________________________________________________________________

Hi people,

this week I'm back again to write Core warrior for you. As suggested by
Myers, very many wrote complaint letter about his number, asking me to write
again :-) and here I'm. Just kidding.
Anyone wanting to join the staff is welcome as anyone with hints suggestions
and warriors to publish.
_____________________________________________________________________________
Tournament Time
(details at http://www.stormking.com/~koth/nsfcwt.html)


Results for round 3 of NSFCWT are in. The challenge was to submit a
*pair* of warriors that would work together to kill other pairs of warriors.
The score formula was modified to reward partnership, i.e. you received
more points if you left your team mate alife. Real communication between
warriors in a team was apparently difficult to implement effectively, since
only two players chose that strategy (Randy Graham's Aces/Eights and,
passively, Anders Scholl's Claudia/Lestat). Most players in this round
submitted partners that were simply unable to kill each other (like papers)
achieving some sort of cheap cooperativity. It's possible that redcode
simply can't support effective cooperativity, or maybe it's just a matter
of tweaking the score formula some more. Anyways, here the scores:

S/P Warrior #1 by G. Eadon scores 3304
Die Hard by P.Kline scores 2916
Marcia Trionfale 1.3 by Beppe Bezzi scores 2608
Tican by John Wilkinson scores 2308
theMystery2.0 1 by Paulsson scores 2175
Not Expecting Too Much 1 by Karl Lewin scores 2161
theMystery2.0 2 by Paulsson scores 2148
Not Expecting Too Much 2 by Karl Lewin scores 2139
Aces by Randy Graham scores 2136
Juliet Storm+Spiral by John Wilkinson scores 2130
test 1 by Steven Morrell scores 2129
test 2 by Steven Morrell scores 2101
Jack in the box by Beppe Bezzi scores 1981
Twins 2 by Maurizio Vittuari scores 1969
Twins 1 by Maurizio Vittuari scores 1969
Eights by Randy Graham scores 1937
kwclear 2 by Anders Ivner scores 1788
kwclear 1 by Anders Ivner scores 1683
lewis 1 by John Lewis scores 1115
blackTN by P.Kline scores 1102
lewis 2 by John Lewis scores 1016
Claudia incarnation0.3 by anders scholl scores 952
2IR 2 by Calvin Loh scores 694
2IR 1 by Calvin Loh scores 684
Lestat Incarnation0.2 by anders scholl scores 579
S/P Warrior #2 by G. Eadon scores 380

Combined scores:
Beppe Bezzi		4589
John Wilkinson		4438
Magnus Paulsson		4323
Karl Lewin		4300
Steven Morrell		4230
Randy Graham		4073
Paul Kline		4018
Maurizio Vittuari	3938
Greg Eadon		3684
Anders Ivner		3471
John Lewis		2131
Anders Scholl		1531
Calvin Loh		1378

Overall scores so far:
Name	pts for round	1	 2	 3      Tot.
____________________________________________________
Paulsson		7.5	11	11      29.5
Beppe Bezzi		7  	 7     	13      27          
Steven Morrell		5  	10	 9      24
P.Kline			7.5	 9	 7      23.5
John K. Wilkinson	4  	 6	12      22
Anders Ivner		5.5	 8	 4      17.5   
Maurizio Vittuari	6.5	 5	 6      17.5
M R Bremer		7  	 4	 -      11   
Karl Lewin		-	 -	10      10
G. Eadon		1.5	 2	 5       8.5
Randy Graham		-	 -	 8       8
Derek Ross		3.5	 3	 -       6.5
John Lewis		-	 -	 3       3
Anders Scholl		 - 	 1	 2       3
Calvin Loh		-        -       1       1

Magnus Paulsson still leads with 29.5 points, followed by Beppe Bezzi with
27, and Steven Morrell and Paul Kline with 24 and 23.5 points, respectively.


Thanks for playing,
	Nandor & Stefan

----------
Standings are still very open with 5 players in but 7.5 points. 
Welcome to Karl Levin, Randy Graham, John Lewis and Calvin Loh, joining the
tournament this round.
I should not comment this round but I can see the winner, let's hear his
first impressions:  "thank you, thank you, has been very, very hard, but I
did it" :-)))
_____________________________________________________________________________
94 Hill - Standings

 #  %W/ %L/ %T                      Name               Author   Score     Age
 1  40/ 29/ 31                 Torch t18              P.Kline     150     319
 2  44/ 42/ 14       Leprechaun on speed         Anders Ivner     146     115
 3  41/ 37/ 22             Porch Swing +         Randy Graham     145      20
 4  35/ 27/ 38                       Phq    Maurizio Vittuari     143     421
 5  35/ 26/ 39              Father & Son    Maurizio Vittuari     143      22
 6  38/ 34/ 28               myVamp v3.7             Paulsson     141     287
 7  32/ 23/ 45           Jack in the box          Beppe Bezzi     141     307
 8  41/ 42/ 17                Frontwards       Steven Morrell     140     254
 9  29/ 19/ 52                 test r 02          Beppe Bezzi     139      35
10  35/ 31/ 35               Armory - A5            Wilkinson     139     458
11  31/ 25/ 44              .Brain Vamp.  B.Bezzi, M.Paulsson     137      21
12  41/ 46/ 13   Anti Die-Hard Bevo (3c)       John Wilkinson     136     124
13  26/ 16/ 58                     Tican       John Wilkinson     136      13
14  40/ 44/ 16         Leprechaun deluxe         Anders Ivner     135     224
15  21/  7/ 73            Chugging Along           Karl Lewin     135       4
16  34/ 33/ 33               Tornado 1.8          Beppe Bezzi     134     173
17  31/ 37/ 32                  myZizzor             Paulsson     125      50
18  17/ 15/ 68               Cotton-DH c    John K. Wilkinson     118       2
19  15/ 15/ 71               Cotton-DH c    John K. Wilkinson     114       1
20  30/ 46/ 24                Lurker 1.1          Kurt Franke     113       3


Also this week we have standard non-p warriors in great majority (15/5) on
the hill and keeping the top four positions. Randy Graham showed down with
its new Porch Swing+, climbing high; a few paper warriors have entered the
lower part of the hill. A few kills of test warriors have increased the
top/bottom rate, now at 32.7%
A quiet week, the tournament is keeping busy most redcoders.

_____________________________________________________________________________

94 - What's new

 1  44/ 40/ 16             Porch Swing +         Randy Graham     148       1
Welcome back Randy !!
10  32/ 31/ 37              Father & Son    Maurizio Vittuari     134       1
11  28/ 23/ 49                 test r 02          Beppe Bezzi     132       1
13  31/ 29/ 40              .Brain Vamp.  B.Bezzi, M.Paulsson     132       1
14  22/  9/ 69            Chugging Along           Karl Lewin     136       1
19  22/ 18/ 60                     Tican       John Wilkinson     127       1
18  17/ 18/ 65               Cotton-DH c    John K. Wilkinson     116       1
18  30/ 50/ 21                Lurker 1.1          Kurt Franke     110       1
19  15/ 15/ 71               Cotton-DH c    John K. Wilkinson     114       1

Worth noting new Porch Swing +, not dominating like this summer, but always
a dangerous guy. 
____________________________________________________________________________
__________
94 - What's no more

21   2/  1/  2                Brain Vamp  B.Bezzi, M.Paulsson       7     137
21   1/  2/  2              Firestorm 08          Beppe Bezzi       6     114
21  36/ 51/ 13              SandBlast 1a    John K. Wilkinson     121      55
21  37/ 47/ 16                   blackTN              P.Kline     126      43
21  16/ 11/ 73                  Die Hard              P.Kline     121      13

Very little, in my weeks warriors age without risks :-) A couple of warriors
have been killed by their author, to be replaced by new versions or others
warriors.
Other losses include Sandblast, Black TN and Die Hard.
_____________________________________________________________________________

What's old

10  35/ 31/ 35               Armory - A5            Wilkinson     139     458
 4  35/ 27/ 38                       Phq    Maurizio Vittuari     143     421
 1  40/ 29/ 31                 Torch t18              P.Kline     150     319
 7  32/ 23/ 45           Jack in the box          Beppe Bezzi     141     307
 6  38/ 34/ 28               myVamp v3.7             Paulsson     141     287
 8  41/ 42/ 17                Frontwards       Steven Morrell     140     254
14  40/ 44/ 16         Leprechaun deluxe         Anders Ivner     135     224

Armory is now the leader, with some advantage on Phq and a good one on the
trio: Torch, Jack in the Box, both over 300, and myVamp. Two new entries in
the more than 200 old, Frontwards and Leprechaun deluxe.
All the group seems to be in good health.
_____________________________________________________________________________

HALL OF FAME
* means the warrior is still running; > score isn't exact

Pos    Name                  Author          Age     Strategy
 1  Iron Gate 1.5          Wayne Sheppard    926    CMP scanner
 2  Agony II               Stefan Strack     912    CMP scanner
 3  Blue Funk              Steven Morrell    869    Stone/ imp
 4  Thermite 1.0           Robert Macrae     802    Qscan -> bomber
 5  Blue Funk 3            Steven Morrell    766    Stone/ imp
 6  HeremScimitar          A.Ivner,P.Kline   666    Bomber
 7  B-Panama X             Steven Morrell    518    Stone/ replicator
 8  Armory - A5            Wilkinson         458 *  P-warrior
 9  Phq                    Maurizio Vittuari 421 *  Qscan -> replicator
10  NC 94                  Wayne Sheppard    387    Stone/ imp
11  Cannonade              P.Kline          >378    Stone/ imp
12  Torch t17              P.Kline           378    Bomber
13  Lucky 3                Stefan Strack    >350    Stone/ imp
14  Request v2.0           Brant D. Thomsen  347    Qvamp -> vampire
15  Dragon Spear           c w blue          346    ?
16  juliet storm           M R Bremer        333    Stone/ imp
17  TimeScape (1.0)        J. Pohjalainen    322    Replicator
18  Rave 4.1               Stefan Strack     320    CMP scanner
19  Torch t18              P.Kline           319 *  Bomber
20  Jack in the box        Beppe Bezzi       307 *  P-warrior

Phq enters the top 10, Torch t18 and Jack in the box enter in the bottom,
Christopher and Aeka leave the top 20
_____________________________________________________________________________

Beginner's Hill standings

#  %W/ %L/ %T                      Name               Author   Score     Age
 1  53/  8/ 39              juliet storm           M R Bremer     197      41
 2  39/  9/ 52                  paper01o          Beppe Bezzi     169       1
 3  37/ 15/ 49                    Paper8             G. Eadon     159       3
 4  43/ 32/ 25                Lurker 1.1          Kurt Franke     155       2
 5  42/ 34/ 24                   Test-Fc             G. Eadon     149      27
 6  41/ 41/ 18                 Hint Test           M R Bremer     142      21
 7  43/ 44/ 13                 Heatseek2        Phil Whineray     141      19
 8  23/  8/ 69              Impfinity v1               Planar     138      16
 9  39/ 40/ 21                 Searching          Kurt Franke     137       8
10  40/ 46/ 14                       Web        Gareth Thomas     133      42
11  38/ 44/ 18            Mythicon v1.1a             G. Eadon     132     100
12  35/ 40/ 25                1stscanner          Kurt Franke     130      14
13  25/ 23/ 53                   Cyclone         Scott Manley     126      29
14  36/ 53/ 10                   Skimmer        Gareth Thomas     119      68
15  29/ 39/ 32                    Weasel          Kurt Franke     119      33
16  29/ 41/ 30                Banzaiv1.3           Calvin Loh     118       5
17  21/ 29/ 50                  P_Banzai           Calvin Loh     113       4
18  20/ 27/ 53           Imp Craze 91.43               Planar     113      17
19  29/ 47/ 24                Banzaiv1.2           Calvin Loh     112       6
20  32/ 54/ 15                 PlinyScan             G. Eadon     110      23

Sorry for the submission of paper01o, a warrior that entered the -94 hill too. 
I did it to get standings and to compare results with 94 hill's.
In -94 hill paper01o scored 126, entering near position 15. Its code is
discussed in the hint, with notes on how to make a similar warrior.
If anyone wants results of paper01o againts others beginner's or -94 hill
warriors, mail me. Is worth noting paper01o won all single matches on -b
hill, (1/0/249 against Paper8 and Impfinity), but the one against PlinyScan
(82/113/55 for it) 
Against juliet storm, scored but 22/0/228, having very little anti imp.

_____________________________________________________________________________

The hint

Replicators (part 2)

Hi, happy to see you again.

Last time we spoke of basic replicator concepts, now I'll try to speak of
some advanced topics.
To begin let's give a look at another replicating engine, the best one in my
opinion, first introduced by Jippo Pohjalainen in its warrior Timescape.
We report slightly simplified, the way it has been proposed as White warrior
by Nandor and Stefan in the tournament.

warrior
	spl	1,		<-200
	mov.i	-1,		0           ;this block generates 6 processes
	spl	1,		<-300

	
tim2	spl	@tim2, }TSTEP      
tim2a	mov.i	}tim2,	>tim2 

cel2	spl	@cel2,	}CSTEP  ;these four lines are the main body
cel2a	mov.i	}cel2,	>cel2
                                ;here you can insert some bombing line
ncl2a	mov.i	{cel2,	<ncl2
ncl2	jmp	@ncl2,	>NSTEP

All you know, having read part 1, how the first four lines work, they split
away and copy the warrior body where the processes are going to execute, is
worth noting that the lines cel2, cel2a don't copy  the warrior from the
beginning but copy two blank lines in the bottom, after ncl2.
Line ncl2a copies again the warrior, fron cel2 to ncl2+2, backward because
of the pre decrements and last line jumps to the beginning of this copy
resetting the pointer.
The main advantage of this structure is that all the code is executed but
once, to be left as a decoy to foul scanners; this is a great advantage
compared with the older structure of the first hint. Another advantage is
that the warrior will continue to work, slowed, even if wounded by a bomb in
its last two lines.
This guy was the harder thing to kill before Paul Kline created Die Hard.
With this structure have been made some others replicators of success, worth
mention are Nobody special by Mike Nonemacher and Marcia Trionfale by...me.

Now we have a solid structure to work on, to make it deadlier we can add
some other form of attack than overwriting our opponent. The original
Timescape has this single bombing line inserted after cel2a:

	mov.i	<-FSTEP,{FSTEP

how it works, remember we have some processes working in papallel: 
every process takes the cell -FSTEP away, decrements its b-field, take the
cell pointed by and moves it in the position pointed by the decremented
a-field of the cell FSTEP cells away. Simple? NO! :-)
OK. From the beginning:

        dat     0,0
-FSTEP  dat     0,0             ;will became dat 0,-1
...
        mov.i   <-FSTEP,{FSTEP  ;here we are
...
begin   mov     bomb,   nearme 
...     [enemy code]            ;Our enemy is here, we are lucky :-)

end     jmp     begin           
        dat     0,0
FSTEP   dat     0,0             ;will became dat -1,0

Now 1st process takes the cell -FSTEP and decrements its b-field, takes the
cell pointed by the decremented b-field (in the example the cell before) and
moves it; where? It takes the cell FSTEP and decrements its a-field thake
the cell pointed by it, here he hits. Missed, don't worry we have process 2
taking cell -FSTEP-2 and moving it at FSTEP-2 and so on till we have
processes executing the bombing line. At the end the enemy is no more, in
the example at least.

Bombing is useful not only to get rid of our enemy but also to get rid of
ourself ... yes, enemy scanners have the bad use to cover our poor
replicators with carpets of spl 0 and similar nasty things. Those bombs
don't kill, but cause us to generate unuseful processes slowing down our
spread. If we bomb with dat our old copies, that have a chance to be
infected, we can reduce this effect; should happen we hit a good copy don't
worry, we are so many that we can withstand a few losses.

Others warriors use different kind of bombs, more useful to kill our
enemies, the drawback is that we have to carry the bomb with us. The bombing
line will beacme:

        mov     bomb,   <target ;or > or { or }

now the first bomb laid down will become the pointer for the following carpet.
Most used bomb is the anti imp bomb
        dat     <-2666, <2667
this bomb is very good at killing 3 points imp ring, otherwise difficult to
kill by replicators.
Another bomb I used with some success, in Jack in the box, is this simple one:
        dat     1,      1
This bomb is targeted against djn streams and forward clears, two forms of
attack often used by paper enemies. The effect on streams is to make the
process go ot of the loop, wasting time; the effect on forward clears is
deadly, look at a simple forward clear

gate    dat     100,    1000    ;the clear is running 1000 cells away
....
clr     mov     bomb,   >gate   ;what's bomb don't matter, sure nothing with
        jmp     clr             ;a b-field of 1

If we hit gate with a dat 1,1 the clear will begin running inside itself,
till it reaches  clr line and self destructs, very effective and very funny :-)

Like the bombing/scanning step for stones and scanners the spread constants
can make the difference beetween a good and a bad warrior. You have to
choose them so as to assure a good spread of the copies in the core.
Corestep.c by Jay Han and Mopt by Stefan Strack, available at the FTP site,
can give you a starting point, but for replicators the job is, far more
complex because they change their constants in the spread process; let me
explain with an example, same structure 4 parallel processes:

a       spl     @0,     100
b       mov     }-1,    >-1
c       mov     {d,     <d
d       jmp     @0,     >1000

First time lines a-b are executed they splits and copy 100 locations away
but, when lines c-d copy them the value of b-field is 104, and so on. 
I don't know any mathematical method or optimization program to find best
values and I look at what happens using pmarsv. If I notice that modules
don't spread well I change something and so on, art more than science.
In the replicator I'm working at now I use a step modulo 200 for first
constant (anything beetween 100 and 400 is good) a mod 20/40 for second one
and ... my nose :-) for the last one.
Stefan Strack suggested a method using Pmars macros to automatize, in part
at least, the search; here is what he says:

----------
A better way to optimize constants
is to run your warrior with pmars and use cdb macros that change code
sections and record the result. Suppose we want to optimize a slighly
"un-optimized" version of T.Hsu's Ryooki:

nxt_paper   equ     100 ;chosen with room for improvement

boot_paper  spl     1 ,>4000
            mov.i   -1,#0
            mov.i   -1,#0

paper       spl     @paper,<nxt_paper   ; A-fld is src, B-fld is dest
copy        mov.i   }paper,>paper
            mov.i   bomb  ,>paper       ; anti-imp
            mov.i   bomb  ,}800         ; anti-vampire
            jmn.f   @copy ,{paper
bomb        dat     <2667 ,<2667*2

and we want to find a better offset between copies than the "100" in the
nxt_paper EQU. First we need to come up with some good
ways to measure an even spread between paper bodies in core. Here's an
approximation that cdb can easily provide:

	after a few thousand cycles, a paper with a good offset
	1) has more processes
	2) covers more core locations
	than a paper with a bad offset

Now the idea is simply to run multiple rounds, systematically changing the
silk offset at the beginning of each round, and having cdb report process
number and number of covered core locations after 5000 cycles or so. This can
all be automated with macros, so you can have pmars find optimal constants
while you get coffee (jolt? :). Once you have a few candidate offsets, you
should make  sure they're working as you expect by looking at the core
display. You can than go on to find optimal bombing constants for your
set of optimal offsets in pretty much the same manner. As an example using
Ryooki above:

pmars -br 1000 -e ryooki.red
00000   SPL.B  $     1, >  4000
(cdb) 0,7
00000   SPL.B  $     1, >  4000
00001   MOV.I  $    -1, #     0
00002   MOV.I  $    -1, #     0
00003   SPL.B  @     0, < 100
00004   MOV.I  }    -1, >    -1
00005   MOV.I  $     3, >    -2
00006   MOV.I  $     2, }   800
00007   JMN.F  @    -3, {    -4
(cdb) calc i=99
99

This sets a variable "i" to our starting constant.

(cdb)@ed 3~spl @0,<i=i+1~@sk 5000~@pq~ca i,$+1~@pq off~m count~@go~@st
100,987
1830
(cdb)

This is a bit complicated. The "@ed 3~spl @0,<i=i+1" sequence edits address
3 and writes to it the instruction "SPL  @     0, <   100", having incremen-
ted the "i" variable by 1. "@sk 5000" executes 5000 cycles silently, "@pq"
then switches into "process queue" display/edit mode. "calc i,$+1" echoes
the current value of the "i" variable, followed by the number of processes
("$" is the number of the last process). The output is seen on the next line:
"100,987". "@pq off" then switches back into core display/edit mode.
"macro count" executes a macro that is already defined in pmars.mac; the
"count" macro simply echoes the number of core locations that have anything
other than "dat 0,0" in them (here: 1830). Finally, "@go~@st" advance to the
end of this round and to the first cycle of the next round.

When you now press <Enter>, the command sequence is repeated with an offset
value of 101:
(cdb) <Enter>
101,1058
1971
(cdb)
The 101 offset results in a greater number of processes (1058) and more 
addresses written to (1971). If you want to run the whole thing automated,
just inclose the command sequence in a loop (!!~...~!) and send the
results to a file like so:

(cdb) ca i=99
99
(cdb) write ryooki.opt
Opening logfile
(cdb) !!~&ed 3~spl @0,<i=i+1~&sk 5000~&pq~ca i,$+1~&pq off~m count~&go~&st~!

To avoid sending _a_lot_ of garbish output to the log file, we have to use &
in stead of @ in this macro and in the macro count in pmars.mac; just edit it.

count= &ca z=.~m w?~&ca x=.,c=0~!!~m w?~&ca c=c+1~if .!=x~!~ca c~&l z
w?= &search ,
 
You can easily make this more complicated by only echoing
#processes/locations if the values are larger than anything so far (left as an
exercise to the reader), but at this point you are probably ready
to save yourself some typing by defining your own macros. Remember that
you can add macros from within the cdb session using the "@macro ,user"
command (a shorthand is "m="). You could even replace the rather simplistic
check for #processes/locations with a more elaborate macro that calculates
the variance of intervals between papers.

----------
Now we are ready to start making a paper warrior, what we have to do is
putting things together and begin working.

First the structure, we'll make a mid-size warrior, 8 lines, so we need 8
processes.

start   spl     1,      <300    ;so we make 8 parallel processes
        spl     1,      <400    ;the <### are not needed to make it work
        spl     1,      <500    ;but may damage something and cost nothing

silk    spl     @0,     {dest0
	mov.i   }-1,    >-1 
silk1   spl     @0,     <dest1  
	mov.i   }-1,    >-1     
	mov.i   bomba,  }range
	mov     {silk1, <silk2
silk2   jmp     @0,     >dest2
bomba   dat     <2667,  <1

Now the constants: dest0 is the less used, let's take a modulo 200 value,
for dest1 we take a mod 20 one. Now we begin optimization using Stefan
method. I have a rather slow computer so I choosed to analyze but values
ranging from -2000 to -1000. Before doing so I changed the mov bomb line in
a nop instruction, optimizing bombing will come later.

Running Stefan's macro I got -1278 as best value.

Then I replaced the nop with a mov and runned again the macro, choosing a
range for bombing beetween 500 and 1000. Best value 933

I put values in the warrior and submitted it to 94 hill: score: 125.98
Not bad, a little better than hand made one.

For you to enjoy here is the code to play with.

Boyz on the hill, ready your scanners. They are coming :-)

;redcode-94
;name paper01o
;author Beppe Bezzi
;strategy paper module, partially optimized with pmars

;assert CORESIZE == 8000

dest0   equ     2200
dest1   equ     3740
dest2   equ     -1278   ;pmars optimized
range   equ     933     ;pmars optimized

paper
	spl     1,      <300    ;\
	spl     1,      <400    ;-> generate 8 consecutive processes
	spl     1,      <500    ;/

silk    spl     @0,     {dest0
	mov.i   }-1,    >-1 
silk1   spl     @0,     <dest1  
	mov.i   }-1,    >-1     
	mov.i   bomba,  }range
	mov     {silk1, <silk2
silk2   jmp     @0,     >dest2
bomba   dat     <2667,  <1

end     paper

For next hint I would like a little input from you about the argument to be
treated; my first choice is p-space followed by bombers, two arguments I
know at least a little, having made some successful warriors, but I wish to
hear from you.

_____________________________________________________________________________

For questions mail me <bezzi@iol.it> or if you think it's of general
interest post to rec.games.corewar

Anyone with hints or warriors to publish is welcome.
2002-2005 corewar.info. Logo C. Schmidt