একটি তাত্পর্যপূর্ণ বন্দীর দ্বিধাদ্বন্দ্বী খেলায় স্কোর করুন


15

একটি বৃত্তাকার ইন বন্দীদের দূর্দশা ব্যায়াম দুজন খেলোয়ার প্রতিটি সিদ্ধান্ত নিতে হবে সহযোগিতা বা খুঁত যে রাউন্ডের জন্য। একটি রাউন্ডের জন্য স্কোরিংটি হ'ল:

  • প্লেয়ার এ এবং প্লেয়ার বি উভয়ই সহযোগিতা করে: উভয়ের জন্য 1 পয়েন্ট
  • প্লেয়ার এ এবং প্লেয়ার বি উভয় ত্রুটি: উভয়ের জন্য 2 পয়েন্ট
  • প্লেয়ার এ সহযোগিতা করে এবং প্লেয়ার বি ত্রুটি: প্লেয়ার এটিকে সহযোগিতা করার জন্য 3 পয়েন্ট এবং প্লেয়ার বি ত্রুটিযুক্ত করার জন্য 0 পয়েন্ট

আপনার কৌশল সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই, যদিও: আপনার প্রোগ্রামটি কেবল একটি গেমের জন্য স্কোরকে বিশিষ্ট করে তুলবে। (আপনি যদি ইতিমধ্যে বন্দীর দ্বিধাদ্বন্দ্বের সাথে পরিচিত হন তবে আমার "পয়েন্টগুলি" এখানে "বছরের কারাদণ্ডের সাথে মিল রয়েছে")

আপনার চ্যালেঞ্জটি এমন ইনপুট নেওয়া যা খেলোয়াড়দের পছন্দকে বিভিন্ন দফায় উপস্থাপন করে এবং তাদের নিজ নিজ মোট স্কোর গণনা করে। একটি খেলোয়াড় ছোট হাতের অক্ষরে পছন্দগুলি জমা দেয় cএবং d( সহযোগিতা এবং ত্রুটির জন্য ), এবং অন্যটি বড় হাতের অক্ষরে পছন্দগুলি জমা দেয় Cএবং D। এই পছন্দগুলি আপনার প্রোগ্রামটিতে স্ট্রিং হিসাবে সরবরাহ করা হয়।

সাধারণত, বন্দীদের দ্বিধাদ্বন্দ্বের খেলোয়াড়রা তাদের চালগুলি একযোগে এবং পুনরাবৃত্তভাবে জমা দেয়। এই চ্যালেঞ্জের ক্ষেত্রে, খেলোয়াড়রা একবারে বেশ কয়েকটি রাউন্ডের জন্য তাদের পছন্দগুলি জমা দিতে পারে। যদি কোনও খেলোয়াড়ের পদক্ষেপ ক্রমহীন থাকে তবে স্কোরিং প্রোগ্রামটি এটি মনে রাখে এবং বিরোধী খেলোয়াড়ের পরবর্তী উপলব্ধ পদক্ষেপের সাথে এটি মেলে।

এখানে একটি নমুনা ইনপুট স্ট্রিং রয়েছে:

cDCddDDCcCc

এই ইনপুটটিতে বিদ্যমান ম্যাচগুলি দেখানোর জন্য, আমি ছোট হাতের অক্ষর এবং বড় হাতের সাথে আলাদাভাবে কল করব এবং সেগুলি তৈরি করব:

cDCddDDCcCc
c  dd   c c => cddcc
 DC  DDC C  => DCDDCC

এগুলি রাউন্ডে যুক্ত করা হবে:

c vs D (3 pts for lowercase-player, 0 pts for uppercase-player)
d vs C (0 pts for lowercase-player, 3 pts for uppercase-player)
d vs D (2 pts for both)
c vs D (3 pts for lowercase-player, 0 pts for uppercase-player)
c vs C (1 pt for both)

যা স্কোর 9(লোয়ারকেস) থেকে 6(বড় হাতের) তৈরি করে, তাই আউটপুটটি 9,6(বা কোনও স্পষ্টত সীমানার) হওয়া উচিত ।

