Muitas pessoas consideram o RPS um jogo de sorte. Se ambos os jogadores jogam imprevisivelmente, a melhor estratégia é jogar aleatoriamente. No entanto, vamos apresentar um pouco de previsibilidade.
Cada bot terá a chance de dizer ao outro bot o que será reproduzido simultaneamente. Depois, há uma pausa em que cada bot saberá o que o outro jogador anunciou. Se jogar essa arma, anunciou que marcará um ponto, além dos pontos, por perda ou empate.
Uma vitória vale dois pontos, um empate, um ponto e uma perda de 0 pontos.
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
É do seu interesse ser honesto (mas também para garantir que seu oponente não acredite em você).
As partidas serão disputadas no formato round robin, e o objetivo será maximizar sua própria pontuação total nas partidas que você jogar.
Formato de E / S:
- Seu bot será uma função Python 2.7 que recebe 4 argumentos e deve ter um nome exclusivo (que será usado para representar sua submissão).
- Os dois primeiros argumentos sempre serão, em ordem: os movimentos passados do oponente, seguidos pelos movimentos passados. Essa será uma lista da ordem da primeira à rodada mais recente, com cada índice contendo uma lista com a jogada que o oponente afirmou que faria, seguida pela jogada que realmente fez.
- Os próximos dois argumentos permitirão ao seu bot determinar se esta é uma rodada "honesta" ou uma rodada "real". Se for uma rodada "honesta", os dois serão Nenhum. Se for uma rodada "real", eles serão, em ordem, o lance que o seu oponente declarou que faria, seguido pelo lance que você declarou que faria.
- Todos os argumentos ou partes de argumentos que representam movimentos usarão "R", "P" e "S" para representar pedra, papel e tesoura, respectivamente.
- Sua função deve retornar um "R" para pedra, um "P" para papel ou um "S" para tesoura. Os robôs que têm a capacidade de retornar outros valores serão desqualificados.
- Cada bot será executado 200 vezes contra todos os outros bot e 100 vezes. O objetivo é ser o bot com mais pontos no final da competição.
- No que diz respeito à discussão nos comentários, as submissões não podem ser lidas ou gravadas em nenhum arquivo, nem sabotar ou ler o código do oponente.
Exemplos:
Estes são quatro exemplos de bots que eu montei rapidamente. Eles entrarão na competição como bots adicionais. Se você perder para o último, terá algum trabalho a fazer.
def honestpaper(I,dont,care,about_these):
return "P"
def honestrock(I,dont,care,about_these):
return "R"
def honestscissors(I,dont,care,about_these):
return "S"
import random
def randombot(I,dont,care,about_these):
return random.choice(["R","P","S"])
Controlador:
E aqui está o controlador que eu vou usar. Novos envios serão importados no início e adicionados ao dicionário bot_map.
from honestrock import honestrock
from honestpaper import honestpaper
from honestscissors import honestscissors
from randombot import randombot
bot_map = {
0:honestrock, 1:honestpaper, 2:honestscissors, 3:randombot
}
player_num=len(bot_map)
def real(history1,history2,number,honest1,honest2):
return bot_map[number](history1,history2,honest1,honest2)
def honest(history1,history2,number):
return bot_map[number](history1,history2,None,None)
def play_match(num1,num2):
history1=[]
history2=[]
score1=0
score2=0
for x in range(250):
h1=honest(history2,history1,num1)
h2=honest(history1,history2,num2)
r1=real(history2,history1,num1,h2,h1)
r2=real(history1,history2,num2,h1,h2)
if h1==r1: score1+=1
if h2==r2: score2+=1
if r1==r2: score1+=1; score2+=1
elif r1=="R":
if r2=="P": score2+=2
else: score1+=2
elif r1=="P":
if r2=="S": score2+=2
else: score1+=2
else:
if r2=="R": score2+=2
else: score1+=2
history1.append([h1,r1])
history2.append([h2,r2])
return score1,score2
scores = []
for x in range(player_num):
scores.append(0)
for _ in range(100):
for x in range(player_num):
for y in range(player_num):
scorex,scorey=play_match(x,y)
scores[x]+=scorex
scores[y]+=scorey
for score in scores:
print score
Pontuações finais:
csbot 3430397
thompson 3410414
rlbot 3340373
have_we_been_here_before 3270133
mason 3227817
deepthought 3019363
adaptive_bot 2957506
THEbot 2810535
dontlietome 2752984
irememberhowyoulie 2683508
learningbot4 2678388
betrayal 2635901
averager 2593368
honestrandom 2580764
twothirds 2568620
mirrorbot 2539016
tit4tat 2537981
honestscissors 2486401
trusting_bot 2466662
rotate_scissors 2456069
rotate_paper 2455038
rotate_rock 2454999
honestpaper 2412600
honestrock 2361196
rockBot 2283604
trustingRandom 2266456
user5957401bot 2250887
randombot 2065943
Dx 1622238
liarliar 1532558
everybodylies 1452785