Banyak orang menganggap RPS sebagai permainan peluang. Jika kedua pemain bermain tanpa terduga, strategi terbaik adalah bermain secara acak. Namun, mari kita perkenalkan sedikit hal yang dapat diprediksi.
Setiap bot akan memiliki kesempatan untuk memberi tahu bot lain apa yang akan dimainkan secara bersamaan. Lalu ada jeda di mana setiap bot akan tahu apa yang diumumkan pemain lain. Jika ia memainkan senjata itu, ia mengumumkan akan mencetak satu poin di samping poinnya untuk menang kalah atau seri.
Kemenangan bernilai dua poin, satu imbang, satu poin, dan kehilangan 0 poin.
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
Adalah kepentingan terbaik Anda untuk jujur (tetapi juga untuk memastikan lawan Anda tidak percaya Anda).
Pertandingan akan dimainkan dalam format round robin, dan tujuannya adalah untuk memaksimalkan skor total Anda sendiri di pertandingan yang Anda mainkan.
Format I / O:
- Bot Anda akan menjadi fungsi Python 2.7 yang mengambil 4 argumen, dan harus memiliki nama unik (yang akan digunakan untuk mewakili kiriman Anda).
- Dua argumen pertama akan selalu, secara berurutan: gerakan masa lalu lawan, diikuti dengan gerakan masa lalu Anda. Ini akan menjadi daftar secara berurutan dari babak pertama hingga babak terbaru, dengan setiap indeks berisi daftar dengan gerakan yang diklaim akan dibuat lawan, diikuti dengan gerakan yang benar-benar mereka buat.
- Dua argumen berikutnya akan memungkinkan bot Anda untuk menentukan apakah ini putaran "jujur" atau putaran "nyata". Jika itu adalah babak "jujur", keduanya akan menjadi Tidak Ada. Jika itu adalah babak "nyata", mereka akan, secara berurutan, gerakan yang dinyatakan lawan Anda akan dibuat, diikuti oleh langkah yang Anda nyatakan akan Anda buat.
- Semua argumen atau bagian dari argumen yang mewakili gerakan akan menggunakan "R", "P", dan "S" untuk masing-masing mewakili batu, kertas, dan gunting.
- Fungsi Anda harus mengembalikan "R" untuk rock, "P" untuk kertas, atau "S" untuk gunting. Bot yang memiliki kemampuan untuk mengembalikan nilai lain akan didiskualifikasi.
- Setiap bot akan dijalankan melawan setiap bot lainnya 200 kali, dan itu sendiri 100 kali. Tujuannya adalah menjadi bot dengan poin terbanyak di akhir kompetisi.
- Berkenaan dengan diskusi dalam komentar, pengiriman tidak boleh membaca dari atau menulis ke file apa pun, atau dengan cara apa pun menyabotase atau membaca kode lawan.
Contoh:
Ini adalah empat contoh bot yang saya kumpulkan dengan cepat. Mereka akan bergabung dengan kompetisi sebagai bot tambahan. Jika Anda kalah dari yang terakhir, Anda memiliki beberapa pekerjaan yang harus dilakukan.
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"])
Pengendali:
Dan inilah pengontrol yang akan saya gunakan. Kiriman baru akan diimpor di awal dan ditambahkan ke kamus 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
Skor Akhir:
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