এটি অন্য কোনও উপায়ে প্রকাশ করার জন্য, এখানে প্রতিটি জুটি তার নিজস্ব সারিতে টানা রয়েছে:

cDCddDDCcCc
cD
  Cd
    dD
      D c
       C  c

একটি মিল নেই C, কারণ বড় হাতের খেলোয়াড় লোয়ারকেস প্লেয়ারের চেয়ে বেশি পদক্ষেপ জমা দিয়েছে। এটি গ্রহণযোগ্য এবং স্কোর করার উদ্দেশ্যে এটি সম্পূর্ণ উপেক্ষা করা হয়।

প্রয়োজনীয়তা এখানে:

  • আপনাকে অবশ্যই এমন একটি প্রোগ্রাম বা ফাংশন লিখবেন যা /[cdCD]+/কিছু ইনপুট প্রক্রিয়া (এসটিডিআইএন, ফাংশন আর্গুমেন্ট, ফাইল থেকে পড়া ইত্যাদি) মাধ্যমে নিয়মিত-এক্সপ্রেশন ফর্মটির একটি স্ট্রিং গ্রহণ করে । (আপনার প্রোগ্রামটি চূড়ান্তভাবে নতুন লাইনের সাহায্যে ইনপুট গ্রহণ করতে পারে))

  • আপনার প্রোগ্রাম বা ফাংশনটি অবশ্যই স্ট্রিং হিসাবে প্লেয়ারদের স্কোরকে আউটপুট করতে বা ফিরিয়ে দিতে হবে। আউটপুট ফর্ম্যাটটি ছোট হাতের খেলোয়াড়ের স্কোর দিয়ে শুরু হওয়া উচিত, তারপরে বড় হাতের খেলোয়াড়ের স্কোর, আপনার পছন্দের কোনও খালি, অ-সংখ্যাযুক্ত ডিলিমিটার দ্বারা পৃথক করা উচিত। (একটি পেছনের নতুন লাইন optionচ্ছিক)

  • যদি একজন খেলোয়াড়ের অপরটির চেয়ে বেশি চাল থাকে তবে অতিরিক্ত চালগুলি উপেক্ষা করা হয়।

  • যদি ইনপুটটির সমস্ত চালগুলি একচেটিয়াভাবে কোনও প্লেয়ারের হয় (যা কোনও রাউন্ড মোটেও খেলেনি), তবে প্রতিটি প্লেয়ারের স্কোর হ'ল 0

  • বাইটস মধ্যে ক্ষুদ্রতম জমা জয়।

পরীক্ষার মামলা

Input:  cDCddDDCcCc
Output: 9,6         -- or any delimiter; I chose commas here

Input:  cccDDD
Output: 9,0         

Input:  DDDDDDccc
Output: 9,0

Input:  cDcDcD
Output: 9,0

Input:  dcDDC
Output: 5,2

Input:  CcdCDDcd
Output: 6,6

Input:  Ddd
Output: 2,2

Input:  ccccccccccc
Output: 0,0

তারা সাধারণত সহযোগিতার জন্য 2 পয়েন্ট পান না এবং উভয় ত্রুটি থাকলে 1 পয়েন্ট হারাবেন না?
Eumel

1
@ ইমেল আমি কেবল উইকিপিডিয়া সূচনা থেকে চশমাগুলি অনুলিপি করেছি, যা মূল লেখকদের প্রস্তাবিত একটি ফর্মুলেশন ব্যবহার করে বলে মনে হচ্ছে। এছাড়াও লক্ষ করুন যে এখানে পয়েন্টগুলি "খারাপ" কারণ তারা কারাগারে বছরের সাথে মিল রয়েছে। বিজয়ী কয়েকটি পয়েন্ট সহ খেলোয়াড় ।
অ্যাপসিলাররা

কি (0,0)বা [0,0]আউটপুট ঠিক আছে?
xnor

উত্তর:


3

পাইথ, 23 বাইট

