| Author | csko | 
| Submission date | 2012-07-26 03:08:23.740210 | 
| Rating | 3083 | 
| Matches played | 795 | 
| Win rate | 29.43 | 
Use rpsrunner.py to play unranked matches on your computer.
from collections import defaultdict
def beats(x):
    if x == 'rock':
        return 'paper'
    elif x == 'paper':
        return 'scissors'
    elif x == 'scissors':
        return 'rock'
def tr(x):
    return {'R': 'rock', 'P': 'paper', 'S': 'scissors'}[x]
def untr(x):
    return {'rock': 'R', 'paper': 'P', 'scissors': 'S'}[x]
if input == "":
    input2 = []
    output = "R"
else:
    n = 7
    freqs = defaultdict(int)
    input2.append(tr(input))
    if len(input2) < n:
        output = "R"
    else:
        freqs[tuple(input2[~(n-1):])] += 1
        movestats = [(freqs[tuple(moves)], moves[-1]) for moves in [input2[~(n-2):] + [move] for move in ['rock', 'paper', 'scissors']]]
        r = beats(max(movestats)[1])
        output = untr(r)