Issue 85 18 January, 2003
_______________________________________________________________________________
Core Warrior is a newsletter promoting the game of corewar. Emphasis is
placed on the most active hills - currently the '94 no-pspace and '94 draft
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://www.ecst.csuchico.edu/~pizza/koth ;Pizza (down)
http://para.inria.fr/~doligez/corewar ;Planar
http://www.ociw.edu/~birk/corewar ;C.Birk
http://de.geocities.com/fizmo_master ;Fizmo
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...
The final results for the (inappropriately named) Spring / Summer 2002
tournament are included this issue, as are a collection of Hints by
Joonas Pihlaja and Thunderstrike by Lukasz Grabun.
The deadline for the Redcoders' Frenzy: the ongoing corewar tournament
is the 1st February, so if you haven't done so already, check out the
rules on Fizmo's corewar page:
http://de.geocities.com/fizmo_master/cwt.htm
-- John Metcalf
______________________________________________________________________________
Current Status of the KOTH.ORG '94 No Pspace Hill:
# %W/ %L/ %T Name Author Score Age
1 42/ 38/ 20 Toxic Spirit Philip Thorne 146.3 55
2 40/ 37/ 22 Return of Vanquisher Lukasz Grabun 143.1 132
3 32/ 22/ 46 Reepicheep Grabun/Metcalf 141.7 601
4 45/ 49/ 6 Claw Fizmo 141.3 338
5 33/ 24/ 43 Thunderstrike Lukasz Grabun 141.3 6
6 30/ 19/ 51 Revenge of the Papers Fizmo/Roy 140.9 408
7 28/ 16/ 56 test Roy van Rijn 139.9 1
8 40/ 41/ 19 Hazy Test 63 Steve Gunnell 139.4 145
9 31/ 23/ 46 Son of Vain Oversby/Pihlaja 138.9 1370
10 38/ 38/ 23 Driftwood John Metcalf 138.2 54
11 39/ 42/ 19 Herbal Avenger Michal Janeczek 136.4 219
12 26/ 17/ 57 Return of the Pendragon Christian Schmidt 136.1 207
13 24/ 13/ 63 The Three-Handed Knight Christian Schmidt 135.7 103
14 27/ 19/ 54 Firestorm John Metcalf 134.4 406
15 25/ 17/ 58 test mj 134.0 11
16 42/ 49/ 9 Chainsaw Christian Schmidt 133.8 3
17 21/ 8/ 71 Decoy Signal Ben Ford 132.8 297
18 30/ 29/ 41 Digitalis 2002a Christian Schmidt 130.8 127
19 29/ 27/ 44 Pixie Lukasz Grabun 129.9 18
20 26/ 23/ 50 Positive Knife Ken Espiritu 129.0 444
182 successful challenges pass since the previous issue, and Son of Vain
becomes the oldest warrior ever on the '94nop hill. Blade, the second
oldest warrior last issue, perishes (age 643). Also pushed into the fatal
21st place were The Stormkeeper (460), Hazy Lazy ... reborn (284), Blowrag
(234), Willow revised (205) and Dark Lowlands (108).
Koth report: Most often seen in the top spot has been Son of Vain, king
after 59 successful challenges. Also performing well were Reepicheep (55
times king), Toxic Spirit (28) and Return of Vanquisher (22).
_______________________________________________________________________________
The '94 No Pspace Hall of Fame: * indicates the warrior is still active.
Pos Name Author Age Strategy
1 Son of Vain Oversby/Pihlaja 1370 * Q^4 -> Stone/imp
2 Blacken Ian Oversby 1363 Q^2 -> Stone/imp
3 nPaper II Paul-V Khuong 1270 MiniQ^3 -> Paper
4 Uninvited John Metcalf 1130 MiniQ^3 -> Stone/imp
5 Behemot Michal Janeczek 1078 MiniQ^3 -> Bomber
6 Olivia Ben Ford 886 Q^4 -> Stone/imp
7 Keyser Soze Anton Marsden 823 Qscan -> Bomber/paper/imp
8 Quicksilver Michal Janeczek 789 Q^4 -> Stone/imp
9 Eraser II Ken Espiritu 781 Scanner
10 Inky Ian Oversby 736 Q^4 -> Paper/stone
11 Jinx Christian Schmidt 662 Q^3 -> Scanner
12 Blade Fizmo 643 Qscan -> Scanner
13 Reepicheep Grabun/Metcalf 601 * Q^4 -> Paper/stone
14 Jade Ben Ford 600 Q^4 -> Stone/imp
15 G3-b David Moore 503 Twoshot
16 Vanquisher Lukasz Grabun 469 Q^4 -> Bomber
17 Revival Fire P.Kline 468 Bomber
18 The Phantom Menace Anton Marsden 465 Qscan -> Paper/imp
19 The Stormkeeper Christian Schmidt 460 Q^3 -> Stone/imp
20 Positive Knife Ken Espiritu 444 * Q^4 -> Stone/imp
21 Boys are Back in Town Philip Kendall 441 Scanner
= Zooom... John Metcalf 441 Scanner
23 Revenge of the Papers Fizmo+Roy 408 * Q^4 -> Paper
24 Firestorm John Metcalf 406 * MiniQ^3 -> Paper/imp
25 Qtest Christian Schmidt 394 Q^3 -> Paper
4 new entries, 2 stone/imp and 2 paper. Next to enter should be Claw.
_______________________________________________________________________________
Current Status of the KOTH.ORG '94 Draft Hill:
# %W/ %L/ %T Name Author Score Age
1 43/ 38/ 19 Combatra David Moore 147.9 91
2 32/ 22/ 45 Reepicheep Grabun/Metcalf 142.8 219
3 32/ 22/ 46 Son of Vain Oversby/Pihlaja 142.7 190
4 41/ 39/ 21 Return of Vanquisher PsP Lukasz Grabun 142.3 30
5 42/ 41/ 17 Bustling Spirit Christian Schmidt 142.3 60
6 40/ 40/ 20 Herbal Avenger Michal Janeczek 140.3 102
7 37/ 33/ 30 Cyanide Excuse Dave Hillis 140.0 92
8 28/ 17/ 55 Incredible! John Metcalf 139.0 85
9 36/ 33/ 30 Mantrap Arcade Dave Hillis 139.0 17
10 40/ 42/ 18 Woozily Higgle Christian Schmidt 138.6 5
11 32/ 25/ 43 Bitter Sweet Lukasz Grabun 138.4 12
12 38/ 39/ 23 Microvenator Michal Janeczek 137.7 23
13 26/ 14/ 60 Defensive Christian Schmidt 137.1 15
14 26/ 16/ 58 Blowrag Metcalf/Schmidt 136.5 146
15 38/ 39/ 23 CrazyShot 2 Christian Schmidt 136.4 202
16 26/ 17/ 57 Monolith John Metcalf 136.3 28
17 32/ 27/ 41 Dark Lowlands Roy van Rijn 136.3 95
18 32/ 28/ 40 Digitalis 2002a Christian Schmidt 136.0 29
19 29/ 22/ 49 Revenge of the Papers Fizmo/Roy 135.3 197
20 25/ 19/ 56 The Three-Handed Knight Christian Schmidt 131.1 1
Koth report: Since last issue the hill has aged by 59. Combatra has been
King most frequently, after 32 successful challenges. Bustling Spirit was
often atop the hill too, 17 times in all.
_______________________________________________________________________________
The '94 Draft Hall of Fame: * indicates the warrior is still active.
Pos Name Author Age Strategy
1 Reepicheep Grabun/Metcalf 219 * Q^4 -> Paper/stone
2 CrazyShot 2 Christian Schmidt 202 * Q^4 -> Oneshot
3 Revenge of the Papers Fizmo/Roy 197 * Q^4 -> Paper
4 Uninvited John Metcalf 194 MiniQ^3 -> Stone/imp
5 Son of Vain Oversby/Pihlaja 190 * Q^4 -> Stone/imp
6 Wallpaper Christian Schmidt 175 Q^4 -> Paper/stone
7 Blowrag Metcalf/Schmidt 146 * Q^4 -> Paper/imp
8 Joyful Maw Dave Hillis 143 P-warrior
9 Paperazor Christian Schmidt 141 Paper
10 Self-Modifying Code Ben Ford 132 P-warrior
11 Mad Christian Schmidt 123 P-warrior
12 Shapeshifter Michal Janeczek 107 P-warrior
13 Herbal Avenger Michal Janeczek 102 * Scanner
14 Help...I'm Scared Roy van Rijn 98 Oneshot
15 Dark Lowlands Roy van Rijn 95 * *Unknown*
16 Cyanide Excuse Dave Hillis 92 * P-warrior
= Dry Ice Ben Ford 92 P-warrior
18 Combatra David Moore 91 * Boot distance calculator
19 Digitalis 2002 Christian Schmidt 89 Q^4 -> Clear/imp
= WingShot++ Ben Ford 89 Oneshot
21 Origami Harquebus mjp 88 P-warrior
22 Incredible! John Metcalf 85 * Paper/imp
23 Firestorm John Metcalf 80 MiniQ^3 -> Paper/imp
24 Pattel's Virus Ben Ford 73 P-warrior
25 Hazy Lazy ... reborn Steve Gunnell 67 Scanner
Yet another hall of fame :-)
_______________________________________________________________________________
Current Status of the Koenigstuhl Recursive ICWS '94 Draft Hill:
Koenigstuhl is a collection of 8 infinite hills found at:
http://www.ociw.edu/COREWAR/koenigstuhl.html
Below we show the top 25 of a total 801 warriors:
rank name author score
--------------------------------------------------------------
1 Reepicheep Grabun/Metcalf 170.18
2 Son of Vain Oversby/Pihlaja 167.57
3 Herbal Avenger Michal Janeczek 166.35
4 Blue Pike Roy van Rijn 165.79
5 Quicksilver Michal Janeczek 165.06
6 Pixie Lukasz Grabun 163.90
7 Uninvited John Metcalf 163.04
8 Hazy Lazy ... Steve Gunnell 162.96
9 Cheep! Half-Off! Ben Ford 162.84
10 Behemot Michal Janeczek 161.70
11 Firestorm John Metcalf 160.61
12 procoptodon Steve Gunnell 159.91
13 Jinx Christian Schmidt 159.82
14 Return of Vanquisher Lukasz Grabun 159.70
15 Vanquisher II Lukasz Grabun 159.30
16 Candy Lukasz Grabun 159.14
17 Geist v0.1 Ben Ford 157.82
18 Olivia Ben Ford 157.79
19 The Machine Anton Marsden 157.65
20 Purifier Lukasz Grabun 157.58
21 Silver Talon 1.2 Edgar 157.19
22 Deep Freeze X Lukasz Grabun 156.79
23 Recovery Ian Oversby 156.53
24 Newt Ian Oversby 156.06
25 The Pendragon Christian Schmidt 156.03
Almost half of the top 25 are new entries: Reepicheep, Herbal Avenger,
Blue Pike, Pixie, Cheep! Half-Off!, Firestorm, procoptodon, Jinx, Return
of Vanquisher, Geist v0.1, Olivia and finally The Pendragon.
Also new in the top 100 are The Marsupial Lion (in rank 32), Digitalis
2002 (37), Revenge of the Papers (54), Fast Action (56), Blowrag (63),
The Demon Duck of Doom (93) and Help I'm Scared (95).
The '88 infinite hill has some strong new entries too, with Quicksilver
'88 (in rank 2), '88 test IV (3) and vm5 (4).
_______________________________________________________________________________
Spring / Summer 2002 Corewar Tournament - Round 5 Results and Final Standings:
In round 5, competitors take part in three event. Warriors have been
written without the use of the add / sub opcodes. Pattern bombers /
scanners are still possible using mul, and several of these have been
entered.
* Our first event is multi-warrior, with three warriors in core, 5
points for a win, 2 points for a two-way tie, and 1 point for a
three-way tie. All 969 combinations of three warriors are played:
# %Won Lost Tie2 Tie3 Name Author Score %
1 29.0 53.4 5.2 12.4 Russ Post Steve Gunnell 167.77 100.0
2 23.8 48.7 10.5 17.0 LuckyLuke Philip Thorne 156.93 93.5
3 5.8 10.0 35.8 48.4 The Duelist Michal Janeczek 149.05 88.8
4 19.7 45.0 15.2 20.1 Huanchot G.Labarga 148.90 88.8
5 2.6 2.4 36.7 58.3 Blackheart Ben Ford 144.65 86.2
6 11.3 26.2 24.5 38.0 Digimon Christian Schmidt 143.56 85.6
7 2.4 6.4 37.4 53.7 Pokemon Christian Schmidt 140.69 83.9
8 6.9 16.6 27.7 48.8 Dan Dare Simon Wainwright 138.57 82.6
9 6.6 18.4 30.0 45.0 Bravo Lukasz Grabun 137.95 82.2
10 19.4 52.7 11.0 16.8 Magneto Roy van Rijn 135.92 81.0
11 3.6 13.8 32.2 50.5 Shadowfax Roy van Rijn 132.68 79.1
12 3.1 13.9 32.3 50.6 Jolly Jumper Philip Thorne 130.88 78.0
13 10.9 38.0 21.5 29.6 Dixie Lukasz Grabun 126.96 75.7
14 11.3 38.8 19.5 30.3 Commander Heliotornado Michal Janeczek 125.98 75.1
15 1.4 11.6 27.2 59.8 Ron Post Steve Gunnell 121.35 72.3
16 4.1 25.0 25.3 45.6 Spiderman Ben Ford 116.63 69.5
17 3.0 31.9 23.1 42.0 Yak Snout Dave Hillis 103.09 61.4
18 2.7 40.5 20.3 36.5 Bonzo Sascha Zapf 90.68 54.1
19 0.3 65.8 11.5 22.4 Mekon Simon Wainwright 47.01 28.0
* The second is a standard round-robin battle, with no self-fights,
4 points for a win, and 1 point for a tie:
# %Won Lost Tied Name Author Score %
1 56.0 33.3 10.7 Russ Post Steve Gunnell 234.83 100.0
2 42.5 27.9 29.6 The Duelist Michal Janeczek 199.58 85.0
3 45.1 38.2 16.7 LuckyLuke Philip Thorne 197.27 84.0
4 43.0 33.3 23.7 Huanchot G.Labarga 195.64 83.3
5 44.2 38.3 17.5 Magneto Roy van Rijn 194.41 82.8
6 37.8 21.0 41.2 Commander Heliotornado Michal Janeczek 192.42 81.9
7 26.4 18.1 55.4 Digimon Christian Schmidt 161.12 68.6
8 23.3 17.6 59.1 Bravo Lukasz Grabun 152.33 64.9
9 17.6 12.1 70.3 Shadowfax Roy van Rijn 140.78 59.9
10 18.1 14.4 67.5 Dan Dare Simon Wainwright 139.99 59.6
11 22.9 32.2 44.9 Dixie Lukasz Grabun 136.56 58.2
12 16.0 12.4 71.6 Jolly Jumper Philip Thorne 135.75 57.8
13 11.8 4.4 83.8 Pokemon Christian Schmidt 131.13 55.8
14 11.2 3.6 85.2 Blackheart Ben Ford 129.92 55.3
15 10.2 10.8 79.0 Ron Post Steve Gunnell 119.64 50.9
16 12.7 26.7 60.6 Spiderman Ben Ford 111.36 47.4
17 14.9 34.0 51.1 Bonzo Sascha Zapf 110.68 47.1
18 12.4 34.3 53.3 Yak Snout Dave Hillis 102.92 43.8
19 2.8 56.5 40.6 Mekon Simon Wainwright 51.98 22.1
* The final event sees the entries battle against the 'White Army'
benchmark of 20 warriors, 3 points for a win, 1 point for a tie.
The score of Commander Heliotornado just has to be admired:
# Name Author %W %L %T Score %
1 Commander Heliotornado Michal Janeczek 54 26 20 182.30 100.0
2 LuckyLuke Philip Thorne 40 46 14 134.10 73.6
3 Pokemon Christian Schmidt 21 10 69 131.64 72.2
4 Blackheart Ben Ford 18 12 70 123.30 67.6
5 Bravo Lukasz Grabun 27 31 42 123.24 67.6
6 Shadowfax Roy van Rijn 24 25 51 122.58 67.2
7 Jolly Jumper Philip Thorne [PVK/JM] 24 26 49 122.31 67.1
8 Digimon Christian Schmidt 30 39 31 122.02 66.9
9 Dan Dare Simon Wainwright 22 30 48 114.65 62.9
10 Ron Post Steve Gunnell 18 23 58 112.70 61.8
11 The Duelist Michal Janeczek 28 43 29 112.42 61.7
12 Dixie Lukasz Grabun 27 45 28 108.32 59.4
13 Russ Post Steve Gunnell 33 58 9 108.26 59.4
14 Huanchot G.Labarga 26 53 21 99.61 54.6
15 Magneto Roy van Rijn 26 58 16 94.11 51.6
16 Spiderman Ben Ford 14 41 45 87.08 47.8
17 Bonzo Sascha Zapf 16 62 22 70.45 38.6
18 Yak Snout Dave Hillis 10 57 34 62.26 34.2
19 Mekon Simon Wainwright 7 70 23 45.29 24.8
Among the entries, paper is the most common strategy, with 4 in total,
(Jolly Jumper, Shadowfax, Spiderman and Ron Post). Also, there are
3 paper/imp (Pokemon, Bonzo and Blackheart) and a paper/clear (Bravo).
Oneshots are well represented with 3, (Lucky Luke, Huanchot and
Magneto) and there's just one scanner (Ross Pot). Two clear/imps
(Dixie and Digimon) take part, as do an evolved warrior (Yak Snout)
and an imp (Mekon). The remaining 3 warriors are p-spacers, (Dan Dare,
The Duelist and Commander Heliotornado).
The total score for round 5:
# Competitor Multi Robin Bmark Total
1 Michal Janeczek 88.8 85.0 100.0 273.8
2 Steve Gunnell 100.0 100.0 61.8 261.8
3 Philip Thorne 93.5 84.0 73.6 251.1
4 Roy van Rijn 81.0 82.8 67.2 231.0
5 German Labarga 88.8 83.3 54.6 226.7
6 Christian Schmidt 85.6 68.6 72.2 226.4
7 Lukasz Grabun 82.2 64.9 67.6 214.7
8 Ben Ford 86.2 55.3 67.6 209.1
9 Simon Wainwright 82.6 59.6 62.9 205.1
10 Sascha Zapf 54.1 47.1 38.6 139.8
11 Dave Hillis 61.4 43.8 34.2 139.4
And finally, we have the Spring / Summer 2002 results. For those players
who took part in all 5 rounds, only the highest 4 results count toward the
final score:
# Competitor Tiny BigLP 88Win Len50 3Atha Total Final
1 Michal Janeczek 93.3 100.0 100.0 98.6 273.8 665.7 : 572.4
2 Steve Gunnell 91.0 85.0 82.4 96.2 261.8 616.4 : 534.0
3 Philip Thorne 75.5 68.0 72.7 89.0 251.1 556.3 : 488.3
4 Ben Ford 100.0 74.4 75.1 100.0 209.1 558.6 : 484.2
5 Simon Wainwright 79.1 71.5 89.1 79.0 205.1 523.8 : 452.3
6 Lukasz Grabun 81.3 . 67.6 70.7 214.7 434.3 : 434.3
7 Dave Hillis 99.9 84.3 87.3 87.7 139.4 498.6 : 414.3
8 Roy Van Rijn . . . 92.8 231.0 323.8 : 323.8
9 Christian Schmidt . . . 90.7 226.4 317.1 : 317.1
10 German Labarga . . . 60.0 226.7 286.7 : 286.7
11 Robert Macrae 89.7 61.0 . . . 150.7 : 150.7
12 Sascha Zapf . . . . 139.8 139.8 : 139.8
13 Winston Featherly-Bean 72.9 47.3 . . . 120.2 : 120.2
14 David Moore . 51.4 63.6 . . 115.0 : 115.0
15 Martin Ankerl 88.2 . . . . 88.2 : 88.2
16 Ken Espiritu . . 86.3 . . 86.3 : 86.3
17 Leonardo H. Liporati 84.3 . . . . 84.3 : 84.3
18 mushroommaker 71.3 . . . . 71.3 : 71.3
19 Arek Paterek 66.0 . . . . 66.0 : 66.0
20 Paul Drake 61.9 . . . . 61.9 : 61.9
21 Sheep . . . 60.2 . 60.2 : 60.2
22 Compudemon 53.9 . . . . 53.9 : 53.9
23 Darek L. . . . 35.2 . 35.2 : 35.2
24 bvowk . . . 27.0 . 27.0 : 27.0
So, the overall winner is Michal Janeczek, who wins the International Money
Order for $100 (US). The best performance in an individual round also goes
to Michal, for FragPaper in the BigLP round. The highest ranking tournament
newcomer is Philip Thorne, in 3rd place. Congratulations to everyone who
has taken part.
_______________________________________________________________________________
Seven Hints, by Joonas Pihlaja
Here are some hints that you probably know already, but might refresh
your memory.
1) In a stone you can spread out your decrement stream by having the
decrement pointer change like the main bombing pointer does:
;redcode
;assert 1
STEP equ (3039*8)
steps spl #3*STEP,3*STEP
add steps, ptr
ptr mov bmb+2+2*STEP, *bmb+2
mov bmb, @ptr
djn.f -3, *ptr
bmb dat STEP, 0
end
2) When your one shot finds something, try moving your scan pointers
back a bit so it has a better chance of stunning the enemy. Try it
with and without the "add #-20, gate" line in the one shot below, for
instance.
;redcode-94nop
;name one shot test
;strat .5c fscan -> .5c sdd clear
;assert 1
gate equ (bp-(bs-bp))
sca add #10, gate
jmz.f sca, @gate
add #-20, gate
bp spl #bs, bd-gate
mov *bp, >gate
djn.f -1, {gate
dat 0,0
dat 0,0
bd dat 0, 20-gate
bs spl #bp-(gate-1), 20-gate
end sca
3) You don't need a d-clear to have an effective gate in your clear.
The loop works almost as well. (Thanks to David Moore, who pointed
this one out.)
mov bomb, >gate
djn.f -1, {gate
4) When booting multi-component warriors where the components are
heavy splitters, make sure all your processes leave the boot code at
roughly the same time. Otherwise if you send processes to a heavy
splitter and still have things to do in your boot code, then those
remaining processes may linger in the boot code, just gagging to be
spl wiped.
5) Don't buy the hype: There's no magic d-clear bomb. Use your spare
fields for something useful.
Here's the imp pump:
pump spl 0,0
add.a #2667+1,2
mov imp,>1
jmp imp-2*2668,1
imp mov 0,2667
end
And here's the d-clear:
gate equ (clr-5)
clr spl 0,0
mov 2,>gate
djn.f -1,>gate
dat AFIELD,2-gate ; AFIELD one of 0, <2667, etc.
Here are the results for various AFIELD's from running pmars-server
with the flags -r 1000 -F 1000 imp.red dclr.red. Wins are for the imp.
0: 3-536-461
<0: 3-536-461 <2666: 3-536-461 <5333: 3-535-462
<-1: 3-536-461 <2667: 3-540-457 <5334: 4-536-460
<1: 3-536-461 <2668: 3-536-461 <5335: 3-536-461
>0: 3-525-472 >2666: 3-471-526 >5333: 5-498-497
>-1: 4-507-489 >2667: 3-525-472 >5334: 4-525-471
>1: 4-535-461 >2668: 3-536-461 >5335: 10-525-465
Note that across the board the incrementing bombs score worse than the
control bomb dat 0,2-gate by a fair deal, except once. Contrast that
to the decrementing bombs where mostly there is no effect, except
<2667, which has a very slight advantage.
6) Airbag techniques are more effective with larger loops.
7) Scan your opponent in unexpected ways.
_______________________________________________________________________________
Extra Extra - Thunderstrike by Lukasz Grabun
One way in which a warrior made by a experienced programmer differs from one
made by a beginner is the variety of classes of other programs it can beat.
Sure, it's easy to make a scanner that beats paper, but can we make it
anti-stone enough to enter the hill and survive there? For a stone, it's
important to score well against other stones, clears and paper. During the
process of creating Thunderstrike I've realised that it is scanners which
are sometimes the hardest to beat.
The idea was given a few years ago by Ian Oversby in his article about Newt.
("Longevity, Imp/Stones and Newt", CW69). Here's what he stated:
: So, how is it possible to future-proof your new program? I believe we
: must look at the problem in the correct light. If we take the traditional
: analogy of warriors to stone/paper/scissors then we condemn our warrior to
: death as the hill balance changes. If we wrote a scanner then when many
: stones enter the hill we will surely die. However, this analogy holds
: very loosely. For example, it is possible to write a stone that will kill
: paper or paper that will kill scissors. That attitude that we _can_ beat
: a warrior type that would usually beat us is very important. It is
: interesting to note that Vigor, allegedly a paper, suffers its worst
: defeat at the hands of a stone - Newt.
Thunderstrike originates from the idea expressed by Ian in his program: a
strong and resilient stone to kill scanners, with a d-clear to wipe imps.
TS's stone implements just one more trick while bombing: a Torch-like
engine, as widely used by other stones. So, why not try it in a Newt-like
bomber? The idea was quite easy to implement:
step equ (3510)
hop equ (46)
gate equ (inc-6)
from equ (0+step)
hit equ (loop-step-hop)
inc SPL.B #step , <-step
MOV.I {from , <hit
MOV.I bomb , @-1
ADD.F inc , -2
loop DJN.F -3 , <-step+inc
MOV.I bomb , >gate
DJN.F -1 , >gate
bomb DAT.F >5335 , hop+1
It produces quite a good pattern of laid bombs/decrements:
...0..X..*...0..X..*...
where 0 is a dat 0,0 bomb, X is a dat >5335,hop+1 and * is a decrement. As
you will have noticed it is similar to Newt's pattern, though not so dense.
The stone itself is large - 8 cells, opposed to 4-5 cells for the generic
frenzy killers commonly used in stone/imps, which does not compare well. On
the other hand, TS has a good offensive power against imps - not only does
it have its own d-clear, but it also uses an anti-imp bomb as a pointer for
the second bomb. Other stone/imps in general do not have their own clear,
or they self-bomb to create a clumsy 0.33c clear, losing many processes when
they do so.
Skew Dwarf from Recycled Bits has the most offensive power against stone/imp
warriors among generic stones - compare the results (scores calculated for
SD, Candy and TS, respectively):
: Skew Dwarf : Candy : Thunderstrike :
: %W %L %T Sto S/I : %W %L %T Sto S/I : %W %L %T Sto S/I :
Candy: 32 53 16 112 175 : 7 89 4 25 271 : 31 45 24 117 159 :
Jade : 30 55 15 105 180 : 5 89 10 25 277 : 33 39 28 127 155 :
QS : 22 72 6 72 222 : 12 85 3 39 279 : 35 51 13 118 166 :
Uninv: 25 56 19 94 187 : 13 81 6 45 249 : 30 48 22 112 166 :
Oliv : 24 57 19 91 190 : 6 82 12 30 258 : 25 51 27 102 180 :
SoV : 18 51 32 76 185 : 8 85 3 27 253 : 21 51 27 90 180 :
Newt : 24 53 24 96 183 : 9 81 10 37 253 : 22 42 36 102 162 :
WMute: 12 72 15 51 231 : 9 83 8 35 257 : 22 55 23 89 188 :
Storm: 26 57 17 95 188 : 6 89 5 23 272 : 27 40 33 114 153 :
PenDr: 19 46 35 92 173 : 5 88 7 22 271 : 17 36 47 98 155 :
Roseb: 22 71 7 73 219 : 9 83 8 35 256 : 27 50 24 100 172 :
Avr : 23 57 20 89 191 : 8 85 7 31 262 : 26 46 28 106 166 :
As you can see, Candy is totally unable to handle stone/imps. Skew Dwarf
scores much better, but it is Thunderstrike that gains most wins and turns
many losses into ties. Sidenote: the effectiveness with which Newt handles
d-clear is strongly overstated. D-clear of the form:
gate dat 0 , 100
dat 0 , 0
clear spl #0 , #0
mov bomb , >gate
djn.f -1 , >gate
bomb dat >5335 , 2-gate
end clear
... scores even with a stone derived from Newt, while Thunderstrike beats
it (52/42/6). To give you a better picture here are detailed results (pmars
executed with -P option)
Number of Newt's stone Thunders's stone
cycles loses/wins loses/wins
1000 18/100 4/100
5000 92/100 55/100
10000 103/100 94/100
80000 103/100 118/100
Newt disables the d-clear sooner, but overall Thundestrike performs better.
As I discovered, the average performarance of Newt against d-clear is caused
by the double spl lines. Commenting first line in the stone helps a lot:
Newt scores now 51/39/9.
This leaves papers (and as I later found out, scanners) to take care of.
Paper can harm Thunderstrike. This is a weakness of all stone/imp warriors
and only a little can be done about this. After careful consideration and
testing, I chose to use medium-weight imps (30 processes) and kill the
launcher after 3000 cycles. If the stone survives the first 1200 cycles -
the moment when d-clear is entered - it completely surpasses imps, to
perform a better end-phase, and disallow the imps reaching any remaining
gates.
This is done in a similar manner to Newt - kind of double spl line when
`loop' is hit produces so many processes, the imps slow down, hardly moving
over the core. However, if the stone is killed during paper carpet bombing,
the imps are strong enough to face paper bombs. For example, a paper
derived from Purifier ties with Thunderstrike (2/4/94 - counted for paper).
Reepicheep's paper scores about 13/7/80. However, stronger anti-imp papers,
such as Disincentive, can do real harm. Hopefully, the times of stand-alone
papers are gone. :-)
While creating the stone, I discovered that even programs which by
definition should be killed by stones (namely: scissors) can produce some
real problems:
: Skew Dwarf : Candy : Thunderstrike :
: %W %L %T Sto Sca : %W %L %T Sto Sca : %W %L %T Sto Sca :
HL : 63 31 6 195 99 : 66 28 6 204 90 : 42 51 7 133 160 :
Boys : 68 25 6 210 81 : 68 25 7 211 82 : 57 37 5 176 116 :
CS2 : 49 43 7 154 136 : 45 45 9 144 144 : 48 38 13 157 127 :
DeepF: 67 28 4 205 88 : 65 27 7 202 88 : 45 45 10 145 145 :
SilvT: 73 17 9 228 60 : 72 21 6 222 69 : 57 35 8 179 113 :
Zooom: 73 21 6 225 69 : 78 16 5 239 53 : 57 35 8 179 113 :
HerbA: 67 25 8 209 83 : 61 30 9 192 99 : 51 41 7 160 130 :
Willw: 69 29 2 209 89 : 76 19 4 232 61 : 65 34 2 197 104 :
Jinx : 73 18 8 227 62 : 70 22 7 217 73 : 57 35 7 178 112 :
Avr : 68 26 6 210 84 : 67 25 7 208 82 : 53 39 8 167 125 :
Thunderstrike scores well against traditional scanners. Those with
anti-stone improvements cause some problems but overall the score is quite
good. Skew Dwarf and Candy's stone score extraordinarily, and outrun
scanners (no wonder, Candy *was* designed to kill them).
Here are results counted for Thunderstrike against some top-notch
warriors:
%W %L %T Score
===================================================
Behemot 41 43 16 139
Boys Are Back 45 40 14 150
Candy 24 9 67 140
Crazyshot 2 41 30 28 152
Deep Freeze X 42 42 16 143
Disincentive 13 24 62 102
Executor 45 35 20 156
Firestorm 15 14 71 117
Hazy Lazy 36 43 20 129
Herbal Avenger 42 37 21 146
Jade 31 8 61 153
Mini Jedi 12 9 79 116
Newt 25 27 48 124
nPaper II 9 11 80 108
Olivia 24 27 49 121
Purifier 15 12 72 118
Quicksilver 30 11 60 149
Recovery 21 19 60 123
Reepicheep 23 18 59 128
Return of Vanquisher 43 40 17 145
RotF Copy 13 7 80 119
Silver Talon 1.2 43 41 16 145
Son of Vain 22 23 55 121
Stylizede Euphoria 30 7 62 153
Uninvited 34 8 58 160
Vanquisher II 44 37 19 152
Wallpaper 21 25 54 116
Wintermute 30 10 60 150
Zooom 43 39 18 148
Here's the code. Enjoy.
;redcode-94nop
;author Lukasz Grabun
;assert (CORESIZE==8000)
;name Thunderstrike
;strategy Q^4 -> Stone/Imp
orig z for 0
rof
; -- imp constants
istep equ (2667) ; 3-point imps
ioff equ (6338+orig) ; imp launcher offset
qBmb dat {qOff , #qF
; -- imp launcher
pump SPL.B #imp , #imp+1
SUB.F #-istep-1 , iloop
MOV.I imp , }pump
iloop JMP.B imp-2*(istep+1) , >imp+2*istep-1
imp MOV.I #0 , istep
; -- stone constants
step equ (3510)
hop equ (46)
gate equ (inc-6)
from equ (0+step)
hit equ (loop-step-hop)
soff equ (2498+ioff) ; stone offset
; -- stone
inc SPL.B #step , <-step
MOV.I {from , <hit
MOV.I bomb , @-1
ADD.F inc , -2
loop DJN.F -3 , <-step+inc
MOV.I bomb , >gate
DJN.F -1 , >gate
bomb DAT.F >5335 , hop+1
; -- boot
boot MOV.I bomb , soff
MOV.I {boot , <boot
MOV.I {boot , <boot
SPL.B }2 , }qC
qTab2 SPL.B *1 , }qD
SPL.B 0 , }qE
MOV.I {boot , <boot
MOV.I <pump , {qTab1
DJN.B @boot , #5
JMP.B ioff-5 , #qA
qTab1 DAT.F ioff , #qB
for 46
dat 0,0
rof
; -- qscan constants
qX equ 6844
qA equ 6390
qB equ 5097
qC equ 6148
qD equ 4855
qE equ 3562
qF equ 4129
qStep equ 7
qTime equ 16
qOff equ 87
; -- qscan
qGo seq qPtr+qX , qPtr+qX+qD
jmp qSkip , {qPtr+qX+qStep
sne qPtr+qX*qE , qPtr+qX*qE+qE
seq <qTab2+1 , qPtr+qX*(qE-1)+(qE-1)
jmp qDec , }qDec+2
sne qPtr+qX*qF , qPtr+qX*qF+qD
seq <qBmb , qPtr+qX*(qF-1)+qD
jmp qDec , }qDec
sne qPtr+qX*qA , qPtr+qX*qA+qD
seq <qTab1-1 , qPtr+qX*(qA-1)+qD
djn.a qDec , {qDec
sne qPtr+qX*qB , qPtr+qX*qB+qD
seq <qTab1 , qPtr+qX*(qB-1)+qD
jmp qDec , {qDec
sne qPtr+qX*qC , qPtr+qX*qC+qC
seq <qTab2-1 , qPtr+qX*(qC-1)+(qC-1)
jmp qDec , {qDec+2
seq qPtr+qX*(qC-2) , qPtr+qX*(qC-2)+(qC-2)
djn qDec , {qDec+2
sne qPtr+qX*qD , qPtr+qX*qD+qD
jmz.f boot , <qTab2
qDec mul.b * 2 , qPtr
qSkip sne *qTab1, @qPtr
add.b qTab2, qPtr
qLoop mov qBmb , @qPtr
qPtr mov qBmb , }qX
sub #qStep, @qSkip
djn qLoop, #qTime
jmp boot , 0
org qGo
_______________________________________________________________________________
Errata
Ah.. the joys of writing. Errata. Thanks to all who pointed out the
errors, typos, and misleading code. Here's the short list:
- After introducing the a-predecrement mode in the sne line of the decoder,
I gave as the table tab1 this:
tab1 dat foo, A1 ; \ foo and bar must be preceded
dat bar, A2 ; / by empty core.
The 'tab1' label should be on the second dat line.
- Afterwards, whenever I repeated the code for Decoder (2) I wasn't
really repeating it, because the SNE line of the decoder should have had
an a-predecrement mode in it's a-field. But it didn't, and neither did
any of the later variations of the decoder in the text.
- Similarly, the .b modifier of the add line in some later decoder
variations was missing.
*sigh*
Also, it was pointed out to me that many implementations of the qscan
contain a number of improvements that you may want to look out for.
I'd list them here but would probably have to write another errata for
the next issue, so I'll save myself the pain and rather not. :)
_______________________________________________________________________________
Questions? Concerns? Comments? Complaints? Mail them to people who care.
Beppe Bezzi <giuseppe.bezzi@galactica.it>, Philip Kendall <pak21@cam.ac.uk>,
Anton Marsden <anton@paradise.net.nz>, John Metcalf <grumpy3039@hotmail.com>
and Christian Schmidt <DrSchmidt007@aol.com>
|