jsMc2/L`C,@Gz-zG"cDDCdd

পরীক্ষা স্যুট


ব্যাখ্যা:

@Gz: ছোট হাতের অক্ষর

-zG: বড় হাতের অক্ষর

C,: পেয়ার করুন, বাকীটি কেটে ফেলুন।

`: জোড়ার তালিকার স্ট্রিং প্রতিনিধিত্ব নিন

/L ... "cDDCdd: প্রতিটি অক্ষরের জন্য "cDDCdd", উপরের স্ট্রিং repr এ এটি প্রদর্শিত হয় কতবার গণনা করুন।

c2: ফলাফল তালিকা অর্ধেক কাটা।

sM: প্রতিটি অর্ধেক যোগ করুন।

j: নিউলাইনস এবং প্রিন্টে যোগদান করুন।


এক পক্ষ কখনই কাজ না করে এমন ঘটনাটি তৈরি করতে অবশ্যই এস এর পরিবর্তে ব্যবহার করতে হবে।


5

হাস্কেল, 139 134 বাইট

g=filter
(n!m)(a,b)=(a+n,b+m)
f s=init$tail$show$foldr id(0,0)$zipWith(#)(g(>'a')s)$g(<'E')s
'c'# 'C'=1!1
'c'#_=3!0
_# 'D'=2!2
_#_=0!3

ব্যবহারের উদাহরণ: f "cDCddDDCcCc"-> "9,6"

আউটপুট ফর্ম্যাটটি ডানদিকে পেতে 15 বাইট, অর্থাত সংখ্যার এক জোড়াকে (x,y)স্ট্রিংয়ে পরিণত করা "x,y"

কিভাবে এটা কাজ করে:

               g(>'a')s        -- extract all lowercase letters
                     g(<'E')s  -- extract all uppercase letters
         zipWith(#)            -- combine both lists element wise with function #
                               -- # calls ! depending on the combination of c/d/C/D
                               -- ! takes 2 numbers a and b and returns a function
                               -- that takes a pair (x,y) and returns (x+a,y+b)
                               -- now we have a list of such functions
    foldr id(0,0)              -- apply those functions starting with (0,0)
init$tail$show                 -- format output                    

সম্পাদনা করুন: @ জগারব আমাকে 5 বাইট সংরক্ষণে সহায়তা করেছে ধন্যবাদ!


4

ল্যাবভিউ, 77 বাইট

এখানে চিত্র বর্ণনা লিখুন

কোডটি টোকেনগুলি থেকে স্ক্যান করে এবং পয়েন্টগুলি কোথায় যায় তা সিদ্ধান্ত নিতে সেগুলি সূচকগুলি ব্যবহার করে।

গণনা এভাবে চলে


3

পাইথন 3, 110

FryAmTheEggman ধন্যবাদ 5 বাইট সংরক্ষণ করা।
অ্যাপসিলারদের ধন্যবাদ 7 বাইট সংরক্ষণ করা।
ডিএসএমকে 26 বাইট সংরক্ষণ করা হয়েছে।

x=[[],[]]
a=b=0
for m in input():x[m<'E']+=m
for w,p in zip(*x):d=p>'C';c=w<'d';b+=d*2+c;a+=3-d-2*c
print(b,a)

আমি মনে করি এটি অবশেষে সমস্ত গল্ফ হয়ে গেছে।

এটি ইনপুটটির প্রতিটি চরিত্রের মাধ্যমে স্ক্যান করে এবং বড় হাতের বা না হওয়ার উপর ভিত্তি করে এটি সাজায়। এরপরে এটি কিছু অভিনব গণিত করে যা পাইথনের পোকারগুলিকে অন্তর্নিহিতভাবে মুল রূপান্তরিত করে।


2

জাভাস্ক্রিপ্ট (ES6), 124 118 বাইট

s=>(A=B=i=0,U=(r=x=>s.replace(/c|d/g,x))``,r(l=>U[i]&&(U[i++]<'D'?l<'d'?++A&++B:B+=3:l<'d'?A+=3:(A+=2,B+=2))),A+','+B)

জীবন্ত উদাহরণ

(পাঠযোগ্যতার জন্য সামান্য প্রসারিত।)

var f=function (s) {
    A=B=i=0;
    U=(r=function(x){return s.replace(/c|d/g,x)})("");
    r(l=>U[i]&&(U[i++]<'D'?l<'d'?++A&++B:B+=3:l<'d'?A+=3:(A+=2,B+=2)));
    return A+','+B;
}

var input = ["cDCddDDCcCc","cccDDD","DDDDDDccc","cDcDcD","dcDDC","CcdCDDcd","Ddd","ccccccccccc"];
var output = ["9,6","9,0","9,0","9,0","5,2","6,6","2,2","0,0"];
var passed = true;

for (var index=0;index<input.length;index++) {
    if (f(input[index]) !== output[index]) passed = false;
}

document.getElementById("result").textContent = 
  passed ? "All tests passed." : "Some tests failed.";
<div id="result"></div>

ব্যবহারকারী 81655 ধন্যবাদ 6 বাইট সংরক্ষণ করা


আমার প্রাথমিকভাবে অ্যারে বোঝাপড়া ছিল, তবে ভিন্ন পদ্ধতি ব্যবহার করে শেষ হয়েছিল। ধন্যবাদ।
ইন্ট্রিপিডকোডার

1

পার , 49 বাইট

(lW▼·L)w▼·U))t˅y])[h7%Z2*↓″4>5*-]z2↔-″0<4*+╞)t.Σ¡

