Issue 91 30 January, 2005
_______________________________________________________________________________
Core Warrior is a newsletter promoting the game of Corewar, a game of skill
played between two or more computer programs on behalf of the players who
create them.
Emphasis is placed on the most active hills - currently the '94 no-pspace,
'94 draft and beginner hills. Coverage will follow wherever the action is.
If you haven't a clue what I'm talking about then check out these five-star
Internet locals for more information:
FAQs are available from:
http://www.koth.org/corewar-faq.html
http://homepages.paradise.net.nz/~anton/cw/corewar-faq.html
Web pages are at:
http://www.koth.org/ ;KOTH
http://sal.math.ualberta.ca/ ;Sal Hills
http://para.inria.fr/~doligez/corewar ;Planar
http://www.ociw.edu/~birk/corewar ;C.Birk
http://www.corewar.info/ ;Fizmo
http://www.corewar.co.uk/ ;J.Metcalf
Newbies should check the above pages for the FAQs, language specification,
guides, and tutorials. Post questions to rec.games.corewar. All new players
are infinitely welcome!
_______________________________________________________________________________
Greetings...
Happy new year!!!
Welcome to your first Core Warrior of 2005, which comes hot off the digital
presses.
Apologies for the time passed since the last issue. Some interesting events
have taken place. Christian Schmidt organised a meeting to celebrate the
20th anniversary of Corewar; see Christian's write-up in this issue for full
details.
Son of Vain has perished - without a doubt the most resilient stone/imp
ever created and, in the opinion of many in the Corewar community, the most
effective warrior to date. Is there a warrior powerful enough to take the
lead or will the 94nop hill fall into chaos? The post-SoV era begins...
Koth hills have been calm the last few weeks, focusing activity on SAL's
Beginners Hill, where new redcoders have arisen. Welcome.
-----
Redcode Frenzy News: Three rounds have passed since the last issue.
Round 19 "The Battle Maniac Round" and round 20 "Frankenstein round" were
both won by Chip Wendell, who takes the lead on the ranking with four
consecutive victories, the best win record of the tournament! Round 21
"The Football Round" was won by me, German Labarga, as you see, new on the
Core Warrior editorial team.
See the Redcoders Frenzy homepage:
http://www.corewar.info/tournament/cwt.htm
-- Christian Schmidt, German Labarga and John Metcalf
'94 No Pspace Hill
*******************
______________________________________________________________________________
Current Status of the KOTH.ORG '94 No Pspace Hill:
# %W/ %L/ %T Name Author Score Age
1 37/ 26/ 37 The Humanizer bvowk/fiz 149 35
2 37/ 26/ 37 Hullabaloo Roy van Rijn 147 147
3 44/ 43/ 13 Arrow Christian Schmidt 145 350
4 36/ 28/ 36 Borgir Christian Schmidt 143 182
5 41/ 42/ 16 Origin of Storms II Metcalf/Schmidt 141 24
6 30/ 19/ 51 stray cat John Metcalf 140 1
7 33/ 26/ 41 Gargantuan Roy van Rijn 140 168
8 27/ 15/ 58 S.D.N. Christian Schmidt 139 72
9 39/ 38/ 23 picture walker John Metcalf 139 3
10 27/ 15/ 58 Maelstrom Roy van Rijn 139 291
11 31/ 23/ 46 paper(paper(paper(clear)) Sascha Zapf 138 251
12 27/ 17/ 56 Black Knight Christian Schmidt 137 172
13 30/ 25/ 45 New-T Roy van Rijn 136 81
14 39/ 42/ 19 thoughts of fire John Metcalf 135 47
15 24/ 13/ 62 Chainlock v02a G.Labarga 135 30
16 37/ 40/ 23 test Roy van Rijn 134 17
17 25/ 16/ 60 The Utterer Christian Schmidt 134 7
18 38/ 43/ 20 Spiker Roy van Rijn 133 84
19 39/ 44/ 17 HazyLazy C 11 CS SG 133 359
20 36/ 39/ 25 The Boss is back again! G.Labarga 133 6
The hill has aged 215 since issue 90, with just 4 warriors surviving.
Since last issue, Son of Vain has perished after achieving a record age of
2573. SoV entered the hill on 23 March, 2001, and claimed the title of
oldest warrior in November 2002, age 1037. Congratulations to Ian Oversby
and M Joonas Pihlaja on their well deserved success.
Also leaving the hill were slime test 1.00 (age 428), Gremlin (302),
Spiritual Black Dimension (293), Dandelion 3 (185), elf (138), Yorba (123),
2b||!2b (116) and Bottomless Pit (100).
Some noteworthy warriors which left the hill without quite making it to the
age of 100 were Claw III (age 98), O--* (97), unheard-of II (89), Savage
Flowing Battleworn (86), Hydra II (79), Strike Two (70), Triturus (65),
High Voltage (54) and Frantic (53).
Although only 147 challenges old, Hullabaloo has been at the top of the hill
after 117 successful challenges. Also frequently seen as Koth have been
Arrow (34 times), Borgir (26) and The Humanizer (16).
_______________________________________________________________________________
The '94 No Pspace Hall of Fame: * indicates the warrior is still active.
Pos Name Author Age Strategy
1 Son of Vain Oversby/Pihlaja 2573 Q^4 -> Stone/imp
2 Blacken Ian Oversby 1363 Q^2 -> Stone/imp
3 Reepicheep Grabun/Metcalf 1347 Q^4 -> Paper/stone
4 nPaper II Paul-V Khuong 1270 MiniQ^3 -> Paper
5 Uninvited John Metcalf 1130 MiniQ^3 -> Stone/imp
6 Hazy Test 63 Steve Gunnell 1119 Scanner
7 Behemot Michal Janeczek 1078 MiniQ^3 -> Bomber
8 Olivia Ben Ford 886 Q^4 -> Stone/imp
9 Recon 2 David Moore 826 Scanner
10 Keyser Soze Anton Marsden 823 Qscan -> Bomber/paper/imp
11 Quicksilver Michal Janeczek 789 Q^4 -> Stone/imp
12 Eraser II Ken Espiritu 781 Scanner
13 Inky Ian Oversby 736 Q^4 -> Paper/stone
14 Toxic Spirit Philip Thorne 685 Oneshot
15 Jinx Christian Schmidt 662 Q^3 -> Scanner
16 Blade Fizmo 643 Qscan -> Scanner
17 Return of Vanquisher Lukasz Grabun 640 Q^4 -> Bomber
18 Revenge of the Papers Fizmo/Roy 605 Q^4 -> Paper
19 Jade Ben Ford 600 Q^4 -> Stone/imp
20 Firestorm John Metcalf 589 MiniQ^3 -> Paper/imp
21 Claw Fizmo 525 Qscan -> Scanner
22 G3-b David Moore 503 Twoshot
23 Thunderstrike Lukasz Grabun 484 Q^4 -> Stone/imp
24 Vanquisher Lukasz Grabun 469 Q^4 -> Bomber
25 Revival Fire P.Kline 468 Bomber
26 The Phantom Menace Anton Marsden 465 Qscan -> Paper/imp
27 The Stormkeeper Christian Schmidt 460 Q^3 -> Stone/imp
28 Positive Knife Ken Espiritu 449 Q^4 -> Stone/imp
29 Boys are Back in Town Philip Kendall 441 Scanner
= Zooom... John Metcalf 441 Scanner
31 slime test 1.00 David Houston 428 Q^4.5 -> Paper
32 G2-b David Moore 413 Twoshot
33 Ironic Imps Roy van Rijn 403 Q^4 -> Stone/imp
34 Qtest Christian Schmidt 394 Q^3 -> Paper
35 Stalker P.Kline 393 Scanner
36 Decoy Signal Ben Ford 378 Q^4 -> Paper/imp
37 HazyLazy C 11 CS SG 359 * Q^4 -> Scanner
38 unheard-of Christian Schmidt 355 Q^4 -> Paper/imp
39 Arrow Christian Schmidt 350 * Scanner
= Hazy Lazy ... again Steve Gunnell 350 Scanner
= Dawn Roy van Rijn 350 Q^4 -> Paper/imp
42 Static Miz 344 Q^4 -> Stone/imp
43 devilish 2 David Houston 330 Q^4 -> Stone/imp
= Vain Ian Oversby 330 Q^2 -> Stone/imp
45 Omnibus John Metcalf 327 Q^2 -> Stone/imp
46 Win! David Moore 322 Scanner
47 Return of the PendragonChristian Schmidt 318 Q^4 -> Stone/imp
48 Numb Roy van Rijn 312 Q^4 -> Paper/stone
49 Hazy Lazy... Steve Gunnell 309 Scanner
50 Gremlin van Rijn/Grabun 302 Q^4 -> Stone/imp
Son of Vain finally perishes at an all time record age of 2573. SoV was
crowned king of the Hall of Fame back in CW85 (January 2003), and at the
current rate of activity, it's position looks safe until around August
2011 :-)
At age 291, Maelstrom is just a few challenges away from entering the HoF.
'94 Draft Hill
*******************
_______________________________________________________________________________
Current Status of the KOTH.ORG '94 Draft Hill:
# %W/ %L/ %T Name Author Score Age
1 45/ 37/ 18 Bulldozed Christian Schmidt 153 1
2 44/ 35/ 22 ArtaBmoC Christian Schmidt 153 17
3 35/ 26/ 40 The Humanizer bvowk/fiz 144 13
4 30/ 18/ 52 unheard-of II Christian Schmidt 141 57
5 27/ 14/ 59 Chainlock v02a G.Labarga 141 12
6 35/ 30/ 34 Sunrise 06 Zul Nadzri 141 15
7 39/ 39/ 22 Cyberpunk Christian Schmidt 139 143
8 28/ 17/ 54 The Utterer Christian Schmidt 139 8
9 28/ 17/ 56 Maelstrom Roy van Rijn 139 95
10 39/ 39/ 22 Just experimenting 1.4 Blake Escritt 138 31
11 36/ 34/ 30 fallen leaves John Metcalf 138 11
12 33/ 29/ 38 Hullabaloo Roy van Rijn 137 46
13 40/ 43/ 18 Origin of Storms II Metcalf/Schmidt 137 10
14 41/ 45/ 13 Arrow Christian Schmidt 137 116
15 29/ 20/ 51 Black Knight Christian Schmidt 137 77
16 33/ 29/ 38 Spiritual Black Dimension Christian Schmidt 137 135
17 29/ 21/ 50 stray cat John Metcalf 136 5
18 28/ 21/ 51 Bvowkium Fizmoxid bvowk/fizmo 135 64
19 32/ 28/ 41 elf Christian Schmidt 135 62
20 40/ 47/ 13 Dandelion 3 Schmidt/Zapf 133 119
After an age of 68, 6 warriors remain on the hill from last issue. Those
who didn't last the duration include Reepicheep (543), Sunrise (128), Muscle
Hammer (90), Armadillo (68), Arctica (66), Gremlin (66) and Devilish 2 (65).
Cyberpunk is now the oldest warrior with an age of just 143.
p-Warriors are again in top spots now but pure scanners are still scoring
surprisingly well and can still survive for a lengthy term on the hill.
Welcome to Blake Escritt with his impressive debut.
Koth report: 7 warriors resided at number one. Most often seen there have
been Arrow (26), ArtaBmoC (16) and elf (16).
_______________________________________________________________________________
The '94 Draft Hall of Fame: * indicates the warrior is still active.
Pos Name Author Age Strategy
1 Reepicheep Grabun/Metcalf 543 Q^4 -> Paper/stone
2 Son of Vain Oversby/Pihlaja 441 Q^4 -> Stone/imp
3 Return of Vanquisher Lukasz Grabun 283 Q^4 -> Bomber
4 Bitter Sweet Lukasz Grabun 262 Q^4 -> Stone/imp
5 CrazyShot 2 Christian Schmidt 249 Q^4 -> Oneshot
6 Herbal Avenger Michal Janeczek 237 Scanner
7 Bustling Spirit Christian Schmidt 216 P-warrior
8 Revenge of the Papers Fizmo/Roy 204 Q^4 -> Paper
9 Uninvited John Metcalf 194 MiniQ^3 -> Stone/imp
10 Blowrag Metcalf/Schmidt 192 Q^4 -> Paper/imp
11 Incredible! John Metcalf 180 Paper/imp
12 Wallpaper Christian Schmidt 175 Q^4 -> Paper/stone
13 Mantrap Arcade Dave Hillis 170 P-warrior
14 Numb Roy van Rijn 167 Q^4 -> Paper/stone
15 PolyPap Jakub Kozisek 160 Qscan -> Paper
16 Recon 2 David Moore 156 Scanner
17 Cyberpunk Christian Schmidt 143 * P-warrior
= Joyful Maw Dave Hillis 143 P-warrior
19 Paperazor Christian Schmidt 141 Q^4 -> Paper
20 Sunset David Moore 138 P-warrior
21 Dawn Roy van Rijn 137 Q^4 -> Paper/imp
22 Spiritual Black Dimens Christian Schmidt 135 * Qscan -> Paper/stone
23 Self-Modifying Code Ben Ford 132 P-warrior
24 Combatra David Moore 131 Boot distance calculator
25 unheard-of Christian Schmidt 128 Q^4 -> Paper/imp
= Sunrise Zul Nadzri 128 P-warrior
Reepicheep stopped at an age of 543 having been the oldest active warrior
since November 2002. Sunrise enters the HoF before he left the hill, while
Cyberpunk is still in good shape for climbing on up. Arrow and Dandelion 3
will enter soon.
SAL Beginners Hill
*******************
_______________________________________________________________________________
Current Status of the SAL Beginners Hill:
# %W/ %L/ %T Name Author Score Age
1 39.2/ 25.7/ 35.1 Stoney the second Miz 152.6 61
2 44.9/ 40.2/ 14.8 Studie strikes back Sascha Zapf 149.6 93
3 43.9/ 39.9/ 16.2 Shooting Star v0.262 brx 147.9 71
4 44.7/ 41.5/ 13.8 NSos10 Nenad Tomasev 147.8 4
5 43.4/ 40.7/ 15.9 Frullato LAchi 146.2 110
6 32.9/ 22.8/ 44.3 Enigma 2.1 brx/Roy 142.9 63
7 42.6/ 42.8/ 14.7 Unknown Neo 142.3 53
8 34.4/ 27.3/ 38.2 Uneven Twins Sascha Zapf 141.6 97
9 44.1/ 47.3/ 8.7 Star Sascha Zapf 140.9 98
10 32.8/ 25.4/ 41.8 Tom David Moore 140.2 81
11 44.5/ 49.8/ 5.7 s-test Sascha Zapf 139.3 46
12 26.9/ 14.8/ 58.3 Everybody must get STONED madjester 139.1 3
13 31.8/ 27.0/ 41.2 Teenage Metal Isis v0.6a Pascal Hofstee 136.6 52
14 29.1/ 21.6/ 49.3 ImpBulletv1 Nenad Tomasev 136.5 10
15 33.3/ 30.2/ 36.5 AntiImpBulletv3 Nenad Tomasev 136.5 16
16 39.3/ 43.4/ 17.3 French Kiss LAchi 135.3 47
17 31.3/ 29.2/ 39.5 Veenah V0.8 Sascha Zapf 133.4 69
18 40.4/ 47.4/ 12.2 EpsonXVII Nenad Tomasev 133.4 7
19 38.8/ 46.5/ 14.7 Abraxas v1.1 Nenad Tomasev 131.1 5
20 38.4/ 46.7/ 14.9 Hooligan2 G.Labarga 130.1 34
21 40.1/ 50.2/ 9.7 scantest Nenad Tomasev 130.0 6
22 39.5/ 49.7/ 10.8 Scizzory3 Miz 129.3 30
23 37.7/ 46.4/ 16.0 ssoBeht Sascha Zapf 129.0 84
24 35.1/ 44.3/ 20.5 Glass House Ken Hubbard 125.9 50
25 29.8/ 38.4/ 31.8 TestPaper Nenad Tomasev 121.1 1
There were 64 challenges since the last issue with two new authors in good
hill position, namely Nenad Tomasev and madjester. Miz was mostly seen as
koth, with his stone/imp Stoney the second - followed by several oneshots.
_______________________________________________________________________________
Current Status of the Koenigstuhl Recursive ICWS '94 Draft Hill:
Koenigstuhl is a collection of 10 infinite hills found at:
http://www.ociw.edu/COREWAR/koenigstuhl.html
Below we show the top 25 of a total 819 warriors:
rank name author score
--------------------------------------------------------------
1 Hullabaloo Roy van Rijn 165.64
2 Spiritual Black Dimension Christian Schmidt 161.88
3 Reepicheep Grabun/Metcalf 160.81
4 Son of Vain Oversby/Pihlaja 158.94
5 HazyLazy C 11 CS SG 158.48
6 Numb Roy van Rijn 157.84
7 HazyLazy A 70 Steve Gunnell 157.05
8 Herbal Avenger Michal Janeczek 156.95
9 Yorba Roy van Rijn 156.93
10 Frantic Roy van Rijn 156.88
11 Gargantuan Roy van Rijn 156.77
12 Armadillo Lukasz Grabun 156.63
13 Dandelion III Schmidt/Zapf 155.85
14 Quicksilver Michal Janeczek 155.48
15 RotPendragon 2 Christian Schmidt 155.42
16 Maelstrom Roy van Rijn 155.30
17 Jinx 2 Christian Schmidt 155.02
18 Hammerhead Lukasz Grabun 154.84
19 Devilstick Roy van Rijn 154.78
20 Cheep! Half-Off! Ben Ford 154.67
21 Behemot Michal Janeczek 154.66
22 Candy II Lukasz Grabun 154.33
23 Pixie Lukasz Grabun 154.19
24 Machines Will Rule bvowk 153.90
25 Preserver Lukasz Grabun 153.79
Since the last report there are 28 new entries on the hill, of which 12
entered the top 25. Koenigstuhl has a new Koth and deputy Koth, being
Hullabaloo the new king and Spiritual Black Dimension second.
By authors, Roy van Rijn has 7 warriors among top 25, followed by Lukasz
Grabun (6) and Christian Schmidt (4).
Welcome to Machines Will Rule, the first evolved warrior to enter this
ranking.
_______________________________________________________________________________
20th Anniversary Corewar Meeting 2004. A field report by Christian Schmidt
At the end of 2003 John Metcalf and other players suggested to have a meeting
to celebrate the 20th anniversary of Corewar. Several players evinced their
interest in participating. So, we decided to make it sometime in summer 2004
preferably somewhere in Europe, because most of the players hoping to take
part were living there. I offered to host the meeting in Berlin, not
suspecting that it could be embraced by so many people.
Unfortunately my time schedule for 2004 was more tricky than expected. So
the date for the meeting was decided quite late - July 23-25, 2004.
I sent questionaires to numerous Redcoders to discover more about what they
would like to see during the meeting, a preferred time, etc. Because it was
the first time I'd organized something like this, I was a bit worried if I
would be able to pull it off successfully.
Finally the following Redcoders promised me that they would surely attend the
meeting: Achille 'LAchi' Astolfi from Italy, Joonas Pihlaja from Finland,
Ian Oversby from the U.K., Philip Thorne and Alexander 'Sasha' Wait from the
U.S.A. and el kauka and trac from Germany.
There was a lot of preparation needed for the meeting and without the help of
my wife it wouldn't have been possible. But finally everything was ready for
the first Corewar meeting for many, many years - to take part on July 23-25,
2004 in Berlin.
On the afternoon of July 21, the first Redcoder arrived from the States at
the airport Berlin-Schoenefeld, Alexander 'Sasha' Wait. I was quite nervous,
waiting at the arrival hall displaying a sign with the letters ICC 2004 and
the corewar.info logo. Due to the photos on our websites, we recognized each
other immediately.
It was for me a new experience talking for the first time about Corewar
instead of communicating via IRC chatting or e-mails. We were deep in
conversation for the remainder of the day, discussing everything related to
Corewar and Sasha's new quantum coreworld. Everybody can get an impression
of that:
http://www.corewar.info/meeting/21/img3.htm
On the next day we went together to the airport Berlin-Tegel to meet Joonas
Pihlaja coming from Helsinki. It was a touching moment to see him the first
time in person after knowing him for so many years only from the net.
http://www.corewar.info/meeting/22/img1.htm
As the previous day our discussion was mainly focused on Corewar related
topics, even during the dinner ;-) Interesting strategies, warriors, about
the past tournaments etc. Joonas explained to us some of the secrets behind
the creation of Son of Vain, and I explained some of my unpublished warriors.
http://www.corewar.info/meeting/22/img4.htm
The official first day of the meeting started with the arrival of Achille
'LAchi' Astolfi and Philip Thorne with his wife, while Ian Oversby and his
wife were landing last, late evening. For the barbecue at my home two new
Redcoders from Berlin announced their attendance, trac and el kauka. We had
a lot of fun and interesting discussions until far into the night! LAchi
explained to us the idea behind his oneshots and we were discussing how the
deadlock on Koth's experimental multiwarrior hill might be broken.
http://www.corewar.info/meeting/23/img1.htm
On the next day we all met in the morning in Berlin downtown for a shopping
expedition visiting together the well-known KDW (Kaufhaus des Westens), the
Ku'Damm and the Europa Center. In the afternoon we went to a seminar room of
the University of Berlin for two workshops. Many thanks to Prof Raul Rojas
who was so kind to make it available for us. The first workshop was held by
myself introducing optiMAX, a comprehensive Corewar optimizer and how to
improve warriors. The second workshop was held by Sasha who presented the
audience with the idea behind the quantum coreworld.
After a rest we continued with the evening program, visiting the Potsdammer
Platz for some further sightseeing and a german style dinner. It was a
really nice atmosphere with lot of fun and interesting discussions. Phil
teased us with his secret code of Toxic Spirit. Phil I'll bear it in mind ;-)
Also on this evening, a really memorable picture of Joonas and Ian was made,
the authors of the most successful warrior in Corewar history, Son of Vain.
http://www.corewar.info/meeting/24/img8.htm
On the final day we started the morning with a sightseeing tour. Beside the
Brandenburg Gate, the historical parliament and several other tourist
attractions we made a boat trip around the historical museum island and the
administrative district.
http://www.corewar.info/meeting/25/img5.htm
On the evening we made a farewell dinner at my home looking back to the past
discussions and ideas. How fast the time went by. After all, I must say it
was a really enjoyable time spent with everyone and I hope we'll see each
other again soon. If we will ever arrange another Corewar meeting I will
surely attend.
Christian
_______________________________________________________________________________
Imp Launchers & The Hybrid Launcher, by German Labarga
There exist three kinds of imp launcher which create an imp spiral with a
fixed number of processes :
* The binary launcher: Fast and easy to design, it works under both the '88
and the '94 rules. Unfortunately, it is the largest of the three. For a N
process spiral, size is = (2*N)-1, (not including the imp). It takes as
many cycles to execute as lines in the code.
istep EQU (CORESIZE/3+1)
strt: spl 8 ;creates 8 processes, each line is executed once
spl 4
spl 2
a: jmp imp+(0*istep)
b: jmp imp+(1*istep)
spl 2
c: jmp imp+(2*istep)
d: jmp imp+(3*istep)
spl 4
spl 2
e: jmp imp+(4*istep)
f: jmp imp+(5*istep)
spl 2
g: jmp imp+(6*istep)
h: jmp imp+(7*istep)
imp: mov 0,istep ;or mov.i #0,istep
* JMP/ADD launcher, (also called Nimbus launch): This is the smallest one,
but also the slowest. This launcher works under both the '88 and the '94
rules, and uses the simplest design. Size = 3+(ln N / ln 2). If N is not
a power of 2, you must round the result up to the next integer, (5.3 -> 6
lines). It takes (5*N)-1 cycles to launch.
imp: mov.i #0,istep ;or mov 0,istep under '88 rules
strt: spl 1 ;\
spl 1 ; > creates N=8 processes in 7 cycles
spl 1 ;/
spl 2 ;needs 2*N processes for the launch ;8 cycles
jmp imp ;or jmp @0, imp ;8 cycles
add.a #istep,-1 ; add #istep,-1 ;under '88 rules ;8 cycles
(dat 0,0) ;remaining processes should be killed, taking 8
; cycles more, but the spiral is already built
; after (4*N)-1 cycles.
* Vector launcher: As fast as the binary but using much less code. It's size
can be reduced depending the design. Mostly used under '94 rules. It can be
implemented under '88, but requires more instructions and works N cycles
slower.
vect: dat 0,imp+(0*istep) ;'94 basic design with one jmp
dat 0,imp+(1*istep)
dat 0,imp+(2*istep)
dat 0,imp+(3*istep)
dat 0,imp+(4*istep)
strt: spl 1,imp+(5*istep)
spl 1,imp+(6*istep)
spl 1,imp+(7*istep)
send: jmp @vect,}0
..
imp: mov.i #0,istep
Adding more jumps allows us to reduce the table size using free fields in
your code, breaking the table in pieces of equal length. Size increases with
extra jmp's but takes the same time.
.. ;\
spl 2 ;/ create the processes needed
snd1: jmp @vct1,}0 ;vct1 and vct2 point to the vector tables
snd2: jmp @vct2,}0 ;note snd1 and snd2 are executed in alternate order
And the compact version:
vect EQU send
tabl: dat 0, imp+(7*istep) ;this scheme allows us to launch 8
dat 0, imp+(6*istep) ; processes in 8 lines + imp
dat 0, imp+(5*istep)
dat 0, imp+(4*istep)
strt: spl 1, imp+(3*istep)
spl 1, imp+(2*istep)
spl 1, imp+(1*istep)
send: djn.a @vect,#imp+(0*istep) ;djn decrements it's own A-field and
; B-field is free
imp: mov.i #0,istep
Be careful when using djn. In large launchers with more than one jump,
djn.a @1,#.. can be a problem difficult to solve without increasing the size.
* And this is my '88 version:
strt: spl 1 ;\
spl 1 ; > create the processes needed
sptr: spl 1,last ;/ [ln N / ln 2] instructions
send: jmp <sptr ;or djn @0,#last - in this case djn @0,#1
tabl: jmp imp+(7*istep) ; is not a problem.
jmp imp+(6*istep)
jmp imp+(5*istep)
jmp imp+(4*istep)
jmp imp+(3*istep)
jmp imp+(2*istep)
jmp imp+(1*istep)
last: jmp imp+(0*istep) ;first point
imp: mov 0,istep
It takes (3*N)-1 cycles to launch the spiral in N+1+(ln N / ln 2) lines of
code, making it always shorter than the binary launch, but N cycles slower,
(about 34%).
Some warriors use modified binary launchers, reducing the size by splitting
more than one process to jmp instructions. The jmp instructions increment
the launch addresses when executed. Some of these are more complex than the
binary launch, but reduce size nicely.
This example, made by John Metcalf, is one line longer than the equivalent
jmp/add launcher and takes 55 cycles to launch, compared to jmp/add taking
115 cycles.
spl 1 ;code suitable for 3 points imps only
spl 1
spl 1
spl x
spl y
jmp imp+istep*0, }0
y: jmp imp+istep*1, }0
x: nop 0,0 ;processes splitted here must wait
jmp imp+istep*2, }0 ; to execute jumps in the right order
;anyway, you can always boot some code in x
imp: mov.i #istep, *0
The number of processes (N) is optimal when N = 3*2^n. The speed attained
is close to the speed of a binary launcher, at (7/3)*N-1. The size of the
code will be 6+(ln (N/3) / ln 2)
Reanimator, a tiny clear/imp by John Metcalf, includes this interesting
launch code for an eight process 3 point imp spiral:
strt:spl i4
spl i2
i6: spl i1
i3: jmp imp+0*istep, }0 ; 1 4 7
i4: spl i6
spl i5
i1: jmp imp+1*istep, }0 ; 2 5 8
i2: spl i3
i5: jmp imp+2*istep, }0 ; 3 6
imp: mov.i #istep, *0
--- The hybrid launcher ---
Now we have seen the several kinds of existing launcher, I will explain the
hybrid launcher.
In the vector table of a vector launcher we have something like this, (for
3-point imps):
istep EQU (CORESIZE/3+1) ;three point imps
tabl: dat 0, imp+(7*istep) ;= imp+(1*istep) +2
dat 0, imp+(6*istep) ;= imp+(0*istep) +2
dat 0, imp+(5*istep) ;= imp+(2*istep) +1
dat 0, imp+(4*istep) ;= imp+(1*istep) +1
strt: spl 1, imp+(3*istep) ;= imp+(0*istep) +1
spl 1, imp+(2*istep)
spl 1, imp+(1*istep)
send: djn.a @vect,#imp+(0*istep)
imp: mov.i #0, istep
Notice that all the addresses are equal to the first three plus an increment,
+0,+1,+2... It would be great if we could increment those addresses during
the launch, like the example above did, but without using one jump per point.
It can be done like this:
jmp >vect,}0 ;vect points to the head of the table, (addresses are in
; increasing order)
or alternatively:
djn.a >vect,#0 ;vect points to the end of the table, (addresses are in
; decreasing order)
The addresses in the table are incremented after splitting off each process.
So we can launch the processes with two jmp's which use the same table:
vect: dat 0 , imp+(1*istep) ; 2nd ;s2 points to here
dat 0 , imp+(0*istep) ; 1st (+1) 4th ;s1 points to here
strt: spl 1 , imp+(2*istep) ; 3rd (+1) 6th
spl 1 , imp+(4*istep) ; 5th (+1) 8th
spl 2 , imp+(6*istep) ; 7th (+1)
s1: jmp >vect+1,}0 ; 1st 3rd 5th 7th
s2: jmp @vect,}0 ; 2nd 4th 6th 8th
imp: mov.i #0,istep
end strt
The jumps are executed in alternate order: s1 s2 s1 s2 s1 s2 s1 s2
s1 increments imp+(0*istep) after the jump, so then it becomes:
imp+(0*istep)+1 = imp+(3*istep) ;for a 3-point imp
Then s2 jumps to imp+(1*istep)
Next s1 jumps ti imp+(2*istep) and increments the address
And then s2 jumps using the address which s1 used first and was incremented,
so now it is imp+(3*istep)
It can be defined as two mutating vector launchers interweaved. (Well, only
the first launcher mutates the addresses. The second one not, because we are
not going to use the addresses again).
So we have an 8 process launcher in 7 instructions using only four addresses
instead of eight, saving only one instruction. With 16 processes the launcher
would be 11 lines long (not including the imp).
But the size can be reduced even more if we use the compact version with djn:
;redcode-94
;name Short launcher
;author G.Labarga
;assert 1
;strategy 8-proc. 2x hybrid launcher
istep EQU (CORESIZE/3+1)
strt: spl 1 , imp+(6*istep) ;now the addresses are in
spl 1 , imp+(4*istep) ;reverse order
spl 2 , imp+(2*istep)
frst: djn.a >frst ,#imp+(0*istep)
scnd: djn.a @scnd ,#imp+(1*istep)
imp: mov.i #0 , istep
end strt
Wow, the launcher itself is only 5 lines long!
For larger spirals, we can add more addreses to the table or add more jumps
in a binary structure.
;-- 4x hybrid launcher: 32 procs in 11 lines of code ------
;Also a 24-proc. launcher can be done in 10 lines + imp.
;could be 28 procs in 10 lines, but can't create 7 processes in three lines
; without modify B-fields
istep EQU (CORESIZE/3+1)
scnd: djn.a @frst+2,#imp+(28*istep)
dat 0 ,#imp+(24*istep)
strt: spl 1 , imp+(20*istep)
spl 1 , imp+(16*istep)
spl 1 ,#imp+(12*istep)
spl p_2 , imp+(8*istep)
p_1: spl scnd , imp+(4*istep)
frst: djn.a >frst ,#imp+(0*istep) ;| 1st 4th
frth: djn.a >frst ,#imp+(2*istep) ;| 3rd
p_2: spl frth , imp+(1*istep) ;| 2nd
thrd: djn.a >frst+1,#0
imp: mov.i #0 , istep
end strt
Size depends on the number of processes of the spiral, table length and
jumps used to perform the launch. It is always smaller than the vector launch
and has the same speed.
The processes/size ratio is even better in larger launchers, but sometimes
continuous launchers would be more useful for '94 warriors. The hybrid
launcher is not possible under '88 rules.
* What about 7-point imps?
No problem. The table would be 7+k-1 lines long. So table would be minimum
8 lines long for a 2x launcher.
;-- 4x hybrid launcher: 16 procs in 11 lines of code ------
; using a 7-pt spiral. Needs 2 dat instructions.
istep EQU (CORESIZE/7+1)
scnd: djn.a >frst-2 ,#imp+(18*istep)
frth: djn.a @frst+1 ,#imp+(14*istep)
dat 0 ,#imp+(10*istep)
dat 0 , imp+(6*istep) ;| 7th
strt: spl 1 , imp+(2*istep) ;| 3rd
spl 1 ,#imp+(5*istep) ;| 6th
spl p_2 , imp+(1*istep) ;| 2nd
p_1: spl scnd , imp+(4*istep) ;| 5th
frst: djn.a >frst ,#imp+(0*istep) ;| 1st
p_2: spl frth , imp+(3*istep) ;| 4th
thrd: djn.a >frst-4 ,#0
imp: mov.i #0,istep
end strt
Vector tables for 7-pt spirals are bigger but are also easier to fit because
the djns are pointing to different locations in the table. Sometimes even,
we can use all the b-fields of the launch code to fit the table.
_______________________________________________________________________________
Extra Extra - Paper dodgers or oneshots with a snippet? by Christian Schmidt
On the search for interesting ideas I was thinking about John Lewis'
Rusty which I found on Koenigstuhl's infinite 94nop hill.
;redcode
;author John Lewis
;name Rusty
;strategy Quickly scan and find nothing
;strategy then jump to a new location and
;strategy try to catch the other program
;strategy un-awares. When this doesn't
;strategy work, twiddle your thumbs until
;strategy your opponets finds and kills you.
;assert 1
sight add #5937,#0
jmz.a -1,@sight
add #-14,sight
mov <burger,<sight
djn -1,#6
add #2,sight
spl @sight
mov burger+1,sight
ptr dat.f 0,0
dat.f 0,10
start spl #0,10
mov.i @2,>ptr
mov.i @1,>ptr
djn.b -2,{start
burger dat 2301,0
It scans until it finds something and boot a clear 14 instructions ahead of
the scanned locations. The idea behind this warrior is quite fascinating.
If fighting against a paper the safest place should be very close to the
paper copies. This is especially true against papers with good spreading
constants (eg. highly optimized paper).
Based on Lewis' idea I started creating my own warrior. As a coreclear I
choose the one from David Moore's Forgotten Scanner, because this one is
able to beat paper/imps well. A .8c scan seems to work best for this kind
strategy. For the constant optimization I was using optiMAX with the
following settings:
;optimax 1234
;optimax work leap
;optimax rounds 1 100 200 200
;optimax suite fsh94nop0.2
;optimax phase2 fsh94nop0.2/pap/yorba.red
;optimax phase2 80%
;optimax phase3 top20
;optimax phase3 sbi:pap
;optimax phase3 120
;optimax phase4 top20
;optimax phase4 100%
Finally I got the following warrior:
;redcode-94nop
;name Leap in the Dark
;author Christian Schmidt
;strategy my first attempt to rediscover
;strategy a forgotten strategy for 94nop
;assert 1
;optimax clr
sOff equ 3507
sStep equ 1605
sGo add.f sTab, sLook
sne *sLook, @sLook
add.f sTab, sLook
sLook sne sOff+10, sOff
djn.f sGo, <6431
add.ab #-15, sLook
mov <burger, <sLook
mov <burger, <sLook
mov <burger, <sLook
djn -3, #3
add.ab #5, sLook
spl @sLook
mov burger+1, sLook
sTab dat #sStep, <sStep
for 50
dat 0, 0
rof
gate dat 4009, 18
jumper jmp 4009, 18
dat 0, 0
dat 0, 0
jmp -400, <2667
clear spl #4600, 18
mov @switch, >gate
mov jumper, }gate
switch djn clear+1, {clear
burger dat 0, 0
end
It scores surprisingly well against most of the strategies but has its
strength against papers and paper/imps. Interesting to mention is the fact
it has some problems with coreclear papers.
Here are some impressive scores against selected warriors:
Name W% L% T% Leap score
==========================================================
Disincentive 76.00 13.50 10.50 238.50
nPaper II 71.00 19.00 10.00 222.00
Lord of the imp-rings II 70.00 19.00 11.00 221.00
Digitalis2003 61.00 24.50 14.50 197.50
RotF Copy 53.00 13.00 34.00 193.00
Armadillo 48.50 35.00 16.50 162.00
Ironic Imps 47.50 34.00 18.50 161.00
Roy van Rijn added a quickscanner to the above warrior and nicely re-optimized
it. Finally we send it again to the hill under the name Bottomless Pit:
;redcode-94nop
;name Bottomless Pit
;author Roy/Fizmo
;strategy The pit was found after a leap in the dark
;assert 1
zero equ qbomb
qtab3 equ qbomb
qbomb dat >qoff , >qc2
dat 0 , 0
dat 0 , <qb1
qtab2 dat 0 , <qb2
dat 0 , <qb3
sOff equ 2351
sStep equ 1605
pGo add.f sTab, @p
sne *sLook, @sLook
add.f sTab, @p
sLook sne sOff+10, sOff
djn.f pGo, <6431
add.ab #-25, sLook
p mov <burger, <sLook
djn -1, #9
add.ab #5, sLook
jmp @sLook, <sLook
sTab dat #sStep, <sStep
dat 0 , 0
dat zero-1 , qa1
qtab1 dat zero-1 , qa2
for 35
dat 0 , 0
rof
gate dat 4009, 18
jumper jmp 4009, 18
dat 0, 0
dat 0, 0
jmp -400, <2667
clear spl #4600, 18
mov @switch, >gate
mov jumper, }gate
switch djn clear+1, {clear
burger dat 0, 0
dat 0, 0
qc2 equ ((1+(qtab3-qptr)*qy)%CORESIZE)
qb1 equ ((1+(qtab2-1-qptr)*qy)%CORESIZE)
qb2 equ ((1+(qtab2-qptr)*qy)%CORESIZE)
qb3 equ ((1+(qtab2+1-qptr)*qy)%CORESIZE)
qa1 equ ((1+(qtab1-1-qptr)*qy)%CORESIZE)
qa2 equ ((1+(qtab1-qptr)*qy)%CORESIZE)
qz equ 2108
qy equ 243 ;qy*(qz-1)=1
;q0 mutation
qgo sne qptr+qz*qc2 , qptr+qz*qc2+qb2
seq <qtab3 , qptr+qz*(qc2-1)+qb2
jmp q0 , }q0
sne qptr+qz*qa2 , qptr+qz*qa2+qb2
seq <qtab1 , qptr+qz*(qa2-1)+qb2
jmp q0 , {q0
sne qptr+qz*qa1 , qptr+qz*qa1+qb2
seq <(qtab1-1) , qptr+qz*(qa1-1)+qb2
djn.a q0 , {q0
;q1 mutation
sne qptr+qz*qb3 , qptr+qz*qb3+qb3
seq <(qtab2+1) , qptr+qz*(qb3-1)+(qb3-1)
jmp q0 , }q1
sne qptr+qz*qb1 , qptr+qz*qb1+qb1
seq <(qtab2-1) , qptr+qz*(qb1-1)+(qb1-1)
jmp q0 , {q1
sne qptr+qz*qb2 , qptr+qz*qb2+qb2
seq <qtab2 , qptr+qz*(qb2-1)+(qb2-1)
jmp q0
;qz mutation
seq >qptr , qptr+qz+(qb2-1)
jmp q2 , <qptr
;q0 mutation
seq qptr+(qz+1)*(qc2-1),qptr+(qz+1)*(qc2-1)+(qb2-1)
jmp q0 , }q0
seq qptr+(qz+1)*(qa2-1),qptr+(qz+1)*(qa2-1)+(qb2-1)
jmp q0 , {q0
seq qptr+(qz+1)*(qa1-1),qptr+(qz+1)*(qa1-1)+(qb2-1)
djn.a q0 , {q0
jmz.f pGo , qptr+(qz+1)*(qb2-1)+(qb2-1)
qoff equ -86
qstep equ -7
qtime equ 19
q0 mul.b *2 , qptr
q2 sne {qtab1 , @qptr
q1 add.b qtab2 , qptr
mov qtab3 , @qptr
qptr mov qbomb , }qz
sub #qstep , qptr
djn -3 , #qtime
djn.f pGo , #0
end qgo
I've adapted the same idea for the tiny hill. After some optimizations
under the following optimax commands:
;optimax 1234
;optimax work t-leap2
;optimax rounds 1 100 200 200
;optimax suite fshtiny0.1
;optimax phase2 fshtiny0.1/clr/tscan.red
;optimax phase2 80%
;optimax phase3 top25
;optimax phase3 clr:pap
;optimax phase3 90%
;optimax phase4 top25
;optimax phase4 100%
I got the following warrior. It was for a short period koth on the tiny
hill, because it was scoring extremely nice against most of the oneshots.
;redcode-tiny
;name Sidestep
;author Christian Schmidt
;strategy dodger
;assert CORESIZE==800
sOff equ 737
sStep equ 770
burger equ (bptr+1)
sGo add.f sTab, sLook
sne *sLook, @sLook
add.f sTab, sLook
sLook sne sOff+10, sOff
djn.f sGo, <194
sub #19, sLook
mov <burger, <sLook
mov <burger, <sLook
mov <burger, <sLook
mov <burger, <sLook
spl @sLook, <129
mov <burger, <sLook
mov <burger, <sLook
sTab dat #sStep, <sStep
ptr dat 0, 7
dat 1, 11
sbmb spl #762, 13
wipe mov @bptr, >ptr
mov @bptr, >ptr
bptr djn.f wipe, {sbmb
end sGo+1
A different approach is shown below. To increase the scores against scanners
I changed from a .8c scanning to a bombing/scanning loop. The booting part
has to be smaller in this case to give reasonable results.
;redcode-94nop
;name Attacker in the Darkness
;author Christian Schmidt
;strategy bomb -> dodge -> clear
;strategy sequential running strategy
;assert 1
;url http://www.corewar.info
sOff1 equ 4208
sOff2 equ 4064
sStep1 equ 3003
sStep2 equ 105
add.f sTab, sScan
sScan mov.i }sOff1, sOff2
jmz.f -2, {sScan
sub.a #15, sScan
mov.i <sRef, {sScan
djn -1, #9
add.a #5, sScan
sRef jmp *sScan, switch+1
for 5
dat 0, 0
rof
sTab dat #sStep1, <sStep2
for 68
dat 0, 0
rof
gate dat 4009, 18
jumper jmp 4009, 18
dat 0, 0
dat 0, 0
jmp -400, <2667
clear spl #4600, 18
mov @switch, >gate
mov jumper, }gate
switch djn clear+1, {clear
end sScan
I hope I was able to show some new aspects of using a more intelligent boot.
_______________________________________________________________________________
Core Warrior was established by our founding editors Beppe Bezzi and
Myer R Bremer. Later issues have been produced under the editorship of
Maurizio Vittuari, Anton Marsden, Christian Schmidt, Philip Kendall,
John Metcalf and German Labarga.
Questions? Concerns? Comments? Complaints? Mail them to people who
care. Christian Schmidt <fizmo_master@yahoo.com>, German Labarga
<neogryzormail@mixmail.com> and John Metcalf <grumpy3039@hotmail.com>
|