यह कार्य प्रथम आवधिक प्रीमियर प्रोग्रामिंग पहेली पुश का हिस्सा है और इसे नए राजा-ऑफ-द-हिल चुनौती-प्रकार के प्रस्ताव के प्रदर्शन के रूप में अभिप्रेत है ।
कार्य अन्य कैदियों की तुलना में बेहतर कैदी की दुविधा को खेलने के लिए एक कार्यक्रम है।
देखो, विन्नी। हम आपके सेलमेट को जानते हैं --- उसका नाम क्या है? हाँ McWongski, निप्पो-आयरिश-उक्रानियन डकैत - कुछ करने के लिए है और आप जानते हैं कि यह क्या है।
हम यहाँ अच्छा बनने की कोशिश कर रहे हैं, विन्नी। Givin 'तुम एक मौका।
यदि आप हमें बताते हैं कि वह क्या है तो हम देखेंगे कि आपको एक अच्छा काम मिलेगा।
और अगर तुम नहीं ...
खेल के नियम
- प्रतियोगिता में एक समय में दो प्रतियोगियों की एक पूर्ण राउंड-रॉबिन (सभी संभव जोड़ी) शामिल होती है (आत्म नाटकों सहित)।
- प्रत्येक जोड़ी के बीच 100 राउंड खेले जाते हैं
- प्रत्येक राउंड में प्रत्येक खिलाड़ी को दूसरे खिलाड़ी के साथ सहयोग करने या उन्हें धोखा देने के बीच चुनने के लिए कहा जाता है, इस मामले में अन्य खिलाड़ियों के इरादों को जाने बिना, लेकिन इस प्रतिद्वंद्वी के खिलाफ खेले गए पिछले राउंड के परिणामों की स्मृति के साथ।
- संयुक्त पसंद के आधार पर प्रत्येक दौर के लिए अंक प्रदान किए जाते हैं। यदि दोनों खिलाड़ी सहयोग करते हैं तो उन्हें प्रत्येक 2 अंक मिलते हैं। पारस्परिक विश्वासघात 1 अंक देता है। मिश्रित मामले में, विश्वासघात करने वाले खिलाड़ी को 4 अंक दिए जाते हैं और कूपर को 1 से दंडित किया जाता है।
- एक "आधिकारिक" मैच जल्द ही नहीं चलाया जाएगा जो सभी प्रस्तुतियाँ मुझे काम करने के लिए मिल सकती हैं और "स्वीकृत" विजेता का चयन करने के लिए उपयोग किए जाने के 10 दिनों के बाद किया जाएगा। मेरे पास Mac OS 10.5 बॉक्स है, इसलिए POSIX समाधान काम करना चाहिए, लेकिन ऐसे linuxisms हैं जो नहीं करते हैं। इसी तरह, मुझे win32 एपीआई के लिए कोई समर्थन नहीं है। मैं चीजों को स्थापित करने के लिए एक मूल प्रयास करने को तैयार हूं, लेकिन एक सीमा है। किसी भी तरह से मेरे सिस्टम की सीमाएं स्वीकार्य प्रतिक्रियाओं की सीमाओं का प्रतिनिधित्व करती हैं, बस उन्हें "ऑफिकल" मैच में शामिल किया जाएगा।
प्रोग्रामर का इंटरफ़ेस
- प्रविष्टियां उन कार्यक्रमों के रूप में होनी चाहिए जिन्हें कमांड लाइन से चलाया जा सकता है; मानक आउटपुट पर प्रोग्राम का आउटपुट (एकमात्र!) होना चाहिए। इस प्रतिद्वंद्वी के साथ पिछले दौर के इतिहास को कमांड-लाइन तर्क के रूप में प्रस्तुत किया जाएगा।
- आउटपुट या तो "c" ( क्लैम अप के लिए ) या "t" ( सभी को बताने के लिए ) है।
- इतिहास वर्णों का एक एकल तार है जो पिछले दौरों का प्रतिनिधित्व करता है जिसमें सबसे हाल के दौर स्ट्रिंग में जल्द से जल्द आ रहे हैं। अक्षर हैं
- "के" ( विश्वास के लिए परस्पर सहयोग रखने के लिए)
- "आर" ( चूहे के लिए b @ st @ rd ने मुझे बेच दिया! )
- "एस" ( चूसने वाले के लिए! मतलब आपको विश्वासघात से फायदा हुआ)
- "ई" ( हर कोई आपसी विश्वासघात पर नंबर एक की तलाश में है)
कोष्ठक
चार खिलाड़ी लेखक द्वारा प्रदान किए जाएंगे
- परी - हमेशा सहयोग करती है
- शैतान - हमेशा बात करता है
- टिटफॉरटैट - पहले राउंड में सहयोग करता है, फिर हमेशा वैसा ही करता है जैसा कि आखिरी राउंड में किया गया था
- यादृच्छिक - 50/50
जिसके लिए मुझे वे सभी प्रविष्टियाँ मिलेंगी जो मुझे चलाने के लिए मिल सकती हैं।
कुल स्कोर सभी विरोधियों (केवल एक बार स्व-नाटकों सहित और औसत स्कोर का उपयोग करके) के खिलाफ कुल स्कोर होगा।
प्रवेशकों
(वर्तमान 2 मई 2011 7:00 बजे तक)
सीक्रेट हैंडशेक | एंटी- T42T मिसाइल | अविश्वास (संस्करण) | एंटी हैंडशेक | द लिटिल लिस्पर | अभिसरण | शार्क | प्रोबाइमैटिक | पावलोव - विन स्टे, लूज स्विच | चोरों के बीच सम्मान | मदद पिशाच | ड्र्यूड | छोटी सी शेमर | बाईगोन | दो टाट के लिए टाइट | सरलटन |
गणक
#! /usr/bin/python
#
# Iterated prisoner's dilemma King of Hill Script Argument is a
# directory. We find all the executables therein, and run all possible
# binary combinations (including self-plays (which only count once!)).
#
# Author: dmckee (https://codegolf.stackexchange.com/users/78/dmckee)
#
import subprocess
import os
import sys
import random
import py_compile
###
# config
PYTHON_PATH = '/usr/bin/python' #path to python executable
RESULTS = {"cc":(2,"K"), "ct":(-1,"R"), "tc":(4,"S"), "tt":(1,"E")}
def runOne(p,h):
"""Run process p with history h and return the standard output"""
#print "Run '"+p+"' with history '"+h+"'."
process = subprocess.Popen(p+" "+h,stdout=subprocess.PIPE,shell=True)
return process.communicate()[0]
def scoreRound(r1,r2):
return RESULTS.get(r1[0]+r2[0],0)
def runRound(p1,p2,h1,h2):
"""Run both processes, and score the results"""
r1 = runOne(p1,h1)
r2 = runOne(p2,h2)
(s1, L1), (s2, L2) = scoreRound(r1,r2), scoreRound(r2,r1)
return (s1, L1+h1), (s2, L2+h2)
def runGame(rounds,p1,p2):
sa, sd = 0, 0
ha, hd = '', ''
for a in range(0,rounds):
(na, ha), (nd, hd) = runRound(p1,p2,ha,hd)
sa += na
sd += nd
return sa, sd
def processPlayers(players):
for i,p in enumerate(players):
base,ext = os.path.splitext(p)
if ext == '.py':
py_compile.compile(p)
players[i] = '%s %sc' %( PYTHON_PATH, p)
return players
print "Finding warriors in " + sys.argv[1]
players=[sys.argv[1]+exe for exe in os.listdir(sys.argv[1]) if os.access(sys.argv[1]+exe,os.X_OK)]
players=processPlayers(players)
num_iters = 1
if len(sys.argv) == 3:
num_iters = int(sys.argv[2])
print "Running %s tournament iterations" % (num_iters)
total_scores={}
for p in players:
total_scores[p] = 0
for i in range(1,num_iters+1):
print "Tournament %s" % (i)
scores={}
for p in players:
scores[p] = 0
for i1 in range(0,len(players)):
p1=players[i1];
for i2 in range(i1,len(players)):
p2=players[i2];
# rounds = random.randint(50,200)
rounds = 100
#print "Running %s against %s (%s rounds)." %(p1,p2,rounds)
s1,s2 = runGame(rounds,p1,p2)
#print (s1, s2)
if (p1 == p2):
scores[p1] += (s1 + s2)/2
else:
scores[p1] += s1
scores[p2] += s2
players_sorted = sorted(scores,key=scores.get)
for p in players_sorted:
print (p, scores[p])
winner = max(scores, key=scores.get)
print "\tWinner is %s" %(winner)
total_scores[p] += 1
print '-'*10
print "Final Results:"
players_sorted = sorted(total_scores,key=total_scores.get)
for p in players_sorted:
print (p, total_scores[p])
winner = max(total_scores, key=total_scores.get)
print "Final Winner is " + winner
- मेरे भयानक अजगर के बारे में शिकायतों का स्वागत है, क्योंकि मुझे यकीन है कि यह एक से अधिक तरीके से चूसता है
- बग ठीक करता है
स्कोरर चांगेलोग:
- प्रिंट किए गए खिलाड़ी और स्कोर, और विजेता घोषित करें (4/29, केसी)
- वैकल्पिक रूप से कई टूर्नामेंट चलाएं (
./score warriors/ num_tournaments)
) डिफ़ॉल्ट = 1, अजगर स्रोतों का पता लगाएं और संकलित करें (4/29, केसी) - विशेष रूप से गूंगा बग को ठीक करें जिसमें दूसरे खिलाड़ी को एक गलत इतिहास दिया जा रहा था। (4/30, dmckee; धन्यवाद जोश)
प्रारंभिक योद्धा
उदाहरण के माध्यम से, और ताकि परिणामों को सत्यापित किया जा सके
देवदूत
#include <stdio.h>
int main(int argc, char**argv){
printf("c\n");
return 0;
}
या
#!/bin/sh
echo c
या
#!/usr/bin/python
print 'c'
शैतान
#include <stdio.h>
int main(int argc, char**argv){
printf("t\n");
return 0;
}
बिना सोचे समझे
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
int main(int argc, char**argv){
srandom(time(0)+getpid());
printf("%c\n",(random()%2)?'c':'t');
return 0;
}
ध्यान दें कि स्कोरर एक सेकंड में कई बार योद्धा को फिर से लागू कर सकता है, इसलिए यदि PRNG को बीज करने के लिए समय का उपयोग किया जा रहा है, तो परिणामों की यादृच्छिकता का बीमा करने के लिए एक गंभीर प्रयास किया जाना चाहिए।
जैसे को तैसा
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char**argv){
char c='c';
if (argv[1] && (
(argv[1][0] == 'R') || (argv[1][0] == 'E')
) ) c='t';
printf("%c\n",c);
return 0;
}
पहला वह जो वास्तव में इतिहास के साथ कुछ करता है ।
केवल प्रदान किए गए योद्धा पैदावार पर स्कोरर चल रहा है
Finding warriors in warriors/
Running warriors/angel against warriors/angel.
Running warriors/angel against warriors/devil.
Running warriors/angel against warriors/random.
Running warriors/angel against warriors/titfortat.
Running warriors/devil against warriors/devil.
Running warriors/devil against warriors/random.
Running warriors/devil against warriors/titfortat.
Running warriors/random against warriors/random.
Running warriors/random against warriors/titfortat.
Running warriors/titfortat against warriors/titfortat.
('warriors/angel', 365)
('warriors/devil', 832)
('warriors/random', 612)
('warriors/titfortat', 652)
वह शैतान, वह एक शिल्प है, और अच्छे लोग स्पष्ट रूप से आखिरी में आते हैं।
परिणाम
"आधिकारिक" रन की
('angel', 2068)
('helpvamp', 2295)
('pavlov', 2542)
('random', 2544)
('littleschemer', 2954)
('devil', 3356)
('simpleton', 3468)
('secrethandshake', 3488)
('antit42t', 3557)
('softmajo', 3747)
('titfor2tats', 3756)
('convergence', 3772)
('probabimatic', 3774)
('mistrust', 3788)
('hyperrationalwasp', 3828)
('bygones', 3831)
('honoramongthieves', 3851)
('titfortat', 3881)
('druid', 3921)
('littlelisper', 3984)
('shark', 4021)
('randomSucker', 4156)
('gradual', 4167)
Winner is ./gradual
return (s1, L1+h1), (s2, L2+h1)
करने के लिए return (s1, L1+h1), (s2, L2+h2)
[नोट L2+h2
के बजाय L2+h1
अंत में]? // कट-एन-पेस्ट गलती या कुछ समान रूप से बेवकूफ। शीश!