একটি বাইট অক্ষর প্রতি ব্যবহৃত হয়। এখানে দেখুন

ব্যাখ্যা

(              ## Construct array
 l             ## Read line
 W             ## Assign to w
 ▼·L)          ## Filter by immutable under lower-case
 w             ## Get w
 ▼·U)          ## Filter by immutable under upper-case
)              ## 
t              ## Transpose and truncate
˅y])           ## If empty, empty 2-D matrix
[              ## Map
 h             ## Decimal to hex
 7%            ## Modulo 7
 Z             ## Assign to z
 2*↓″4>5*-     ## Score of lower case
 ]             ## Put in array
 z2↔-″0<4*+    ## Score of upper case
 ╞             ## Add to array
)              ## 
t              ## Transpose and truncate
.Σ             ## Map - sum
¡              ## Empty array onto stack

ফর্ম আউটপুট 9 6


যিনি পার কখনও ব্যবহার করেন নি (বা শুনেছেন), আমি আপনার ব্যাখ্যাটি পড়তে আনন্দিত পেয়েছি। ধন্যবাদ!
অ্যাপসিলাররা

1

সিজেম, 92 83 81 বাইট

এটি যতক্ষণ না ভেবেছিল তার চেয়ে বেশি সময় ধরে এটি শেষ হয়েছিল ...

0]K*X3tC30tG22tZ11t:L;0'a]q+{'D>}:B$_{B}%1#/z{,1>},{2<[:i:#K%L=]sY0e[{si}%}%:.+S*

এখানে চেষ্টা করুন।

ব্যাখ্যা (আমি এটি ব্যাখ্যা করার সাহস করব?: ও):

0]K*C3tX30tG22tZ11t:L;    e# Creates this array [0,30,0,11,0,0,0,0,0,0,0,0,3,0,0,0,22,0,0,0]
0'a]q+                    e# Creates an array that looks like [0, 'a', input string]
{'D>}:B$                  e# Sorts the array by if the int representation of each element is greater than the int value of the character 'D' (e.g. [0,C,D,a,c,d])
_{B}%1#/                  e# Finds the index of the first value in the array that is > 'D' and splits the array at that index.
z{,1>},{                  e# Zip the two sub arrays and filter for only sub arrays with more than one element. (e.g [[0,a],[C,c],[D,d]])
{2<[:i:#K%L=]s            e# For each sub array, take the first two elements, convert each to an it, calculate n=(x[0]^x[1]) mod 20, and get the nth element in the very first array, and convert it to a string
Y0e[                      e# Pad the string with 0 so it is length 2. (e.g. [["00"],["22"],["11"]])
{si}%}%:.+                e# get the numerical representation of each digit and dot sum all of them (e.g [[0,0],[2,2],[1,1] => [3,3])
S*                        e# Join with a space (e.g "3 3")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.