নন-ট্রান্সজিটিভ ডাইস গেম


10

আপনারা যারা নাম্বারফিল পছন্দ করেন তারা ডঃ জেমস গ্রিমের সাথে পরিচিত হবেন, যিনি তাঁর চ্যানেলে একটি ট্রান্সজিটিভ ডাইস গেমের বর্ণনা দিয়েছিলেন

গেমটিতে তিনটি 6-মুখী ডাইস রয়েছে:

  • ডাই 1: 3,3,3,3,3,6
  • ডাই 2: 2,2,2,5,5,5
  • ডাই 3: 1,4,4,4,4,4

দু'জন খেলোয়াড় ব্যবহারের জন্য একটি ডাই নির্বাচন করেন। তারা এগুলিকে রোল করে এবং সর্বোত্তম যে কোনও কিছুতে ডাই জিততে পারে die

সম্ভাব্য হিসাবে, 50% সুযোগের সাথে ডাই 1 বিট 2 মারা যায়। একইভাবে, মারা 2 বীট 3 মারা যায়, এবং মজার বিষয় হল মরা 3 বেট ডাই 1।

একটি প্রোগ্রাম গ্রহণ লিখুন 1, 2অথবা 3ইনপুট হিসাবে। এটি ব্যবহারকারী চয়ন করে এমন ডাই নির্দেশ করে। প্রোগ্রামটি তখন ডাই চয়ন করে যা ব্যবহারকারীকে পরাজিত করবে এবং 21 রোলগুলির ফলাফল আউটপুট করবে এবং " Computer/User wins with x points"

বিধি

  • কোড-গল্ফ, টাইব্রেকার হিসাবে ভোট
  • ডাইস রোলগুলি অনুকরণ করতে আপনাকে অবশ্যই আরএনজি (বা পছন্দগুলি) ব্যবহার করতে হবে।
  • আউটপুট ফর্ম্যাটে আমি খুব কঠোর নই। যতক্ষণ আপনি ডাইসগুলি দেখান ততক্ষণ ঠিক আছে, 21 রোলগুলির মধ্যে কোনওভাবে আলাদা (আপনি একই রোলের মধ্যে পাশা কীভাবে আলাদা করেন তার থেকে আলাদাভাবে) এবং উপরের বাক্যটিকে আউটপুট দেয়।
  • ইনপুট স্টিডিন, কমান্ড লাইন আর্গুমেন্ট, পর্দা থেকে ইত্যাদি হতে পারে

উদাহরণ

ইনপুট

1

আউটপুট

4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 6
1 3
4 3
4 3
1 3
4 3
1 3
4 3
4 3
4 3
4 3
4 6
 Computer wins with 16 points

এখানে, ব্যবহারকারী 1 ডাই পছন্দ করে এবং তার রোলগুলি ডান কলামে দেখানো হয়। প্রোগ্রামটি 3 ডাই পছন্দ করে এবং তাকে মারধর করে।

উত্তর:


1

গল্ফস্ক্রিপ্ট, 112 105 টি অক্ষর

3,21*{..+6rand<3*+)}%3/\{)\.+-1%>2<.p~<}+,,"User
Computer"n/1$11<=" wins with "+\[.~22+]$1>~+" points"+

এটি অনলাইনে চালান ।

স্ক্রিপ্টটি STDIN এ ইনপুটটি প্রত্যাশা করে এবং তার পরে ডাইস রোলগুলির ফলাফল (প্রথম কলাম কম্পিউটার, দ্বিতীয় ব্যবহারকারী) এবং চূড়ান্ত পরিসংখ্যানগুলি STDOUT এ মুদ্রণ করে।


4

এপিএল ( 106 114)

'Computer' 'User'[1+X],'wins with','points',⍨|Z-21×X←11>Z←+/>/⎕←⍉↑{⍵[{?6}¨⍳21]}¨(↓5 6⍴545170074510753⊤⍨18⍴7)[⎕+⍳2]

ব্যাখ্যা:

  • (↓5 6⍴545170074510753⊤⍨18⍴7)[⎕+⍳2]: বড় সংখ্যাটি পাশার একটি বেস -7 উপস্থাপনা। আমরা ক্রমে পাশের মান সহ একটি 6x5 ম্যাট্রিক্স তৈরি করি: 2 3 1 2 3. ব্যবহারকারীর ইনপুট জিজ্ঞাসা করুন এবং এটি ভেক্টরে যুক্ত করুন এবং 1 2ম্যাট্রিক্স থেকে এই লাইনগুলি নির্বাচন করুন। পাশা তালিকার স্থানান্তরিত হওয়ার কারণে, ব্যবহারকারী এখন তার নির্বাচিত একটিটি (ডানদিকে) পান এবং কম্পিউটারটি আরও শক্তিশালী হয়।
  • {⍵[{?6}¨⍳21]}¨: এই দুটি পাশের প্রতিটি জন্য 21 রোল করুন।
  • ⎕←⍉↑: রোলগুলি ম্যাট্রিক্স আকারে রাখুন এবং সেগুলি আউটপুট করুন।
  • Z←+/>/: কম্পিউটারের স্কোর (কম্পিউটারের মান ব্যবহারকারীর তুলনায় কতগুণ বেশি) পান
  • X←11>Z: Xব্যবহারকারী জিতেছে কিনা তা সেট করুন (যদি কম্পিউটারের স্কোরের চেয়ে 11 বেশি হয়)।
  • 'Computer' 'User'[1+X]Xব্যবহারকারী জিতেছে কিনা।
  • 'wins with','points',⍨|Z-21×X: Zএটি কম্পিউটারের স্কোর, তাই যদি কম্পিউটারটি জয় প্রদর্শন করে Z, অন্যথায় প্রদর্শন করে 21-Z

