ভিতরে এই প্রশ্নের , কোনো গেম উদ্ভাবন করেন যা প্লেয়ার, বন্দীদের দূর্দশা মধ্যে যুগল দ্বারা যুগল বন্ধ একে অপরের মুখোমুখি, যা নির্ধারণ পুনরাবৃত্ত কৌশল অন্যদের বিরুদ্ধে সর্বোচ্চ রান হবে।
ভিতরে এই প্রশ্নের আমি একাধিক ব্যক্তি সব একই সময়ে একে অপরের বিরুদ্ধে প্রিজনার্স 'উভয়সঙ্কট খেলার জন্য একটি উপায় উদ্ভাবন। এই প্রকরণে, পেওফ ম্যাট্রিক্স অপ্রয়োজনীয়, উভয় খেলোয়াড়ের প্রতিটি জুটির মধ্যে প্রতিটি ফলাফল দুটি কার্যত স্বাধীন সিদ্ধান্তের যোগফল।
আপনার কাজটি হ'ল মাল্টিপ্লেয়ার প্রিজনারের দ্বিমাটির এই প্রতিসামিত, সাধারণ সংস্করণটি খেলতে একটি এআই তৈরি করা যা সর্বোচ্চ স্কোর অর্জন করবে।
খেলার নিয়ম
এই মাল্টিপ্লেয়ারের প্রতিটি রাউন্ডে, বহু-রাউন্ড প্রিজনারের দ্বিমা, কোনও খেলোয়াড় A
অন্য কোনও খেলোয়াড়ের কাছ থেকে "1" নেওয়ার সিদ্ধান্ত নিতে পারেন B
। এই পরিস্থিতিতে, A
এর স্কোর 1 দ্বারা বৃদ্ধি পায়, যখন B
এর স্কোর 2 হ্রাস পায় ordered এই সিদ্ধান্তটি প্রতিটি আদেশযুক্ত খেলোয়াড়ের মধ্যে হওয়ার অনুমতি দেওয়া হয় allowed
প্রতিটি খেলোয়াড়ের জন্য এটিই একমাত্র সিদ্ধান্ত - একে অপরের খেলোয়াড়ের কাছ থেকে "1 নেওয়া" বা "1" না নেওয়ার, যা যথাক্রমে বিযুক্তি এবং সহযোগিতার ক্ষেত্রে সমকামী। দুটি প্লেয়ারের মধ্যে কার্যকর পেওফ ম্যাট্রিক্স P1
এবং P2
নিম্নরূপ দেখায়:
P1/P2 P1 Take1 P1 Don't
P2 Take1 -1/-1 -2/+1
P2 Don't +1/-2 0/ 0
টুর্নামেন্ট পদ্ধতি
গেমটি P * 25
রাউন্ডগুলি নিয়ে গঠিত হবে , যেখানে P
অংশগ্রহণকারী খেলোয়াড়ের সংখ্যা। সমস্ত খেলোয়াড় স্কোর দিয়ে শুরু করে0
। প্রতিটি রাউন্ডে নিম্নলিখিত প্রক্রিয়া থাকবে:
একটি রাউন্ডের শুরুতে, প্রতিটি প্রোগ্রামকে নীচের ফর্ম্যাটে স্ট্যান্ডার্ড ইনপুট থেকে পূর্বের রাউন্ডগুলির একটি ইতিহাস দেওয়া হবে:
3 নম্বর ধারণকারী ওয়ান লাইন,
P
,D
, এবংN
।P
গেমের মোট খেলোয়াড়ের সংখ্যা। প্রতিটি খেলোয়াড়কে এলোমেলোভাবে গেমের শুরুতে একটি আইডি নম্বর দেওয়া1
হয়P
।D
বর্তমান প্লেয়ারের আইডি।N
যে রাউন্ডটি খেলেছে তার সংখ্যা।
N
লাইন, প্রতিটি লাইন একটি বৃত্তের ফলাফলের প্রতিনিধিত্ব করে। লাইন উপরk
এরN
, কিছু সংখ্যা হতে হবেn_k
আদেশ যুগলের(a, b)
, স্পেস, যা উপস্থাপন করেন যে আইডি দিয়ে খেলোয়াড় দ্বারা পৃথকa
আইডি দিয়ে খেলোয়াড় থেকে "1 নেন"b
যে রাউন্ডে।একটি অবিশেষ এলোপাথারি সংখ্যা
R
থেকে0
থেকে18446744073709551615
(2 64 - 1), একটি সিউডোরান্ডম বীজ হিসাবে কাজ করতে। এই সংখ্যাগুলি একটি প্রাক-উত্পন্ন ফাইল থেকে পড়া হবে, যা টুর্নামেন্টের শেষে প্রকাশ করা হবে যাতে লোকেরা নিজেরাই ফলাফলগুলি যাচাই করতে পারে।আপনার প্রোগ্রামটি যদি পূর্ববর্তী রাউন্ডে এরকম আউটপুট তৈরি করে তবে আপনার প্রোগ্রামে পড়তে হবে এমন একটি অতিরিক্ত লাইন যা কিছু প্রোগ্রামের প্রতিনিধিত্ব করে program গেমের শুরুতে, এই লাইনটি সর্বদা খালি থাকবে। এই লাইনটি স্কোরিং কোড বা অন্য প্রোগ্রামগুলির দ্বারা কোনও সংশোধন করা হবে না।
প্রতিটি প্রোগ্রাম তারপরে স্ট্যান্ডার্ড আউটপুট থেকে নিম্নলিখিত উত্পাদন করতে তার কৌশল ব্যবহার করবে :
K
সংখ্যার একটি তালিকা , যা প্রোগ্রামগুলির আইডি এটি এই রাউন্ড থেকে "1 নেবে"। একটি খালি আউটপুট মানে এটি কিছুই করবে না।Allyচ্ছিকভাবে, পরবর্তী রাউন্ডগুলিতে প্রেরণে একরকম অতিরিক্ত লাইন যা রাষ্ট্রের কিছু রূপকে উপস্থাপন করে। এই সঠিক লাইনটি পরবর্তী রাউন্ডে প্রোগ্রামে ফিরে দেওয়া হবে।
নীচে 3
4 খেলোয়াড়ের খেলায় আইডি প্লেয়ারের জন্য গেমের শুরুর জন্য একটি উদাহরণ ইনপুট রয়েছে :
4 3 0
4696634734863777023
ইতিমধ্যে কয়েকটি রাউন্ডের সাথে একই গেমের উদাহরণ নীচে দেওয়া হয়েছে:
4 3 2
(1, 2) (1, 3) (1, 4) (4, 2)
(1, 3) (2, 1) (2, 4) (3, 1) (4, 1)
4675881156406346380
প্রতিটি প্রোগ্রামের জন্য D
স্বতন্ত্র আইডি নম্বর বাদে প্রতিটি প্রোগ্রামকে একই রাউন্ডের জন্য একই খাওয়ানো হবে ।
নীচে একটি উদাহরণ আউটপুট দেওয়া হয়েছে যাতে খেলোয়াড় 3
অন্য সবার কাছ থেকে 1 নেয়:
1 2 4
প্রয়োজনীয় সমস্ত রাউন্ড শেষে, সর্বোচ্চ চূড়ান্ত স্কোর প্লেয়ারটি বিজয়ী হবে।
সময়রেখা
এই টুর্নামেন্টের কোডিং মোট 7 দিন চলবে। জমা দেওয়ার সময়সীমাটি হ'ল 2014-05-09 00:00 UTC
।
এই তারিখের আগে আসল প্রোগ্রামগুলি পোস্ট করবেন না - প্রতিশ্রুতি হিসাবে আপনার প্রোগ্রামের উত্স কোডের SHA256 হ্যাশ পোস্ট করুন। আপনি সময়সীমার আগে যে কোনও সময় এই হ্যাশটি পরিবর্তন করতে পারেন তবে সময়সীমার পরে পোস্ট করা প্রতিশ্রুতি রায় দেওয়ার জন্য গ্রহণ করা হবে না। (দয়া করে আপনার হ্যাশগুলির জন্য বেস not৪ স্বরলিপিটি ব্যবহার করুন, কারণ আমার যাচাইকরণের প্রোগ্রামটি বেস 64৪ কে আলাদা করে দেয় এবং এটি আরও কমপ্যাক্ট স্বরলিপি।
সময়সীমা শেষ হওয়ার পরে, 2014-05-10 00:00 UTC
আপনার জমা দেওয়ার জন্য আপনার প্রোগ্রামের আসল উত্স কোড পোস্ট করতে আপনার 1 দিন (অবধি ) সময় থাকবে । আপনার পোস্ট করা সোর্স কোডের SHA256 হ্যাশ যদি আপনার সময়সীমার আগে পোস্ট করা কোনও হ্যাশের সাথে মেলে না, তবে আপনার কোডটি টুর্নামেন্টে স্বীকৃত হবে না।
এর পরে, আমি আমার কম্পিউটারে সমস্ত জমাগুলি ডাউনলোড করব, এবং এই যুদ্ধের সমস্ত টুর্নামেন্টের এন্ট্রি চালাবো রোয়ালে, আশা করছি এরপরে 2 দিনের মধ্যে ফলাফল পোস্ট করে 2014-05-12 00:00 UTC
।
আমি উত্তরটি সর্বোচ্চ স্কোর সহ গ্রহণ করব এবং এর উত্তরের স্কোর যদি এর চেয়ে বেশি হয় তবে +১০০ এর উত্তরে পুরস্কার দেব 0
।
টুর্নামেন্টটি শেষ হওয়ার পরে, আমি প্রতিযোগিতাটি চালানোর জন্য ব্যবহৃত এলোমেলো বীজ ফাইলটি পোস্ট করব এবং লোকেরা টুর্নামেন্টে ব্যবহৃত টপকে শীর্ষে চেষ্টা করার জন্য অন্যান্য সমাধান পোস্ট করতে শুরু করবে। তবে তারা গ্রহণযোগ্যতা বা অনুগ্রহের জন্য গণনা করবে না।
হোস্ট মেশিন
আমি এই সমাধানগুলি আমার কম্পিউটারে ভার্চুয়াল মেশিনে চালাচ্ছি। এই ভার্চুয়াল মেশিনটি 2 গিগাবাইট র্যাম সহ উবুন্টু লিনাক্স 14.04 চালাবে। আমার বেস মেশিনে একটি ইনটেল আই 7-2600 কে প্রসেসর রয়েছে 3.40 গিগাহার্টজ এ চালিত।
আবশ্যকতা
আপনার প্রোগ্রামটি অবশ্যই এমন একটি ভাষায় লিখিত হতে হবে যার জন্য আপনার প্রোগ্রামটি সংকলনকারী একটি সংকলক বা দোভাষী উপস্থিত আছেন এবং উবুন্টু লিনাক্সের সর্বশেষতম সংস্করণের জন্য সহজেই উপলব্ধ, যাতে আমি সমস্ত সাবমিশনগুলি চালনা করতে পারি এবং ভার্চুয়াল মেশিনে তাদের বিচার করতে পারি।
আপনার প্রোগ্রাম অবশ্যই 2.000 seconds
প্রতিটি রাউন্ড চালানোর চেয়ে বেশি গ্রহণ করবে না । যদি আপনার প্রোগ্রামটি সময়ের বাইরে চলে যায় বা কোনও ত্রুটি তৈরি করে তবে এর আউটপুটটি সেই রাউন্ডের জন্য খালি বিবেচিত হবে।
আপনার প্রোগ্রাম অবশ্যই নির্দোষ হতে হবে; এটি হ'ল একই ইনপুটটির জন্য সর্বদা একই আউটপুট ফেরত দিতে হবে। সিউডোর্যান্ডম সমাধানগুলি অনুমোদিত; যাইহোক, তাদের এলোমেলোতা অবশ্যই ইনপুট হিসাবে দেওয়া এলোমেলো বীজের উপর নির্ভর করে এবং অন্য কিছুই নয়। পাইথনের ব্যবহার করে বীজ ফাইল তৈরি করা হয়েছিল os.urandom
। এতে মোট 500 টি লাইন রয়েছে (প্রয়োজনে আরও উত্পন্ন হবে) এবং এর SHA256 হ্যাশ রয়েছে K+ics+sFq82lgiLanEnL/PABQKnn7rDAGmO48oiYxZk=
। টুর্নামেন্টটি শেষ হয়ে গেলে এটি এখানে আপলোড করা হবে।
গাছপালা
জিনিসগুলি লাথি মেরে ফেলার জন্য, চারটি উদ্ভিদ থাকবে, যা প্রাথমিক ভ্রান্ত কৌশলগুলি উপস্থাপন করে। এগুলি আপনার জমা দেওয়ার পাশাপাশি টুর্নামেন্টে খেলবে। তবে, তাদের মধ্যে যে কোনও একটিই জিতে যায় না এমন সম্ভাব্য ক্ষেত্রে, উদ্ভিদ ব্যতীত অন্য খেলোয়াড়ের দ্বারা প্রাপ্ত সর্বোচ্চ স্কোরকে বিজয়ী হিসাবে বিবেচনা করা হবে।
প্রতিটি গাছের ফাইলের হ্যাশ গণনা করতে, 4 টি স্পেসের প্রতিটি গ্রুপকে একটি ট্যাব দিয়ে প্রতিস্থাপন করুন, কারণ এখানে ফর্ম্যাটরটি ট্যাব অক্ষর পছন্দ করে না।
অলস - কখনই কিছু করে না।
n1bnYdeb/bNDBKASWGywTRa0Ne9hMAkal3AuVZJgovI=
pass
লোভী - সর্বদা অন্য সবার কাছ থেকে 1 নেয়।
+k0L8NF27b8+Xf50quRaZFFuflZhZuTCQOR5t5b0nMI=
import sys
line1 = sys.stdin.readline()
n = [int(i) for i in line1.split()]
for i in range(n[0]):
if i+1 != n[1]:
print i+1,
print
রাগফুল - প্রথম রাউন্ডের প্রত্যেকের কাছ থেকে 1 নেয় এবং পূর্বের রাউন্ডের পরে এর থেকে 1 নেওয়া প্রত্যেকের কাছ থেকে 1 নেয়।
Ya2dIv8TCh0zWzRfzUIdFKWj1DF9GXWhbq/uN7+CzrY=
import sys
import re
line1 = [int(i) for i in sys.stdin.readline().split()]
players = line1[0]
pid = line1[1]
rounds = line1[2]
lines = []
if rounds == 0:
for i in range(players):
if i+1 != pid:
print i+1,
print
else:
for i in range(rounds):
lines.append(sys.stdin.readline())
lastline = lines[-1]
takes = re.findall(r'\([0-9]+, [0-9]+\)', lastline)
for take in takes:
sides = [int(i) for i in re.findall(r'[0-9]+', take)]
if sides[1] == pid:
print sides[0],
print
Enর্ষাপ্রাপ্ত ব্যক্তি - বর্তমানের সর্বোচ্চ স্কোরকে বাদ দিয়ে 50% প্লেয়ারের মধ্যে 1 পেয়ে যায়, গোল হয়ে যায়।
YhLgqrz1Cm2pEcFlsiIL4b4MX9QiTxuIOBJF+wvukNk=
import sys
import re
line1 = [int(i) for i in sys.stdin.readline().split()]
players = line1[0]
pid = line1[1]
rounds = line1[2]
lines = []
scores = [0] * players
if rounds == 0:
for i in range(players):
if i+1 != pid:
print i+1,
print
else:
for i in range(rounds):
takes = re.findall(r'\([0-9]+, [0-9]+\)', sys.stdin.readline())
for take in takes:
sides = [int(i) for i in re.findall(r'[0-9]+', take)]
scores[sides[0] - 1] += 1
scores[sides[1] - 1] -= 2
score_pairs = [(i+1, scores[i]) for i in range(players)]
score_pairs.sort(key=lambda x:(x[1], x[0]))
score_pairs.reverse()
taken = 0
j = 0
while taken < (players) / 2:
if score_pairs[j][0] != pid:
print score_pairs[j][0],
taken += 1
j += 1
এই চারটির মধ্যে 100 টি রাউন্ডের একটি টুর্নামেন্টে তারা বেশিরভাগ স্কোর পেয়ে থাকে:
Lazy: -204
Greedy: -100
Wrathful: -199
Envious: -199
বিচারক প্রোগ্রাম
আমি বিচারকের প্রোগ্রাম পোস্ট করেছি আমি গিথুব এ ব্যবহার করব । এটি ডাউনলোড করুন এবং এটি পরীক্ষা করে দেখুন। (এবং আপনি যদি একটি খুঁজে পান তবে একটি বাগ বা দুটি ঠিক করতে পারেন: P)
এই মুহুর্তে পাইথন ব্যতীত অন্য কোনও কিছুর সংকলনের বিকল্প নেই। আমি পরে সেগুলি অন্তর্ভুক্ত করব - লোকেরা যদি অন্য ভাষার জন্য সংকলন বা ব্যাখ্যা স্ক্রিপ্টগুলিতে অবদান রাখতে পারে তবে আমি অনেক বেশি বাধ্য থাকব।
দ্বিতীয় পর্যায়: উত্স কোড জমা দেওয়া
আমি tournament
প্রতিযোগিতার জন্য গিথুব সংগ্রহস্থলে একটি নতুন শাখা পোস্ট করেছি , এতে পিডি_র্যান্ড ফাইল এবং অন্যান্য উদ্ভিদ এন্ট্রি রয়েছে। আপনি হয় এখানে আপনার উত্স কোড পোস্ট করতে পারেন বা একটি শাখার কাছে একটি অনুরোধ হিসাবে জমা দিতে পারেন।
প্রতিযোগীদের ক্রম নিম্নরূপ হবে:
'begrudger'
'regular'
'patient'
'lazy'
'backstab'
'bully'
'lunatic'
'envious'
'titfortat'
'greedy'
'wrathful'
'judge'
'onepercent'
চূড়ান্ত স্কোর
আমার পরীক্ষার প্রোগ্রামটির আউটপুট:
Final scores:
begrudger -2862
regular -204
patient -994
lazy -2886
backstab -1311
bully -1393
lunatic -1539
envious -2448
titfortat -985
greedy -724
wrathful -1478
judge -365
onepercent -1921
স্থান:
1. regular -204
2. judge -365
3. greedy -724
4. titfortat -985
5. patient -994
6. backstab -1311
7. bully -1393
8. wrathful -1478
9. lunatic -1539
10. onepercent -1921
11. envious -2448
12. begrudger -2862
13. lazy -2886
সুতরাং দেখা যাচ্ছে যে বিজয়ী আসলেই একজন খেলোয়াড় - এটি নিয়মিত, -204 পয়েন্ট সহ!
দুর্ভাগ্যক্রমে, এর স্কোরটি ইতিবাচক ছিল না, তবে আমরা খুব কমই আশা করতে পারি যে ইটরেটেড প্রিজনারস দ্বিমাটির অনুকরণে যেখানে প্রত্যেকে জয়ের জন্য খেলছে।
কিছু বিস্ময়কর ফলাফল (কমপক্ষে আমি ভেবেছিলাম অবাক হয়েছিল):
লোভী তাতের হয়ে টাইটের চেয়ে বেশি গোল করেছে এবং আসলে বেশিরভাগ স্কোরারের চেয়ে সাধারণত বেশি।
বিচারক, যা বোঝানো হয়েছিল "নৈতিকতা প্রয়োগকারী" চরিত্রের এক প্রকারের (এটি মূলত যে যার কাছ থেকে 1 জন নিয়েছে যার উপরের একটি গড়-গড় সংখ্যার বার ছিল) তার পরিবর্তে উচ্চতর স্কোরিং শেষ হয়েছিল, যখন সিমুলেশন পরীক্ষায় এটি আসলে বরং কম স্কোর পেতে।
এবং অন্যেরা যে (আমি ভেবেছিলাম) এত অবাক হয় নি:
রোগী রেটফুলের চেয়ে পূর্ণ 484 পয়েন্ট বেশি রান করেছে scored এটি প্রথমবারের মতো সহযোগিতা করার জন্য অর্থ প্রদান করে।
এক শতাংশে খুব তাড়াতাড়ি নীচে নেমে প্রায় কেউই লাথি মারেনি। দেখে মনে হচ্ছে যে 1% কেবল সেই পথেই থাকতে সক্ষম কারণ তাদের খেলায় আরও খেলোয়াড় রয়েছে।
যাইহোক, এখন টুর্নামেন্টটি শেষ হয়ে গেছে, আপনার পছন্দমতো অতিরিক্ত খেলোয়াড় পোস্ট করুন এবং বিচারক প্রোগ্রামটি ব্যবহার করে তাদের সাথে চারপাশে পরীক্ষা করুন around