Issue 78 7 November, 2000
_______________________________________________________________________________
Core Warrior is a newsletter promoting the game of corewar. Emphasis is placed
on the most active hills - currently the '94 draft hill, the beginner hill and
the '94 no-pspace hill. Coverage will follow where ever 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
The ftp site and it's mirrors are at:
ftp://ftp.csua.berkeley.edu/pub/corewar
ftp://ftp.inria.fr/INRIA/Projects/para/doligez/cw/mirror
ftp://www.koth.org/corewar
pMARS itself is also available from:
http://www.koth.org/pmars ;pMARS home page
ftp://members.aol.com/ofechner/corewar ;Fechner ftp site
Web pages are at:
http://www.koth.org/ ;KOTH
http://www.ecst.csuchico.edu/~pizza/koth ;Pizza
http://para.inria.fr/~doligez/corewar ;Planar
Newbies should check the above pages for the FAQ, language specification,
guides, and tutorials. Post questions to rec.games.corewar. All new players
are infinitely welcome!
_______________________________________________________________________________
Greetings...
It has been absolutely ages since last issue and hill activity has been
minimal. Fortunately the past few months have not been uneventful - JKW
has finally shared the code for Return of the Jedimp and organised the
Koth Fall Corewar Tournament (Kofacoto).
This issue, David Moore shows us how Combatra, his boot-distance works and
also we have the code for KafuFFLe, a defensive paper/stone.
-- John Metcalf
_______________________________________________________________________________
Current Status of the Internet Pizza Server ICWS '94 Draft Hill:
Hill Specs:
coresize: 8000
max. processes: 8000
duration: after 80,000 cycles, a tie is declared.
max. entry length: 100
minimum distance: 100
rounds fought: 200
instruction set: ICWS '94 Draft
# %W / %L / %T Name Author Score Age
1 48.9/ 41.0/ 10.0 Shapeshifter Michal Janeczek 156.8 4
2 45.7/ 46.4/ 7.9 Razor Michal Janeczek 145.0 5
3 39.8/ 34.7/ 25.5 Self-Modifying Code Ben Ford 144.8 93
4 36.2/ 29.0/ 34.8 Vilex Ken Espiritu 143.4 45
5 32.6/ 23.5/ 44.0 Uninvited John Metcalf 141.7 16
6 38.9/ 36.9/ 24.2 Recycled Bits David Moore 140.9 147
7 31.5/ 23.5/ 45.0 Mini Digitalis Christian Schmidt 139.6 0
8 40.0/ 41.1/ 18.9 Combatra David Moore 138.8 5
9 39.6/ 40.8/ 19.5 G2 David Moore 138.5 0
10 37.8/ 37.3/ 24.9 Origami Harquebus mjp 138.2 41
11 28.5/ 19.2/ 52.3 Tie Factory Christian Schmidt 137.8 19
12 25.2/ 12.9/ 61.9 Cinammon John Metcalf 137.6 18
13 29.4/ 21.4/ 49.3 nPaper II Paul-V Khuong 137.4 50
14 39.5/ 42.2/ 18.3 Pitbull Christian Schmidt 136.7 9
15 36.7/ 37.4/ 25.9 Trefoil the original Steve Gunnell 135.9 38
16 27.8/ 21.3/ 50.8 Jade Ben Ford 134.3 70
17 37.5/ 41.0/ 21.5 CrazyShot Christian Schmidt 134.0 8
18 37.9/ 41.9/ 20.2 Ultima Christian Schmidt 133.9 12
19 26.3/ 19.4/ 54.3 Stylized Euphoria Ken Espiritu 133.2 37
20 24.9/ 16.7/ 58.4 Cinammon John Metcalf 133.0 43
21 27.5/ 22.2/ 50.3 EvoP 3 Ken Espiritu 132.9 50
22 24.6/ 17.6/ 57.8 Return of the Fugitive David Moore 131.6 74
23 25.7/ 20.2/ 54.1 The Dark One Christian Schmidt 131.2 2
24 26.6/ 22.4/ 50.9 Exor Ken Espiritu 130.9 50
25 27.6/ 26.5/ 45.9 Wintermute John Metcalf 128.7 34
Age since last issue: 18 ( 12 last issue, 20 the issue before )
Days since last issue: 209 ( 121 last issue, 101 the issue before )
Average age: 34 ( 34 last issue, 28 the issue before )
Average score: 138 ( 137 last issue, 137 the issue before )
Average movement: -6.0 ( -1.5 last issue, -4.2 the issue before )
Warriors surviving: 14 ( 18 last issue, 9 the issue before )
The top 25 warriors are represented by just 9 independent authors: Schmidt
with 6, Espiritu, Moore and Metcalf with 4, Janeczek and Ford with 2. The
remaining three authors have just 1 warrior each. ( 10 authors last issue,
10 the issue before )
Shapeshifter dominates the hill by nearly 12 points, utilising a P^3 ->
dodger/stone/scanner to great effect. Janeczek's other warrior, a HSA-like
scanner by the name of Razor holds second place. Only Trefoil gains rank -
Wintermute drops furthest, from 4th to 25th.
_______________________________________________________________________________
94 - What's New (Sorted by rank and score)
# %W / %L / %T Name Author Score Age
1 47.2/ 42.2/ 10.6 Shapeshifter Michal Janeczek 152.2 1
1 44.8/ 46.8/ 8.4 Razor Michal Janeczek 142.8 0
2 39.3/ 39.0/ 21.7 Pitbull Christian Schmidt 139.5 1
4 23.4/ 12.6/ 64.0 Cinammon John Metcalf 134.2 1
5 37.3/ 41.9/ 20.8 Behemot Michal Janeczek 132.7 0
5 38.4/ 44.7/ 16.9 Brainstorm Michal Janeczek 132.2 1
6 26.0/ 21.2/ 52.8 Uninvited John Metcalf 130.9 1
7 36.5/ 40.4/ 23.0 CrazyShot Christian Schmidt 132.6 1
8 28.9/ 25.3/ 45.7 Mini Digitalis Christian Schmidt 132.5 0
8 35.8/ 41.3/ 22.9 Combatra 2667 David Moore 130.4 1
9 37.0/ 41.7/ 21.3 G2-b David Moore 132.2 1
10 35.8/ 41.9/ 22.4 Ultima Christian Schmidt 129.6 0
12 22.5/ 17.3/ 60.2 KafuFFLe John Metcalf 127.7 1
14 36.6/ 44.6/ 18.8 goonie lite David Moore 128.6 0
17 32.9/ 36.5/ 30.7 test dm 129.3 1
17 18.2/ 13.4/ 68.4 Seven John Metcalf 122.9 1
18 37.5/ 48.1/ 14.5 Nothing New... Leonardo H. Liporati 126.9 1
18 34.2/ 42.5/ 23.3 Combatra David Moore 125.9 0
18 35.8/ 48.0/ 16.2 Burn Paper, Stomp Imps David Moore 123.6 1
19 25.1/ 21.8/ 53.1 The Dark One Christian Schmidt 128.3 1
25 28.4/ 33.3/ 38.3 Ultima Christian Schmidt 123.5 1
25 19.8/ 18.7/ 61.4 Maya John Metcalf 120.9 1
Players entering hill since last issue: 5 ( 5 last issue, 7 the issue before )
Average rank of new entries: 11 ( 17 last issue, 13 the issue before )
Michal Janeczek makes an impressive hill debut. Activity has been scarce,
where is everyone?
_______________________________________________________________________________
94 - What's No More (Sorted by age)
# %W / %L / %T Name Author Score Age
26 25.2/ 29.3/ 45.5 The Stormbringer Christian Schmidt 121.1 142
26 22.4/ 25.7/ 51.9 Stonewashed Christian Schmidt 119.1 78
26 33.1/ 44.3/ 22.6 myBlur2 Paulsson 121.9 41
26 21.2/ 22.7/ 56.1 Jaguar Christian Schmidt 119.6 36
26 32.3/ 44.0/ 23.7 SnooPy P.Kline 120.6 27
26 28.9/ 33.8/ 37.4 Trefoil f Steve Gunnell 123.9 25
26 35.2/ 49.7/ 15.1 Friction Ken Espiritu 120.7 19
26 24.6/ 27.9/ 47.5 Trefoil c Steve Gunnell 121.3 16
26 36.6/ 53.5/ 9.9 Iron Curtain 3 Ken Espiritu 119.8 14
26 0.6/ 0.6/ 2.8 KafuFFLe John Metcalf 4.7 9
26 22.5/ 24.3/ 53.1 Unlucky Redcoder John Metcalf 120.8 8
26 18.8/ 19.3/ 62.0 Seven John Metcalf 118.3 7
26 36.1/ 50.2/ 13.7 Resurrection Ken Espiritu 122.0 6
26 1.9/ 1.7/ 0.4 Ultima Christian Schmidt 6.2 5
26 1.5/ 2.3/ 0.2 Combatra 2667 David Moore 4.6 5
26 35.8/ 51.0/ 13.2 Nothing New... Leonardo H. Liporati 120.7 4
26 18.3/ 18.5/ 63.2 Maya John Metcalf 118.1 4
26 2.0/ 1.1/ 0.8 test dm 6.9 3
26 34.8/ 47.3/ 17.9 goonie lite David Moore 122.4 2
26 35.0/ 49.4/ 15.6 Burn Paper, Stomp Imps David Moore 120.6 2
Paulsson, Kline and Liporati leave the hill completely. Schmidt's oldest
three warriors are pushed off.
_______________________________________________________________________________
94 - What's Old
# %W / %L / %T Name Author Score Age
6 38.9/ 36.9/ 24.2 Recycled Bits David Moore 140.9 147
3 39.8/ 34.7/ 25.5 Self-Modifying Code Ben Ford 144.8 93
22 24.6/ 17.6/ 57.8 Return of the Fugitive David Moore 131.6 74
16 27.8/ 21.3/ 50.8 Jade Ben Ford 134.3 70
13 29.4/ 21.4/ 49.3 nPaper II Paul-V Khuong 137.4 50
21 27.5/ 22.2/ 50.3 EvoP 3 Ken Espiritu 132.9 50
24 26.6/ 22.4/ 50.9 Exor Ken Espiritu 130.9 50
P-warriors Recycled Bits and Self-Modifying Code look as healthy as always.
Who will be next to enter the Hall of Fame? Will Return of the Fugitive
survive the next 4 challenges?
_______________________________________________________________________________
The Extended New Hall of Fame: * indicates the warrior is still active.
Pos Name Author Age Strategy
1 Probe Anton Marsden 403 Q^2 -> Bomber
2 Blur 2 Anton Marsden 396 Scanner
3 Damage Incorporated Anton Marsden 373 Q^2 -> Bomber
4 Return Of The Jedimp John K W 357 Q^2 -> Stone/imp
5 unrequited love kafka 346 Q^2 -> Paper
6 Impish v0.2 Ian Oversby 345 Stone/imp
7 Gigolo Core Warrior staff 332 Q^2 -> Stone/imp
8 Falcon v0.3 Ian Oversby 275 P-warrior
9 Nine Seven Six M R Bremer 232 Q^2 -> Stone/imp
10 Rosebud Beppe 218 Stone/imp
11 Newt Ian Oversby 216 Q^2 -> Stone/imp
12 Q^2 Miro Anders Ivner 214 Q^2 -> Scanner/bomber
13 Instant Wolf 3.4 Edgar 205 P-warrior
14 Goldfinch P.Kline 201 P-warrior
15 Simple v0.4b Ian Oversby 197 QScan -> Stone/imp
16 Trident^2 John K W 195 Q^2 -> Stone/imp
17 ompega Steven Morrell 189 Stone/imp
18 Frogz Franz 172 Q^2 -> Paper
19 The Machine Anton Marsden 164 Scanner
20 Memories Beppe 152 Scanner
21 Recycled Bits David Moore 147 * P-warrior
= Vain Ian Oversby 147 Q^2 -> Stone/imp
23 Head or Tail Christian Schmidt 142 Q^2 -> Paper
= The Stormbringer Christian Schmidt 142 Q^2 -> Stone/imp
25 Electric Head Anton Marsden 140 P-warrior
26 Vigor Ken Espiritu 138 Q^2 -> Paper
27 Fixed Ken Espiritu 135 Q^2 -> Paper
28 Tiberius 3.1 Franz 130 Q^2 -> Paper
29 Ultraviolet-B Ken Espiritu 120 Q^2 -> Paper
30 obvious to those who k Robert Macrae 117 Q^2 -> Paper
31 Solomon v0.8 Ian Oversby 116 Stone and scanner
32 CC Paper 3.3 Franz 107 Q^2 -> Paper
33 mrb-test M R Bremer 106 *Unknown*
34 T.N.T. pro Maurizio Vittuari 105 Bomber
= Pulp v0.5 Ian Oversby 105 Q^2 -> Paper
36 Fugitive David Moore 102 Q^2 -> Paper/imp
37 Vengeance Robert Hale 101 Q^2 -> Stone/imp
38 Jack in the box II Beppe Bezzi 100 P-warrior
= Fire and Ice David Moore 100 P-warrior
40 Oblivion Ian Sutton 99 P-warrior
41 Self-Modifying Code Ben Ford 93 * P-warrior
= Silver Talon 1.2 Edgar 93 Scanner
43 death by redcode Simon Wainwright 91 Q^2 -> Bomber
44 Bodge 1 Robert Macrae 85 Q^2 -> Scanner
45 Inferno 2.4 Philip Kendall 84 Qscan -> Bomber
46 Test Anton Marsden 83 *Unknown*
= NCC-1701-A Philip Kendall 83 P-warrior
48 RetroQ Paul Kline 82 Q^2 -> Paper
49 Tornado 4 Beppe Bezzi 78 Bomber
= Stonewashed Christian Schmidt 78 Q^3 -> Paper/stone
Stormbringer perishes, sharing it's final resting place with Head or Tail.
Stonewashed creeps onto the bottom of the hill displacing He Scans Again,
before it too perishes.
_______________________________________________________________________________
Current Status of the Internet Pizza Server Beginner Hill:
Hill Specs:
coresize: 8000
max. processes: 8000
duration: after 80,000 cycles, a tie is declared.
max. entry length: 100
minimum distance: 100
maximum age: At age 100, warriors are retired.
rounds fought: 200
instruction set: ICWS '94 Draft
# %W / %L / %T Name Author Score Age
1 51.9/ 24.7/ 23.4 MorphinMerlin Jeremy K 179.2 25
2 52.4/ 33.6/ 14.0 Grand Mal 1.1 Ransom Smith 171.2 27
3 46.9/ 34.0/ 19.1 Seek&Destroy Ayan Chakrabarti 159.8 4
4 50.7/ 42.1/ 7.3 Kenshin d Steve Gunnell 159.3 84
5 46.8/ 34.5/ 18.7 Golden Gun Ken Hubbard 159.1 98
6 45.9/ 36.3/ 17.8 Gomjabbar V Ingo S Kacza 155.6 93
7 39.7/ 26.8/ 33.5 DiHydrogen Monoxide Josh Yeager 152.6 95
8 41.9/ 32.4/ 25.8 the boy's a time bomb aCM 151.4 89
9 41.6/ 32.5/ 25.9 jollyblu aCM 150.6 97
10 28.7/ 9.2/ 62.1 PimpKing 1.0 Simon Duff 148.2 80
11 32.8/ 20.8/ 46.4 Hyper Advanced (read: sux Josef Jahn 144.8 16
12 42.6/ 40.7/ 16.8 Even More Advanced (read: Josef Jahn 144.5 31
13 40.9/ 38.5/ 20.6 Advanced Spooner Josef Jahn 143.4 29
14 39.7/ 37.8/ 22.5 Chaos John Morahan 141.5 39
15 29.1/ 19.3/ 51.6 Arkenstone John Morahan 138.9 50
16 41.0/ 43.1/ 16.0 Heatseeker John Morahan 138.8 48
17 35.3/ 33.3/ 31.5 Mob Boyz Simon Duff 137.3 81
18 27.2/ 19.7/ 53.0 Simpleton Ayan Chakrabarti 134.7 8
19 39.1/ 43.6/ 17.3 Remorseless Ayan Chakrabarti 134.6 5
20 23.4/ 16.6/ 59.9 Fangorn John Morahan 130.2 54
21 28.3/ 32.3/ 39.4 Toofan Ayan Chakrabarti 124.3 9
22 28.3/ 36.0/ 35.7 VelvetFist Ayan Chakrabarti 120.7 6
23 34.2/ 48.8/ 17.0 h1_1.red Dave Hillis 119.6 28
24 35.4/ 55.8/ 8.7 Mini John Metcalf 115.1 49
25 17.2/ 48.8/ 34.0 Pinky And The Brain Simon Glanville 85.7 1
In the 48 successful challenges since last issue, 8 warriors have achieved
retirement, 2stoned, Forgotten Lore, Caladan II, PC, Wild-Fire, da mutant,
Arsonic C and FireMaster 2.
_______________________________________________________________________________
Current Status of the KOTH.ORG '94 No Pspace Hill:
Hill Specs:
coresize: 8000
max. processes: 8000
duration: after 80,000 cycles, a tie is declared.
max. entry length: 100
minimum distance: 100
rounds fought: 250
instruction set: ICWS '94 Draft, excluding ldp and stp
# %W/ %L/ %T Name Author Score Age
1 48/ 37/ 15 Behemot Michal Janeczek 159.8 33
2 46/ 42/ 12 Eraser II Ken Espiritu 150.3 167
3 46/ 42/ 13 G2 David Moore 149.5 2
4 46/ 42/ 12 Jinx Christian Schmidt 149.1 173
5 38/ 28/ 34 Mini Digitalis Christian Schmidt 148.6 1
6 46/ 44/ 10 Stalker P.Kline 148.1 195
7 39/ 32/ 29 Blacken Ian Oversby 145.9 457
8 45/ 44/ 11 Pitbull Christian Schmidt 145.8 43
9 37/ 28/ 36 Omnibus John Metcalf 145.3 219
10 44/ 43/ 12 Zooom... John Metcalf 145.1 346
11 35/ 24/ 41 nPaper II Paul-V Khuong 144.8 210
12 34/ 25/ 41 Jade Ben Ford 143.8 279
13 45/ 46/ 10 vamp/scan test b1 Ken Espiritu 143.6 125
14 33/ 23/ 44 Uninvited John Metcalf 142.5 162
15 31/ 23/ 46 The Dark One Christian Schmidt 139.8 3
16 31/ 22/ 48 Tie Factory Christian Schmidt 139.6 61
17 31/ 23/ 45 Jaguar Christian Schmidt 139.6 197
18 40/ 42/ 18 CrazyShot Christian Schmidt 139.0 42
19 33/ 28/ 39 Experimental John Metcalf 138.3 166
20 43/ 49/ 8 Kenshin Steve Gunnell 136.7 165
Old timer Boys are Back in Town perishes age 441, allowing Blacken to claim
title of oldest warrior. Also gone are Ant Factory (268), Icen (246) and
Evop 3 (199). Janeczek has a firm grip on the hilltop, this time with his
MiniQ^3 -> Stun Bomber.
_______________________________________________________________________________
Current standings of Kofacoto:
#1 #2 #3 #4 Total #1 #2 #3 #4 Total
Janeczek : 1000 850 764 1000 : 3614 Hillis : 342 214 454 79 : 1089
Moore : 968 402 1000 886 : 3256 Yeager : 562 253 200 . : 1015
Liporati : 728 1000 749 397 : 2874 Pihlaja : 895 . . . : 895
Macrae : 989 486 636 757 : 2868 Nevermind : . 374 256 . : 630
Kline : 922 488 579 878 : 2867 Chakrabarti : 574 31 . . : 605
Schmidt : 724 444 973 620 : 2761 Adamowski : 81 67 405 . : 553
Paulsson : 977 282 529 935 : 2723 Khuong : 538 . . . : 538
Ford : 629 74 447 586 : 1736 Metcalf : . . 478 . : 478
Gunnell : 755 245 424 230 : 1654 Kacza : 345 . . . : 345
Guenzel : 713 686 . . : 1399 Ankerl : 30 197 . . : 227
Karonen : 672 185 327 . : 1184 Chin : 138 41 . 5 : 184
Stefan : 652 247 . 195 : 1094
The preliminary rounds are over with the highest ranking 8 competitors going
forward to the playoffs. Janeczek claims victory in both the White Warrior
and Hostage rounds. Liporati takes first place in the '88lp Multi-Warrior,
while Moore discovers Black Box's p-space weakness to succeed in the Black
Warrior round.
For the latest tournament info, check out the tournament's home page at:
http://www.koth.org/kofacoto
_______________________________________________________________________________
Extra Extra - Combatra by David Moore
Redcode warriors may start with 100 instructions, but when the scanners
come looking, nobody wants to be that big. Therefore, they often bootstrap
a sub-program away from their original code.
A while back in the Redcode Maniac's Tournament, Paul Kline capitalized on
this behavior in an intriguing way. Knowing the boot distances of his
scheduled opponents, his program SnowDust could search for the enormous
glob of unused code left by his opponents, and then adjust to attack
precisely the location of the booted module. Paul won that round by a
landslide.
That's a fine strategy if we know our enemy, but what if we don't have a
handy table to look up its intimate details? In the '94 hill competition,
we must find out during the battle. That can be hard work, but once those
secrets are learned, pspace allows us to remember and exploit them.
We can locate the boot code simply by scanning for it. However, learning
where the warrior actually fights is harder. Scanning for it is impossible
because executed instructions look just like non-executed ones. We have to
trick its processes into code that conveniently reveals its hideout.
What if that code was a smart bomb like this:
Bomb MOV.A #MyCode-Bomb, MyCode
...
MyCode STP.AB #0, #PspaceLocation
At the end of the round, if MyCode is non-zero then we know where the
opponent hides. Wheee!
In fact, that is how my warrior Combatra works:
;strategy Start each battle with a few quick scans. If nothing
;strategy is found, then run either a core clear or a bomber.
;strategy Otherwise, assume that Combatra found the opponent's
;strategy original 100 instructions. Probe to discover where its
;strategy processes run. Remember where everything is. Compute
;strategy the bootstrap distance. Later, a scanner finds the enemy
;strategy simply by locating its enormous boot code.
Combatra destroys many of the same warriors that SnowDust was designed to
beat: Probe, Gigolo, Impish, CIA, blue candle, and Torch.
However, its scores can vary wildly between battles of 200. Combatra's
opportunistic scan might locate the enemy in the first battle, or in the
100th. Furthermore, when fighting a multi-component warrior, such as an
imp/stone like The Stormbringer, the scores will differ depending on which
part is probed first. For example, Combatra may happily take advantage of
Stormbringer's imps, not realizing that greater rewards could be achieved
if it could find the stone. In fact, Stormbringer's imp launcher happens
to be positioned precisely 112*98 steps before its stone, so it is a great
decoy to fool the process finder. Perhaps a different design would be less
susceptible to decoys. One such alternative is included here for your
amusement (below the main warrior).
Perhaps a better boot-finding program could be made by hacking existing
warriors instead of by requiring two specialized components. That might
flatten some of the score fluctuations.
An interesting phenomenen influenced the developement of Combatra. A quick
bomber can brainwash a pspacer even without using STP bombs. The brainwash
happens when the pspacer references data that has been bombed. For
example, consider this code typical of modern pspacers:
STP.B *table, #Pstate
table JMP }1, 441
state1 DAT boot1, 882
If either table or state1 is bombed, then the pspacer will store junk data
instead of its intended data. This will happen to a P^3 switcher like
SnooPy during 5/7900 of battles with a quick bomber like Cinammon. In 200
rounds, there is an 11.9% chance that SnooPy will be brainwashed at least
once. This effect increases dramatically for slower pspacers. It's
tolerable for SnooPy, a machine that changes state quickly, but it can't
be ignored by a long-term strategist like Combatra.
One way to reduce problems is to keep the data inside of your executable
instructions as much as possible. Instead of:
STP.AB *pointer, #Pspace
try to put the data directly into the STP instruction:
STP.AB #1, #Pspace
Here's the code:
;redcode-94
;name Combatra
;author David Moore
;strategy Start each battle with a few quick scans. If nothing
;strategy is found, then run either a core clear or a bomber.
;strategy Otherwise, assume that Combatra found the opponent's
;strategy original 100 instructions. Probe to discover where its
;strategy processes run. Remember where everything is. Compute
;strategy the bootstrap distance. Later, a scanner finds the enemy
;strategy simply by locating its enormous boot code.
;assert CORESIZE==8000 && MAXLENGTH==100
org start
;----------------------------------------------------------------------
; the core clear is used either alone or with the scanner
cgate dat -1, sFirst
dat <5334, <2667
dat -1, 12
clear spl #3891, sScan ; spl #3891, 18
mov -1, >cgate
mov *-1, >cgate
djn.a -2, cgate
djn.a -3, *-1
dat 0,0
dat 0,0
dat 0,0
dat 0,0 ; scanned
sDiff equ 65 ; difference between sScan and cgate after boot
sStep equ 98
sFirst equ 1283
; Boot the scanner to take advantage of the magic number
sBoot mov <away, <where
ldp.a #pBoot, sStore
mov <away, <where
mov >clear, >sJump
djn -2, #7
sJump djn.f start+dist-3+sDiff+1, #start+dist-3+sDiff
sScan add.ab #sStep+1, @2
jmz.f sScan, <sScan-sDiff
jmz.f sScan, <sScan-sDiff ; ignore the loners
spl (-3-sDiff)+3, <(-3-sDiff) ; write over what I just found
djn.a #6, #4 ; after about 12 SPLs, change
sStore add.ab #0, -5-sDiff ; attack to hit booted opponent
dat 0,0
;----------------------------------------------------------------------
; bomber taken from Kline's Floody River and hacked
bstep equ 7829
btime equ 863
btime2 equ 420
bomb spl #bstep*2, -bstep
mov {(bomb-2)+bstep*btime2, @3-(bstep*2)*btime
mov bomb, @-1
add.x bomb, -2
djn.f -3, {-(bstep*2)*(btime-1) ; hit by SPL to start clear
mov 2, >bomb-3
djn.f -1, >bomb-3
dat <2667, 6-bomb
;----------------------------------------------------------------------
; Did I find something last time?
check ldp.a #pTroll, tab
add.a #5, tab ; ignore small numbers
tab slt.ab #0, #11
jmp compute, 9 ; (yes, go compute the boot distance)
jmp bBoot, 10 ; (no, keep trolling)
; Compile all of my information into one nice number
compute ldp.a #pQuick, diff
diff sub.a #0, tab
add.a #((start-qPtr)+tDist+5-6)-11-196, tab
stp.ab tab, #pBoot
stp.ab #6, #pMode ; run scanner next time
jmp boot, 0 ; I'm too slow to risk booting everything now
dat 0,0
dat 0,0
dat 0,0
dat 0,0 ; scanned
pMode equ 271 ; overall strategy (code for one of the 11 states)
pBoot equ 292 ; opponent's bootstrap distance
; intermediate results used to compute pBoot
pQuick equ 433 ; what cell was quickscanned
pTroll equ 454 ; what cell was occupied by the opponent
start ldp.a #0, tab
ldp.a #pMode, state
mod.ba *tab,state; current; next loss win tie
stp.b *1, #pMode ; state ; state ---- --- ---
state jmp }0, 472 ; 0 check; 472= 42*11+ 10 = 52*9+ 4 = 47*10+ 2
spl #check, 472 ; 1 check; 472= 42*11+ 10 = 52*9+ 4 = 47*10+ 2
spl #bBoot, 472 ; 2 bomb ; 472= 42*11+ 10 = 52*9+ 4 = 47*10+ 2
spl #sBoot, 943 ; 3 scan ; 943= 85*11+ 8 =104*9+ 7 = 94*10+ 3
spl #bBoot, qA ; 4 bomb ;3874=352*11+ 2 =430*9+ 4 =387*10+ 4
qTable spl #cBoot, qB ; 5 clear;2705=245*11+ 10 =300*9+ 5 =270*10+ 5
spl #sBoot, qC ; 6 scan ;1536=139*11+ 7 =170*9+ 6 =153*10+ 6
spl #sBoot, 267 ; 7 scan ; 267= 24*11+ 3 = 29*9+ 6 = 26*10+ 7
spl #sBoot, 768 ; 8 scan ; 768= 69*11+ 9 = 85*9+ 3 = 76*10+ 8
spl #sBoot, 849 ; 9 scan ; 849= 77*11+ 2 = 94*9+ 3 = 84*10+ 9
jmp #cBoot, 455 ;10 clear; 455= 41*11+ 4 = 50*9+ 5 = 45*10+ 5
;----------------------------------------------------------------------
; program intended to "troll" the enemy into revealing its location
tStep equ 98
tTime equ 2448
troll mov @0, *5
add.f 3, 4
jmz.a -2, 1
stp.ab #0, #pTroll
jmp #tStep, <-tStep
; this bomb causes my foe to report its location to me
mov.a #(-2-tStep*tTime), -2-(-2-tStep*tTime)
; quickscan got something! (presumably boot code)
tDist equ 2100 ; difference between start and troll after boot
tBoot mov <tJump, {tJump
mov <tJump, {tJump
djn -2, #3
qCalc mul.ba qTable, qPtr ; compute the scanned location
qPtr sne qX, datZero
add.a #qDiff, qPtr
stp.ab qPtr, #pQuick ; remember where I found it
stp.ab #1, #pMode ; next time, check the results
stp.ab #0, #pTroll ; forget previous troll now
tJump djn.f start+tDist+6, #troll+6 ; start trolling
bAway dat -3, bomb-(clear-3)
dat 0,0
datZero dat 0,0
dat 0,0
dat 0,0 ; scanned
bBoot add.f bAway, away ; converts clear boot into bomber boot
; note: changing the distance between qTable and qPtr affects
; both the quickscan and the pspace!
qX equ 5072
qInv equ 6831 ; inverse of qX-1 (such that (qX-1)*qInv==1)
qDiff equ 5983
qA equ (((qX+(qTable-qPtr)-2)*qInv)%CORESIZE)
qB equ (((qX+(qTable-qPtr)-1)*qInv)%CORESIZE)
qC equ (((qX+(qTable-qPtr)-0)*qInv)%CORESIZE)
cBoot sne qPtr+(qA-0)*qX, qDiff+qPtr+(qA-0)*qX
seq <qTable-1, qDiff+qPtr+(qA-1)*qX
jmp tBoot, {qCalc
sne qPtr+(qC-0)*qX, qDiff+qPtr+(qC-0)*qX
seq <qTable+1, qDiff+qPtr+(qC-1)*qX
jmp tBoot, }qCalc
sne qPtr+(qB-0)*qX, qDiff+qPtr+(qB-0)*qX
seq <qTable+0, qDiff+qPtr+(qB-1)*qX
where jmp tBoot, start+dist+5
dist equ 6942 ; distance between start and clear after boot
boot mov <away, <where
mov <away, <where
mov <away, <where
mov <away, <where
djn -4, #2
away djn.f start+dist, #clear+5
end
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;redcode-94
;name Process Finder
;author David Moore
;assert CORESIZE==8000
first equ 4104 ; 3585 ; 2587
fstep equ 911 ; 6727 ; 7699
PFIND equ 250
;bomb that writes back to fstore
fbomb mov.a #first, fstore-first
find spl #fstep , -fstep
fstore stp.ab #0 ,#PFIND
add find , fbomb
mov fbomb ,*fbomb
jmp -2 , 0
end find
_______________________________________________________________________________
Extra Extra Extra - KafuFFLe by John Metcalf
KafuFFLe is a warrior formed from two strategies commonly found running in
parallel. KafuFFLe is an example of a defensive paper/stone, such as Shadow
or Puddleglum. Take a look at Oversby's Recovery for an example of an
aggressive paper/stone.
The creation of KafuFFLe's paper was inspired by one of Liporati's tiny hill
papers, which is effective though only 7 lines long. Whether any similarity
exists between the two remains to be seen. The paper here is a low process
silk-imp.
KafuFFLe uses a .5c stone which mutates into a clear by self-bombing. This
happens in a similar way to the classic stone Carbonite. The stone's djn
co-operates with the bombing to build a decoy twice as fast.
It need not be tricky to uncover some decent constants for a paper/stone.
For KafuFFLe, I followed the traditional method of finding constants for
the paper by brute force, then placing the stone in each 'pocket' of
untouched core in turn, testing to see which was most effective. However,
comparable results can be obtained by adding a second stage of brute force
to decide where to place the stone.
Anyhow, here's the code:
;redcode-94
;name KafuFFLe
;author John Metcalf
;strategy Mini-Q^3 -> Paper/Stone
;assert CORESIZE==8000
pBoot equ pGo+501
sBoot equ pBoot-755 ; still tweaking!
org qGo
pGo: spl 1, >sBoot-2619
mov <sFrm, {sPos
spl 1, >sBoot+2759
mov <sFrm, {sPos
sPos:spl sBoot+6, >sBoot-3494 ; launch stone
mov {pap1, {pPos
mov {pap1, {pPos
pPos:djn.f pBoot+8, <sBoot-1666 ; launch paper
pStep1 equ 1312
pStep2 equ 3692
pStep3 equ 5323 ; still tweaking!
pap1:spl @0+8, <pStep1 ; paper (Nomad)
mov }pap1, >pap1
mov }pap1, >pap1
pap2:spl @0, <pStep2
mov }pap2, >pap2
mov {pap2, <pap3
pap3:spl *pStep3-4,>pStep3
mov.i #pStep2-pStep3+1,}pStep3-1
for 36
dat 0,0
rof
sStp equ 703
sTim equ 1183
sFrm:spl #0, #0+6 ; stone (Uninvited)
sLp: mov sBmb, @sPtr
sSel:sub.x #sStp*2, @sLp
sPtr:mov {3582, }sSel+2*sStp*sTim
djn.f @sSel, }sPtr
sBmb:dat <sStp, >1
qf equ qKil ; Mini-Q^3
qs equ 222
qd equ 322
qi equ 7
qr equ 11
qGo: seq qd+qf+qs, qf+qs ; 1
djn.f qSki, {qd+qf+qs+qi
seq qd+qf+6*qs, qf+6*qs ; B
djn.f qFas, {qd+qf+6*qs+qi
seq qd+qf+5*qs, qf+5*qs ; B-1
jmp qFas, <qBmb
seq qd+qf+7*qs, qf+7*qs ; B+1
jmp qFas, >qBmb
seq qd+qf+9*qs, qf+9*qs ; A-1
djn qFas, {qFas
seq qd+qf+10*qs, qf+10*qs ; A
jmn qFas, {qFas
seq qd+qf+3*qs, qf+3*qs ; C
djn.f >qFas, {qd+qf+3*qs+qi
seq qd+qf+2*qs, qf+2*qs ; C-1
jmn >qFas, {qSlo
seq qd+qf+4*qs, qf+4*qs ; C+1
jmn >qFas, }qSlo
seq qd+qf+12*qs, qf+12*qs ; B*C-B
jmn qSlo, {qSlo
seq qd+qf+15*qs, qf+15*qs ; B*C-C
jmp qSlo, <qBmb
seq qd+qf+21*qs, qf+21*qs ; B*C+C
jmp qSlo, >qBmb
seq qd+qf+24*qs, qf+24*qs ; B*C+B
jmn qSlo, }qSlo
seq qd+qf+27*qs, qf+27*qs ; A*C-C
djn qSlo, {qFas
seq qd+qf+30*qs, qf+30*qs ; A*C
jmn qSlo, {qFas
sne qd+qf+18*qs, qf+18*qs ; B*C
jmz.f pGo, qd+qf+18*qs-10
qSlo:mul #3, qKil ; C=3
qFas:mul.b qBmb, @qSlo
qSki:sne >qf+23*qs, >qKil
add #qd, qKil
qLoo:mov *qKil, <qKil
qKil:mov qBmb, }qs
sub #qi-1, @qLoo
djn qLoo, #qr
djn.f pGo, <10 ; A=10
qBmb:dat {qi*qr-10, {6 ; B=6
end
_______________________________________________________________________________
Errata
In Core Warrior 70, the summary of the P^3 result incorrectly switched
"even" and "odd". The correct text for lines 705-6 should read:
j = (i+1+m)/2 if i is odd
j = i/2 if i is even
_______________________________________________________________________________
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 <schmidt@mail.uni-mainz.de>
|