স্কোর মোটের পার্থক্য নয় (যা প্রতিটি জোড়া পাশের জন্য 0 হবে বলে আশা করা হয়), পরিবর্তে, 21 রোলগুলির প্রত্যেকটির বিজয়ী 1 পয়েন্ট পান। উদাহরণস্বরূপ, ব্যবহারকারীর 5 পয়েন্ট রয়েছে (5 টি রোল জিতে থেকে: 4-6, 1-3, 1-3, 1-3, 4-6) এবং কম্পিউটার 16 পয়েন্ট বিশ্রাম পায়।
টুইনাইট

@ টুইনাট: এটি ঠিক করেছেন
মেরিনাস

নেতিবাচক পয়েন্টগুলি যখন ব্যবহারকারী জিতবে। আপনি ঠিক করতে পারেন |Z-21×Xযার মাধ্যমে চরের গণনাটি পরিবর্তন হয় না
টোইনাইট

2

আর - 228

d=matrix(rep(c(rep(3,5),6,2,2,2,5,5,5,1,rep(4,5)),2),6)
x=scan()
r=expand.grid(Computer=d[,x+2],User=d[,x])[sample(36,21,T),]
print(r)
s=summary.factor(names(r)[max.col(r)])
cat(names(which.max(s)),"wins with",max(s),"points\n")

উদাহরণ রান:

> source('ntd.R')
1: 2
2: 
Read 1 item
     Computer User
28          3    5
31          3    5
36          6    5
18          6    2
11          3    2
31.1        3    5
14          3    2
8           3    2
9           3    2
17          3    2
2           3    2
29          3    5
3           3    2
16          3    2
4           3    2
21          3    5
14.1        3    2
23          3    5
16.1        3    2
17.1        3    2
19          3    5
Computer wins with 14 points

আপনি 9 টি অক্ষর সংরক্ষণ করে এর summary.factorসাথে প্রতিস্থাপন করতে পারেন table
ব্রায়ান ডিগস 17

2

গণিত 208 172 166 159

স্পষ্টতার জন্য স্পেস যুক্ত হয়েছে

