Warrior: phat_diet
Hill: Beginner Standard 94
Author: physsio
Redcode
;redcode-94b
;name phat_diet
;author physsio
;assert CORESIZE == 8000
;strategy phatpaper + Anti phatpaper
;strategy Picks one strategy based on previous rounds
step equ 4437
ORG start
result dat #0, #0 ;a contains result, b contains pick
score dat #0, #0 ;a contains stga score, b contains stgb score, score = wins - loss
start ldp.a #0, result
ldp.ab #1, result
ldp.a #2, score ;load stga score
ldp.ab #3, score ;load stgb score
sne.a #-1, result ;do init on first round
jmp init
jmp record
init stp.ab #100, #2 ;set initial scores equal to number of rounds to avoid negative numbers
stp.ab #100, #3
jmp pstga
record sne.a #1, result ;record the result into p space
jmp recordw
sne.a #2, result
jmp max ;was a tie don't record anything just pick next
;jmp recordl
recordl sne.ab #2, result ;record the loss.
jmp stgbl
;jmp stgal
stgal sub.a #1, score
stp.ab score, #2 ;store stga score
jmp max
recordw sne.ab #2, result ;record the win
jmp stgbw
;jmp stgaw
stgaw add.a #1, score
stp.ab score, #2 ;store stga score
jmp max
stgbw add.ab #1, score
stp.b score, #3 ;store stgb score
jmp max
stgbl sub.ab #1, score
stp.b score, #3 ;store stgb score
;jmp max
max slt.ab score, score
jmp pstga
;jmp pstgb
pstgb mov.ab #2, result
save stp.b result, #1
protect mov.i result, init
mov.i result, init+1
mov.i result, stgal+1
mov.i result, stgaw+1
mov.i result, stgbl+1
mov.i result, stgbw+1
mov.i result, save
same sne.ab #1, result
jmp paper ;stga
jmp search ;stgb
pstga mov.ab #1, result
jmp save
paper mov.ab #fin+1, #0 ;paper contains the length of the program in A
scan add.ab #step, #step ;scan is the ptr to area being scanned
jmz.f scan, @scan
slt paper, scan ;do not overwrite yourself, it may overwrite other copies
jmp scan
add.ab paper, scan ;copy back to front ending where we found data
copy mov.i <paper, <scan
jmn copy, paper
spl @scan ;spawn child
jmp paper ;repeat
p2 mov.i <-2, <-1
p3 jmn.b $-1, $-3
p6 dat $1, $1
search add.ab #step, #100
jmz.f search, @search
sne.i p2, @search
jmp kill
sne.i p3, @search
jmp kill
sne.i p6, @search
jmp findhead
jmp search
bomb spl 0, 0
findhead mov.b search, searchhead
add.ab #search-searchhead, searchhead ;adjust for relative pointer
searchhead add.ab #-2, #0
sne.i p2, @searchhead
jmp killhead
sne.i p3, @searchhead
jmp killhead
sne.i p2-1, @searchhead
jmp search
jmp searchhead
killhead mov.b searchhead, search
add.ab #searchhead-search, search ;adjust for relative pointer
jmp kill
kill mov.i bomb, @search
mov.b search, }saved
djn search, #2
clear mov.i saved, bomb ;change bomb
mov.b {saved, search ;pop stack of saved fork bombs
mov.i bomb, @search
add.ab #1, search
mov.i bomb, @search
sub.ab #1, search
jmn.a clear, saved
jmp search
saved dat #0, #0
dat 1, 1
dat 1, 1
dat 1, 1
dat 1, 1
fin dat 1, 1