; -+REPLICATE+-
; *JAM* 1997
mov 7, 8
add 6, 6
mov #8, -3
mov @-4, <5
djn -1, -5
spl -5
jmp @2
dat -10
Tuesday, 1 July 2008
Replicate - My First Corewar Warrior
I've been searching through some ancient printouts recently and discovered my first ever Corewar program. I remember testing this on Stefan Strack's CoreWar Pro. I didn't have a clue whether or not it was any good, but at least it seemed to work! Can you remember your first warrior?
Saturday, 31 May 2008
An Improved '88 Quick-scanner
After reading how Paul Kline's slowQscan achieves extra scans, I wondered how well a similar technique would work in '88 Standard Redcode. Previously published '88 quick-scanners include:
- Quicksilver '88 - 24 scans in 36 instuctions
- Vala - 30 scans in 45 instuctions
- Matreshka Rulez! - 37 scans in 56 instructions
qfirst equ (qp2+2*qstep) qdist equ qfirst+111 qstep equ 222 qi equ 7 qr equ 7 qbomb dat <qi/2-qi*qr, <qi*qr-qi/2 qa equ qstep*16 qb equ qstep*5+2 qc equ qstep*10 qd equ qstep*2 qe equ qstep*1 qgo cmp qdist+qc, qfirst+qc jmp qfast, <qa cmp qdist+qe+qd, qfirst+qe+qd qp1 jmp <qfast, <qc qp2 cmp qdist, qfirst qp3 jmp qskip, <qe cmp qdist+qb, qfirst+qb q1 djn qfast, #qp1 cmp qdist+qd+qc, qfirst+qd+qc jmp qslow, <qfirst+qd+qc+4 cmp qdist+qd+qb, qfirst+qd+qb x1 jmp qslow, <q1 cmp qdist+qc+qc, qfirst+qc+qc q2 djn qslow, #qp2 cmp qdist+qd, qfirst+qd jmp qslow, <qfast cmp qdist+qa, qfirst+qa jmp q1, <q1 cmp qdist+qa+qd, qfirst+qa+qd jmp x1, <q1 cmp qdist+qc+qb, qfirst+qc+qb jmp q2, <q1 cmp qdist+qe+qd+qc,qfirst+qe+qd+qc jmp qslower, <qfirst+qe+qd+qc+4 cmp qdist+qe+qd+qb,qfirst+qe+qd+qb jmp qslower, <q1 cmp qdist+qe+qc+qc,qfirst+qe+qc+qc jmp qslower, <q2 cmp qdist+qd+qd+qc,qfirst+qd+qd+qc q3 djn qslower, #qp3 cmp qdist+qe+qc, qfirst+qe+qc jmp <qfast, <q2 cmp qdist+qd+qd, qfirst+qd+qd jmp <qfast, <q3 cmp qdist+qd+qd+qb,qfirst+qd+qd+qb slt <q3, <q1 jmz pgo, qdist+qe+qd+qc+10 qslower add @q3, @qslow qslow add @q2, qkil qfast add @q1, @qslow qskip cmp <qdist+qstep+50, @qkil jmp qloop, <1234 add #qdist-qfirst, qkil qloop mov qbomb, @qkil qkil mov <qfirst+qstep+50, <qfirst sub #qi, @qloop djn qloop, #qr+2 pgo end qgo
Labels:
corewar,
qscan,
quick-scan,
redcode
Wednesday, 14 May 2008
x^n (mod CORESIZE) in Redcode
The following code implements the binary method to calculate x^n (mod CORESIZE) in Redcode. For calculations with n > 13, the binary method out-performs a simple loop.
power mov #1, _powerr
_powloop mov.b _powern, temp
mod #2, temp
seq.b temp, #0
mul.b _powerx, _powerr
mul.b _powerx, _powerx
div #2, _powern
jmn _powloop, _powern
_powern dat n
_powerx dat x
_powerr dat 1
Monday, 28 April 2008
Binary Search in Redcode
Binary search is an algorithm to find a value in a sorted list. Binary search finds the center element of the list and compares it to the target value.
If the target value is higher than the value of the center element, all elements below the center element can be eliminated from the search. Otherwise, all elements above the center element can be eliminated.
The search is then repeated on the remaining elements. In this way, binary search reduces the search space by 50% on each iteration. In Redcode, binary search is more efficient than linear search for lists of 38 or more elements.
The input parameters required are as follows:
If the target value is higher than the value of the center element, all elements below the center element can be eliminated from the search. Otherwise, all elements above the center element can be eliminated.
The search is then repeated on the remaining elements. In this way, binary search reduces the search space by 50% on each iteration. In Redcode, binary search is more efficient than linear search for lists of 38 or more elements.
The input parameters required are as follows:
- size - the number of elements
- bot - a pointer to the top of the sequence
- find - the target value to find
nop <bot, >size
_bsnext mov.b size, ptr
div #2, ptr
jmn _bscont, ptr
mov.b bot, ptr
jmp notfound, >ptr
_bscont add.b bot, ptr
slt @ptr, find
jmp _bstopadj
add.b bot, size
sub.b ptr, size
mov.b ptr, bot
jmp _bsnext
_bstopadj sne.b @ptr, find
jmp found
div #2, size
jmp _bsnext
Labels:
algorithm,
binary search,
logarithmic search,
redcode,
search
Subscribe to:
Posts (Atom)