;redcode-94nop ;name No 3735928559 ;author Jens Gutzeit ;strategy qscan -> stone/clear ;assert CORESIZE == 8192 ORG qGo ;; ;; boot ;; cAway EQU 3765 ; boot distance of clear csDist EQU 80 ; distance between clear and stone dat.f 0, < qb1 boot spl 1, < qb2 ; create 3 processes mov.i -1, # qb3 mov.i < cBoot, { cBoot ; copy clear mov.i < cBoot, { cBoot mov.i < sBoot, { sBoot ; copy stone away mov.i < sBoot, { sBoot sBoot spl cAway+csDist, stone + 6 ; boot stone cBoot jmp cAway, cBomb + 2 ; boot clear for 10 dat.f 0, 0 rof ;; ;; clear ;; cDist EQU 102 cPtr EQU (clear-cDist) cGate EQU (clear-80) clear spl # 0, < cGate cThrow mov.i cBomb, > cPtr mov.i cBomb, > cPtr djn.f cThrow, > cPtr cBomb dat.f < 1, # 2*cDist for 10 dat.f 0, 0 rof ;; ;; stone ;; sBomb EQU stone sTarget EQU 100 sStep EQU 3576 ; mod-8 sGate EQU (stone-csDist-80+1) stone spl # 0, < sGate sThrow mov.i sBomb, sTarget add.ab # sStep, sThrow jmp sThrow, < sGate for 14 dat.f 0, 0 rof empty dat.f 0, 0 dat.f empty, qa1 qTab1 dat.f empty, qa2 for 9 dat.f 0, 0 rof ;; ;; quickscanner ;; qTab2 EQU boot qTab3 EQU qBomb qm EQU 5902 qM EQU 4037 ;; qM * (qm-1) = 1 mod 8192 qa1 EQU (((qTab1-1-found)*qM+1) % CORESIZE) qa2 EQU (((qTab1 -found)*qM+1) % CORESIZE) qb1 EQU (((qTab2-1-found)*qM+1) % CORESIZE) qb2 EQU (((qTab2 -found)*qM+1) % CORESIZE) qb3 EQU (((qTab2+1-found)*qM+1) % CORESIZE) qc2 EQU (((qTab3 -found)*qM+1) % CORESIZE) qGo ; q0 mutations sne.i found+qm*qc2, found+qm*qc2+qb2 seq.i < qTab3, found+qm*(qc2-1)+qb2 jmp q0, } q0 sne.i found+qm*qa1, found+qm*qa1+qb2 seq.i < (qTab1-1), found+qm*(qa1-1)+qb2 djn.a q0, { q0 sne.i found+qm*qa2, found+qm*qa2+qb2 seq.i < qTab1, found+qm*(qa2-1)+qb2 jmp q0, { q0 ;; q1 mutations sne.i found+qm*qb1, found+qm*qb1+qb1 seq.i < (qTab2-1), found+qm*(qb1-1)+(qb1-1) jmp q0, { q1 sne.i found+qm*qb3, found+qm*qb3+qb3 seq.i < (qTab2+1), found+qm*(qb3-1)+(qb3-1) jmp q0, } q1 ;; no mutation sne.i found+qm*qb2, found+qm*qb2+qb2 seq < qTab2, found+qm*(qb2-1)+(qb2-1) jmp q0, < found+qm*qb2 ;; qm mutation seq.i > found, found+qm+(qb2-1) jmp qSelect, < found ;; q0 mutation seq.i found+(qm+1)*(qc2-1), found+(qm+1)*(qc2-1)+(qb2-1) jmp q0, } q0 seq.i found+(qm+1)*(qa2-1), found+(qm+1)*(qa2-1)+(qb2-1) jmp q0, { q0 seq.i found+(qm+1)*(qa1-1), found+(qm+1)*(qa1-1)+(qb2-1) djn.a q0, { q0 ;; no mutation (free scan) jmz.f boot, found+(qm+1)*(qb2-1)+(qb2-1) ;; decoder q0 mul.b * q1, found qSelect sne { qTab1, @ found q1 add.b qTab2, found ;; bombing engine VI qOffset EQU -86 qTimes EQU 19 ; number of bombs to throw qStep EQU -7 ; distance between bombs throw mov.i qTab3, @ found found mov.i qBomb, } qm sub # qStep, found djn throw, # qTimes jmp boot qBomb dat.f > qOffset, > qc2 END