This program has been disqualified.
Author | zacstewart |
Submission date | 2013-11-17 20:44:00.959309 |
Rating | 4997 |
Matches played | 6 |
Win rate | 50.0 |
import random
class Markov(object):
MAX_SUBMOVE = 3
BEATS = {
'R': 'P',
'P': 'S',
'S': 'R'
}
def __init__(self):
self.moves = []
self.reset()
def incrememnt_next_move(self, preceding_moves, move):
if not preceding_moves in self.next_moves:
self.next_moves[preceding_moves] = []
self.next_moves[preceding_moves].append(move)
def add_moves(self, moves):
move = moves[-1]
preceding_moves = moves[:-1]
self.incrememnt_next_move(preceding_moves, move)
def add_move(self, move):
self.moves.append(move)
if len(self.moves) > 1:
self.reset()
for moves in zip(*[self.moves[i:] for i in range(self.MAX_SUBMOVE)]):
self.add_moves(moves)
def reset(self):
self.next_moves = {}
def choice(self):
try:
candiate_moves = self.next_moves[tuple(self.moves[-2:])]
except KeyError:
candiate_moves = ('R', 'P', 'S')
return self.BEATS[random.choice(candiate_moves)]
if input == '':
markov = Markov()
else:
markov.add_move(input)
output = markov.choice()