| Author | Tay Li | 
| Submission date | 2013-03-04 03:42:49.326487 | 
| Rating | 7172 | 
| Matches played | 702 | 
| Win rate | 74.36 | 
Use rpsrunner.py to play unranked matches on your computer.
import random, math
K = 3
CAP = 3 ** (2 * K) + 3
def win (a, b):
    return (a + 1) % 3 == b
def prob_choose (cur):
    tchoice = cur[0] + cur[1] + cur[2]
    seed = random.randint (0, tchoice - 1)
    if (seed < cur[0]):
	return 0
    elif (seed < cur[0] + cur[1]):
	return 1
    else:
	return 2
def best_choose (cur):
    if (cur[0] > cur [1] and cur[0] > cur[2]):
	return 0
    elif (cur[1] > cur[2]):
	return 1
    else:
	return 2
#make array of moves for given state and randomly sample from those moves
def move (a):
    global output
    output = state [a]
    mymove.append (a)
def get_key (a):
    key = 0
    for i in range (a, a + K):
	key = 9 * key + 3 * mymove [i] + oppmove [i]
    return key
if input == "":
    state = ["R","S","P"]
    counter = ["P", "R", "S"] 
    st = [0,1,2]
    cntr = [2,0,1]
    sdic = {"R":0, "S":1, "P":2}
    freq = [[1 for j in range (3)] for i in range (CAP)]
    mymove = []
    oppmove = []
else:
    oppmove.append (sdic[input])
    #assert len (oppmove) == len (mymove) and len (oppmove) == N
N = len (oppmove)
if (N > K):
    freq [get_key (N - K - 1)][sdic[input]] += 1
    cur = freq [get_key (N - K)]
    
    mv = cntr [prob_choose (cur)]
    move (mv)
else:
    move (random.randint (0,2))