b=Boole;{#, Row@{
         If[# > 10, "Play", "Comput"], "er wins with ",
         Max[#, 21 - #], " points"} &@ Total[b[#1 > #2] & @@@ #]} &@
   Table[1 + i + 3 b[6 Random[] > 2 i + 1],{21}, {i, {#, Mod[# + 1, 3]}}] &

আমি মনে করি আউটপুটকে পাশ্বের প্রতিটি রোলের মান তালিকাভুক্ত করার কথা।
ডেভিডসি

@ ইয়্ড, পরীক্ষার সময় আমি এটি হারিয়ে ফেলেছি। আমি কেবল বল চালিয়ে যেতে একটি দ্রুত ফিক্সআপ করেছি। আমি কীভাবে এটি উন্নত করব তা পরে চিন্তা করব।
ড। বেলিসারিয়াস

এটি এখন ঠিকঠাক কাজ করছে বলে মনে হচ্ছে।
ডেভিডসি

@ ডড এখন অনেক ভাল
ডাঃ বেলিসেরিয়াস

সত্যিই সুন্দর. +1
মিঃ উইজার্ড

1

রুবি 1.8, 165

i,s,*d=getc,21,[4]*5<<1,[3]*5<<6,[2,5]*3
puts"#{s.times{p r=[i,i-1].map{|o|d[o%3][rand 6]};s+=r[0]<=>r[1]}>s?"Human":"Computer"} wins with #{[s/=2,21-s].max} points"

getc ইনপুটটির আসকি মান পায় (কেবলমাত্র রুবি ১.৮), যা আনন্দের সাথে পূর্ণসংখ্যার মান অনুসারে মডিউল 3।

s21 এ শুরু হয়, তাই s.times{code}চালানো হবে code21 কাল ও 21. আসতে প্রতিটি পুনরাবৃত্তির উপর, লুপ পারেন যোগ অথবা যারা জেতে উপর নির্ভর করে s থেকে subtracts 1, তাই আমরা দেখতে পারি যারা এইজন্য কিনা জয়ী sএতদূর 21. কলেজ নীচে শেষ হয়েছে , তবে তারপরে আমার [s/=2,21-s].maxপয়েন্টের প্রকৃত সংখ্যাটি বের করতে আনাড়ি প্রকাশ করতে হবে। আমি দীর্ঘদিনের রিটার্ন ভ্যালু দিয়ে পাটিগণিত করতে চেয়েছি <=>, তাই আমি যেভাবেই খুশি।


1

গণিত 234 247

কোড

g@n_ := {t = RandomChoice[{{5, 25, 1, 5}/36 -> {{3, 1}, {3, 4}, {6, 1}, {6, 4}}, 
         {5, 1, 5, 1}/12 -> {{2, 3}, {2, 6}, {5, 3}, {5, 6}},
         {1, 1, 5, 5}/12 -> {{1, 2}, {1, 5}, {4, 2}, {4, 5}}}[[n]], 21], 
         Row[{If[(c = Count[t, {x_, y_} /; y > x]) > 10, "Computer ", "Player "], 
         "wins with ", If[c > 10, c, 21 - c], " points"}]}

ব্যবহার

{প্লেয়ার রোল, কম্পিউটার রোল}

g[1]
g[2]
g[3]

ফলাফল


ব্যাখ্যা

nপ্লেয়ারের মৃত্যুর সাথে মিলে যায় এমন 1, 2, বা 3 নম্বর। যেহেতু এন কম্পিউটারের ডাইও নির্ধারণ করে (তবে সমান নয়), আমরা যখন ডাবলির সমস্ত সম্ভাব্য রোলগুলি তৈরি করতে পারি যখন এন = 1, এন = 2, এন = 3 হয়। আমরা তাদের নিজ নিজ সম্ভাব্যতাও নির্ধারণ করতে পারি।

ঠিক পরে ডেটা পরীক্ষা করুন RandomChoice:

{5, 25, 1, 5} / 36 -> {{3, 1}, {3, 4}, {6, 1}, {6, 4}

যদি প্লেয়ারটি 1 টি মারা যায় তবে কেবলমাত্র সম্ভাব্য ফলাফলগুলি নিম্নলিখিত 4 টি জোড়া

{{3, 1}, {3, 4}, {6, 1}, {6, 4}}

এই জোড়গুলির সম্পর্কিত সম্ভাব্যতাগুলি

{5, 25, 1, 5}/36, এটাই,

{5/36, 25/36, 1/36, 5/36}

RandomChoice[<data>, 21] দুটি পাশা 21 রোল আউটপুট।


1

সি, 205 191

p;r(c){return 1+c+3*(rand()%6>2*c);}main(i,c,q,s){for(c=51-getchar();++i<23;printf("%u %u\n",q,s))q=r(c),p+=(s=r(-~c%3))<q;printf("%ser wins with %u points",p<11?"Comput":"Us",p<11?21-p:p);}

স্টিডিনের থেকে ব্যবহারকারীর পছন্দ পড়ে।


কিছু টিপ: for(c=51-getchar(p=0);, printf("%ser wins), মধ্যে পুনর্বিন্যাস অভিব্যক্তি rদিয়ে শুরু করতে (এবং স্থান সঞ্চয়।
ugoren

এবং আরও: (c+1)%3-> -~c%3, pস্ট্যাটিক তৈরি করুন (0 থেকে আরম্ভ করা), {}পরে সরান for( ;-> ,তাদের মধ্যে), বরাদ্দ পরিবর্তে p<11?:দু'বার ব্যবহার করুন । printfp,q
ugoren

এবং আপনি s,qলুপ printfএবং pপরে বৃদ্ধি সেট করতে পারেন , এইভাবে বন্ধনী সংরক্ষণ করুন। এছাড়াও cঅ্যাসাইনমেন্টটি ব্যবহার করতে %3বা %70,1,2 এর আলাদা অর্ডার দিয়ে পরিবর্তন করুন ।
ugoren

1

গুণক

এর সাথে রয়েছে: 388

ছাড়াই: 300

USING: arrays formatting io kernel math math.parser prettyprint random sequences ;
IN: N
CONSTANT: d { { 3 3 3 3 3 6 } { 2 2 2 5 5 5 } { 1 4 4 4 4 4 } }
: p ( -- ) 1 read string>number [ 3 mod 1 + ] keep [ 1 - d nth ] bi@ 2array 21 iota [ drop first2 [ random ] bi@ [ 2array . ] 2keep < ] with map [ ] count [ 11 > "Comput" "Play" ? ] [ "er wins with %d points" sprintf ] bi append print ;

হ্যাঁ, গল্ফ করার সময় ফ্যাক্টরটি আসলে ব্যবহার করার মতো ভাষা নয় তবে এটি দুর্দান্ত।


0

পাইথন 182

from random import*
u=2+input()
r=[eval("int(choice(`0x1d67e987c0e17c9`[i%3::3])),"*21)for i in(u,u-1)]
U,C=map(sum,r)
print r,['Us','Comput'][U<C]+'er wins with %d points'%abs(U-C)

0

206 আর

u=scan()
D=list(c(rep(3,5),6),c(2,5),c(1,rep(4,5)))
S=sample
U=S(D[[u]],21,T)
C=S(D[[(u+1)%%3+1]],21,T)
print(cbind(U,C))
W=sum(U>C)
I=(W>10)+1
cat(c("Computer","User")[I],"wins with",c(21-W,W)[I],"points")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.