### Intro

CoreWar is a programming game which can be roughly compared to chess in terms of depth and rule simplicity. Player-created programs wage war in the cold space of core memory. A game of innumerable possibilities: what you can create is limited only by your skill and imagination. More information can be found at corewar.co.uk and corewar.info.

### Rankings

Calculating good warrior rankings is a non-trivial problem. Imagine that there is a small number of strong and a large number of weak warriors. If we consider all warriors ever published, this is indeed the case. Now if we just calculate the "flat", average round-robin scores, results against weak warriors will have the largest impact. Flat score is therefore not a good indicator of a warrior strength, as it fails to reflect the competition within the elite group. As a consequence, it introduces strategy biases. Some replicators are unjustly penalized because they produce a relatively large amount of ties against weak warriors. For example, pdQscan - one of the strongest 94nop papers, is only ranked 237th by the flat scoring. Clearly, scores against stronger warriors should have more weight.

But what form of weights should be used? Imagine a warrior that always scores 100 points (all ties). Subjectively, it is a weak warrior and its weight should be zero. Most obvious continuous function that satisfies this requirement is W = Max(Score - 100, 0). With this form of weighting, there can be any number of weak sub-100 warriors, and they won't influence the ranking at all. Similarly to the Koenigstuhl's recursive ranking, the scoring scheme is applied iteratively until the scores converge.

Another method is based on sequential push off. Consider a hill with a constantly shrinking size. At each iteration, warrior with the lowest average score against the hill is removed and its rank is saved. The process is repeated until there is only one warrior left. A big advantage of this method is that it properly reflects the balance between different strategies, because the shrinking hill is self-balancing. A disadvantage is that the ranking becomes less meaningful near the top. As the number of warriors decreases, the ranking becomes more chaotic and luck-based. Moreover, the method is unstable and can produce significantly different results if just one warrior is added or removed from the initial list. To improve stability, the following modification is employed. A number of subrankings equal to the number of warriors is created. Each subranking is calculated with one warrior removed. The final ranking is an average of all the subrankings.

Rankings are based on the scores taken from Koenigstuhl.

Iterative weighting | Sequential push off | Last updated |
---|---|---|

94nop | 94nop | 2015.08.04 |

88 | 88 | 2015.03.16 |

LP | LP | 2015.03.18 |

Tiny | Tiny | 2015.08.03 |

Nano | Nano | 2015.03.16 |

X | X | 2015.01.31 |

ICWS | ICWS | 2015.01.31 |

1SH | Oneshot |

CDS | Clear-directing scanner |

SCN | Scanner |

DOD | Dodger |

PAP | Paper |

IMP | Imp |

STN | Stone |

BMB | Stun or other bomber |

VMP | Vampire |

PSP | P-Spacer |

/ | Hybrid |

+ | Parallel |

-> | Sequential |

| | Either / or |

### Misc

Tiny Stone Challenge results

CoreOps newsletter. Special thanks to Anton Shepelev for layout and formatting.

94nop warrior map created with multidimensional scaling. Distance measure between two warriors is based on differences of their scores against other warriors.

Randy - a configurable random number generator for CoreWar constant optimization.