Author | ARST |
Submission date | 2017-07-08 06:01:34.337380 |
Rating | 6412 |
Matches played | 350 |
Win rate | 62.29 |
Use rpsrunner.py to play unranked matches on your computer.
if input == "":
import random
import collections
random.seed()
RPS = ['R', 'P', 'S']
COUNTERS = {'R':'P', 'P':'S', 'S':'R', '':''}
inputs = []
def bestOfThree(alg):
most_common = collections.Counter((alg(), alg(), alg())).most_common()[0]
if most_common[1] >= 2:
return most_common[0]
else:
return alg()
def a1():
return COUNTERS[random.choice(inputs[-200:])]
def a2():
return COUNTERS[random.choice(inputs[-50:])]
def a3():
return COUNTERS[random.choice(inputs[-10:])]
def a4():
return bestOfThree(a1)
def a5():
return bestOfThree(a2)
def a6():
return bestOfThree(a3)
def leftHandScore(left, right):
if left == COUNTERS[right]:
return 1
elif COUNTERS[left] == right:
return -1
else:
return 0
algs = (a5, a4, a6, a2, a1, a3)
last_outputs = [''] * len(algs)
score_lists = [[]] * len(algs)
output = random.choice(RPS)
else:
inputs.append(input)
best_score = -9999
for i in range(len(algs)):
score_lists[i].append(leftHandScore(last_outputs[i], input))
last_outputs[i] = algs[i]()
recent_score_sum = sum(score_lists[i][-10:])
if recent_score_sum > best_score:
best_score = recent_score_sum
best_index = i
if len(inputs) < 10 or random.random() < 0.8:
output = random.choice(RPS)
else:
output = last_outputs[best_index]