Edit: This unofficial version of the game is missing AbstractSpyTreeBot.
MeasureBot maintains its lead. SimplePatternFinderBot takes second place.
Deep dive into SimplePatternFinderBot
Yonge's SimplePatternFinder can speak for itself.
if pattern != None: if pattern.IsPatternFairOrGoodForUs(): # Try and stick to it as it looks good ret = pattern.OurNext() else: # We have a problem. If it is a smart opponent we # don't want to encourage it to stick with it, on # the other hand if it is a dumb bot that will stick # with it regardless then we are better getting # something rather than nothing. It's also possible # we might not have been able to establish # co-operation yet if pattern.OurNext() >= 3: # The pattern is godd for us for at least this # move, so stick to it for now. ret = pattern.OurNext() elif (self.theirScore + pattern.GetNext())/self.turn\ >= 2.25: # Under no circumstances allow it to get too many # points from playing an unfavourable pattern ret = 3 elif self.theirMoves[-1] + self.ourMoves[-1] == 5: # If we managed to co-operate last round, # hope we can break the pattern and co-operate # this round. return self.theirMoves[-1] elif not self.hasTotalOfFiveBeenPlayed: # If the combined scores have never been 5 # before try to arrange this to see if it will # break the deadlock. ret = pattern.OurNext() elif self.round < 4 and pattern.OurNext() >= 1: # It looks like we are probably dealing with # a nasty bot. Tolerate this within limits in # the early game where it is more likely to be # a dum bot than a sophisticated bot that is # very good at exploiting us, so we at least # get something ret = pattern.OurNext() elif self.round < 8 and pattern.OurNext() >= 2: # If we would get an extra point be tolerant # for a little longer. ret = pattern.OurNext() else: # It looks like it is being completly # unreasonable, so normally return 3 # to stop us from being exploited, # but occasionally offer 2 just in case # we have managed to accidentally get # ourselves into a defect cycle against # a more reasonable bot num = random.randint(0,50) if num == 0: # Possibly this should only be done once? ret = 2 else: ret = 3
Everything so far
|Silly Chaos Bot||NPCs||Plays randomly.||4|
|Silly 4 Bot||NPCs||Always returns
|S_A||Chaos Army||"79% of the time it submits 1, 20% of the time it submits 5, 1% of the time it submits a random number between 0 and 5."||6|
|Silly 5 Bot||NPCs||Always returns
|Silly Invert Bot
|Silly 1 Bot||NPCs||Always returns
|PasswordBot||Multics||Fodder for EarlyBirdMimicBot||8|
|Definitely Not Collusion Bot||Multics||Fodder for EarlyBirdMimicBot||8|
|Silly Invert Bot 2||NPCs||Returns
|Silly Random Invert Bot||NPCs||Plays randomly on first turn. Returns
|Ben-Bot||Norm Enforcers||Collaborates with jacobjacob||9|
Rounds 10-20 will be posted on November 16, at 5 pm Pacific Time.