ক্রেপসের একটি অনুকরণ করুন


18

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

ক্রেপসের গেমের শুরুতে সেখানে আসার আসল বলা হয় । প্লেয়ার দুটি ডি 6 এস (ছয় পক্ষের ডাই) রোল করে এবং দুটি ডাই রোল যুক্ত করা হয়। যদি ফলাফলটি 7 বা 11 হয়, ব্যক্তি স্বয়ংক্রিয়ভাবে জিতে যায় (এটি প্রাকৃতিক হিসাবে পরিচিত )। ফলাফলটি যদি 2, 3 বা 12 হয় তবে ব্যক্তি স্বয়ংক্রিয়ভাবে হারাবে (এটি ক্রপিং আউট হিসাবে পরিচিত )। অন্যথায়, ফলাফলটি পয়েন্ট রাউন্ডের জন্য বিন্দু হিসাবে সেট করা হয় ।

এর পরে, পয়েন্ট রাউন্ড শুরু হয়। পয়েন্ট রাউন্ড চলাকালীন, খেলোয়াড়কে অবিচ্ছিন্নভাবে 2 ডি 6 রোল করতে হবে যতক্ষণ না পূর্ববর্তী রাউন্ড থেকে ব্যক্তি কোনও 7 বা তার পয়েন্ট রোল করে। যদি ব্যক্তি একটি 7 রোল করে তবে তারা হেরে যায়। যদি তারা তাদের বক্তব্য রোল করে তবে তারা জিতবে।

চ্যালেঞ্জ

একটি সাধারণ প্রোগ্রাম প্রয়োগ করুন যা ক্রেপের একটি খেলা অনুকরণ করে। যদি আসার আগে রাউন্ডটি কোনও ব্যক্তি প্রাকৃতিক বা ক্রপ-আউট করে, প্রোগ্রামটি ডাই-রোল অনুসারে "প্রাকৃতিক:" বা "ক্রপিং আউট:" আউটপুট নেয় এবং তারপরে প্রস্থান করা উচিত। অন্যথায়, এটি পয়েন্ট অনুসরণ করে "পয়েন্ট:" আউটপুট করা উচিত। তারপরে, পয়েন্ট রাউন্ডের সময়, এটি প্রতিটি ডাই-রোলটি আউটপুট করা উচিত যতক্ষণ না 7 বা পয়েন্ট পৌঁছে যায়। যদি ব্যক্তি জিতে যায় তবে এটির ফলাফল হওয়া উচিত "Pass"; যদি তারা হেরে তবে এটির ফলাফল হবে "Don't Pass"

রেফারেন্স বাস্তবায়ন

গ্রোভি, 277 বাইট

def a={return Math.random()*6+1};int b=a()+a();(b<4||b==12)?{println"Crapping out: "+b}():{(b==7||b==11)?{println"Natural: "+b}():{println"Point: "+b;for(;;){int x=a()+a();println x;(x==7)?{println"Don't Pass";System.exit(0)}():{if(x==b){println"Pass";System.exit(0)}}()}}()}()

এটি অনলাইনে চেষ্টা করুন।

নমুনা আউটপুট

Natural: 7

Crapping out: 3

Point: 9
4
8
11
9
Pass

এবং

Point: 5
3
7
Don't Pass

এটি , তাই সংক্ষিপ্ততম কোড জিততে পারে।

(অস্বীকৃতি: এই চ্যালেঞ্জটি কোনও উপায়ে জুয়া খেলা প্রচারের উদ্দেশ্যে নয় Remember মনে রাখবেন, বাড়িটি সর্বদা জিতে।


You can't make your program shorter by picking a random number between 1 and 12 for the die roll; it must be two numbers picked between 1 and 6.- [1, 12] এ [1, 6] এ দুটি অভিন্ন র্যান্ডম মান যুক্ত করার অনুরূপ একটি বিতরণ থেকে [1, 12] এলোমেলো মান বাছাই করার বিষয়ে কী?
মেগো

@ মেগো হো, পুরানো চ্যালেঞ্জ। হ্যাঁ ঠিক আছে। আমি মনে করি যে সতর্কতাটি কেবলমাত্র এটি নিশ্চিত করার জন্যই হয়েছিল যে লোকেরা বুঝতে পেরেছিল যে [1, 12] এর মধ্যে অভিন্ন বিতরণ 2d6 এর মতো নয়। আমি এটি আবার কিছুটা লিখব।
একটি স্প্যাগেটো

উত্তর:


6

রুবি 164

অনেকটাই অকপট. আকর্ষণীয় বৈশিষ্ট্য:

ক্রপিং আউট কেসগুলির সংক্ষিপ্তসার হিসাবে r%12<4এবং বাকি প্রাকৃতিক কেসগুলি সংক্ষিপ্ত করে দেওয়া হয় r%4==3

প্রাথমিক স্ট্রিংটি সঞ্চিত থাকে cএবং আরও রোলগুলি কেবল তখনই নেওয়া হয় যদি এটি পরে বর্ণের পরে একক বর্ণের চেয়ে বেশি হয় ?P(যা কেবলমাত্র এর জন্য ঘটে Point))

f=->{rand(6)+rand(6)+2}
s=0
r=f[]
print c=r%12<4?'Crapping out':r%4==3?'Natural':'Point',": #{r}
"
c>?P&&(until s==r||s==7
p s=f[]end
print s==7?"Don't ":"","Pass")

আপনি কীভাবে পরিবর্তে 2,3,7,11 বা 12 পৃথকভাবে বাকিগুলির জন্য যাচাই করেন সেভাবে প্রেম করুন!
জেরোইন

6

পাইথন 3, 190 বাইট

from random import*
r=randrange
p=print
a=r(5)+r(5)+2
c=890145//3**a%3
p(['Point:','Crapping out:','Natural:'][c],a)
if c<1:
 while 7!=c!=a:c=r(5)+r(5)+2;p(c)
 p(['Pass',"Don't pass"][c==7])

এটি সেলোয়ের উত্তরের ভিত্তিতে ; আমি কয়েকটি লম্বা কন্ডিশনকে একটি যাদু নম্বর দিয়ে প্রতিস্থাপন করেছি যা প্রতিটি সংখ্যার জন্য একটি LUT এনকোড করে, একটি পরিবর্তনশীল পুনরায় ব্যবহার করে এবং আরও কয়েকটি বিবিধ গল্ফ করে। গল্ফ স্থির ঘর; এটি সম্ভবত 170 এর নিচে পাওয়া সম্ভব।

আমি পাইথন 2 ব্যবহার করার চেষ্টা করিনি, সুতরাং এটি কম হবে কিনা জানি না।


1
আপনি কীভাবে সেই ম্যাজিক নম্বরটি পেয়েছিলেন এবং এটি কীভাবে কাজ করে তা বোঝানোর জন্য যত্নশীল?
কার্ল ন্যাপফ

5

C99, 366 312 293 277 বাইট

এটি এখানে আমার প্রথম পোস্ট, তাই আমি অনুমান করতে যাচ্ছি যে এটি অনেকটা উন্নত হতে পারে।

#include<stdlib.h>
#include<time.h>
#define r rand()%6+1
#define p printf(
main(c,s){srand(time(0));s=r+r;int*a=s==7||s==11?"Natural:%d":2-s||3-s||12-s?0:"Crapping out:%d";if(a){p a,s);return 0;}p"Point:%d\n",c=s);do p"%d\n",s=r+r);while(7-s&&s-c);p(7-s)?"Pass":"Don't pass");}

প্রসারিত সংস্করণ

#include<stdlib.h>
#include<time.h>
#define r rand()%6+1
#define p printf(
main(c,s){
    srand(time(0));
    s=r+r;
    int*a=s==7||s==11?"Natural:%d":2-s||3-s||12-s?0:"Crapping out:%d";
    if(a) {p a,s);return 0;}
    p"Point:%d\n",c=s);
    do p"%d\n",s=r+r);
    while(7-s&&s-c);
    p(7-s)?"Pass":"Don't pass");
}

আপনি দেখতে পাচ্ছেন যে এখানে অপ্রয়োজনীয় পরিমাণ রয়েছে যা সম্ভবত শেষ করে দেওয়া যায়।

এটি আরও ছোট করতে সহায়তা করার জন্য @ মেগোতে ক্রেডিট।


1
যতক্ষণ এটি কোথাও সংকলিত হয় ততক্ষণ আপনি ভাল।
lirtosiast

@ মেগো এই নির্দেশের জন্য ধন্যবাদ, যেটি 19 বাইট থেকে মুক্তি পেতে পারে।
ক্রিস লুনাম 23

পরিত্রাণ বন্ধ আরো কিছু পেয়েছেন aএবং bএবং তিন অপারেটর সহ বিয়োগ পদ্ধতি ব্যবহার করে।
ক্রিস লুনাম

5

পাইথন 2, 226 224 বাইট

প্রথম পাস এবং সেখানে প্রচুর কোড রয়েছে:

from random import*
r=randrange
a=r(5)+r(5)+2
if a in[7,11]:print'Natural:',a
elif a in[2,3,12]:print'Crapping out:',a
else:
 print'Point:',a
 b=0
 while b not in[7,a]:b=r(5)+r(5)+2;print b
 print'Pass'if b-7else"Don't pass"

মেগোকে 2 বাইটের জন্য ধন্যবাদ !


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

উপস! 'পয়েন্ট: #' মুদ্রণ নয় স্থির। আউটপুটে, একটি স্থান আছে।
সেপ্টেম্বর সেলোও

আহ, ঠিক আছে. আমি পাইথনকে খুব বেশি ব্যবহার করি না তাই আমি কীভাবে কাজ করব তা নিয়ে আমি অনিশ্চিত ছিলাম।
একটি স্প্যাগেটো

পাইথন 3-তে আমি আপনার কোডটি 198 টি লিখে গল্ফড করেছিলাম, যা পাইথন-এ 192-র 2 you
lirtosiast

@ থমাসকওয়া যদি আপনি এতে একটি গুচ্ছ কাজ রাখেন তবে আলাদা উত্তর হিসাবে পোস্ট করুন যাতে আপনি এর জন্য কিছু খ্যাতি পেতে পারেন।
সেলেলো

3

পিএইচপি 230 228 218 199 192 188 বাইট

186 বাইট ছাড়া <?

<?$a=rand(1,6)+rand(1,6);$a%4==3?die("Natural: $a"):$a%12<4?die("Crapping out: $a"):print"Point: $a
";while(1){($b=rand(1,6)+rand(1,6))==7?die("Don't Pass"):$b==$a?die("Pass"):print"$b
";}

কোড গল্ফ এ প্রথম প্রচেষ্টা! নিশ্চিত না </br>যদিও ব্যবহারের অনুমতি দেওয়া হবে? এটি কোনও কনসোলে কাজ করবে না (নতুন লাইন হিসাবে)। যদি এটি অনুমোদিত না হয় এবং আমার কোডটি পরিবর্তন করে দেয় তবে আমাকে জানান।

সম্পাদনা (16-8-16): কোডগল্ফের উন্নত হওয়ার পরে আমি কিছু সম্ভাব্য উন্নতি লক্ষ্য করেছি। এটি এখনও কমান্ড লাইন ইন্টারফেস ব্যবহার করে কাজ করে। </br>হার্ড এন্টার দিয়ে প্রতিস্থাপন করা হয়েছে ।


প্রাকৃতিক বানান "প্রাকৃতিক", "প্রকৃতি" নয়।
ক্রিটসি লিথোস

এটা পরিবর্তন। ধন্যবাদ
জেরোইন

2

জাভাস্ক্রিপ্ট 262

var r=(x=>Math.floor(Math.random()*6+1)),a=r()+r();if(a<4||a==12){alert("Crapping out: "+a)}else if(a==7||a==11){alert("Natural: "+a)}else{alert("Point: "+a);while(1){var b = r()+r();if(b==a){alert("pass");break}if(b==7){alert("dont't pass");break}alert(""+b)}}


1

পাওয়ারশেল , 181 183 179 178 167 165 বাইট

-10 বাইট মজির জন্য ধন্যবাদ
-2 বাইট Xcali ধন্যবাদ

switch -r($z=&($x={(random 6)+(random 6)+2})){'7|11'{"Natural: $z"}'2|3'{"Crapping out: $z"}default{"Point: $z"
do{($m=&$x)}until($m-in7,$z)"Don't "*!($m-7)+'Pass'}}

এটি অনলাইন চেষ্টা করুন!

নিবন্ধভুক্ত সংস্করণ:

#Switch using regex on $z which is...
#&($x={...}) first assigns $x to a scriptblock then calls it, saving the return to $z
switch -r($z=&($x={(random 6)+(random 6)+2})){
    '7|11' {"Natural: $z"}
    '2|3' {"Crapping out: $z"}
    default{
        "Point: $z"

        #Call the diceroll scriptblock until you Pass,
        #while pushing each roll to output
        do{($m=&$x)}
        until($m-in7,$z)
        "Don't "*!($m-7)+'Pass'
    }
}

তালিকা তৈরির যুক্তিটি আবার একটি স্যুইচটিতে পুনর্নির্মাণ করা হয়েছে সেখানে কয়েকটি কম স্টিকিং পয়েন্ট রয়েছে। আমি মনে করি এটি এখনও একটি চমত্কার ঠিক পদ্ধতি। +2 বাইটস একটি বাগ ঠিক করা।


1
অসাধারণ! এটি 178 বাইট
mazzy

আমি মনে করি শর্তটি -notin (7,$z)নিয়মের সাথে সম্পর্কিত নয় During the point round, the player must continuously roll ... the previous round। এখন লুপ ফিনিস যখন $mসমান 7বা প্রথম বৃত্তাকার।
mazzy

1
@ ম্যামজি এটি প্রশ্নের শব্দের একটি বিষয়। এখানে মাত্র দুটি রাউন্ড রয়েছে। আপনি একবারে Come-outরাউন্ডে পয়েন্ট সেট করেছেন এবং এটি পুরো Pointরাউন্ডের জন্য আপনার লক্ষ্য নম্বর । previous roundবোঝায় Come-outবৃত্তাকার
Veskah

1
ধন্যবাদ। 168 বাইট
mazzy

2
1?আপনার ক্রেপস রেজেক্স থেকে অপসারণ করে আপনি আরও দু'জনকে ছাড়তে সক্ষম হবেন ।
এক্সকালি

0

আর, 197 বাইট

 r=sum(sample(6,2,T));if(r%%12<4)cat("Crap Out",r)else if(r%%4==3)cat("Natural",r)else{cat("Point",r);while(T){cat("",q<-sum(sample(6,2,T)));if(q==7){cat(" Don't");break};if(q>r)break};cat(" Pass")}

Ungolfed

r=sum(sample(6,2,T))
if (r%%12<4)  {
    cat("Crap Out",r) 
} else if (r%%4==3) {
    cat("Natural",r)
} else { 
    cat("Point",r)
    while (T) {
        q = sum(sample(6,2,T))
        cat("",q)
        if (q==7) {
            cat(" Don't")
            break
        }
        if (q>r) break
    }
    cat(" Pass")
}


0

রুনিক এনেক্যান্টমেন্টস , 151 বাইট

R}}6'RA6'RA2++{{B͍
00B:7=S:b={+?\"Natural: "@>
pping out: "@\:2=}:3=}:c={{++?/"Cra
{:}≠   ?\ 6?;$$k\/ak$00B:$:7≠?\
"Don't "R"Pass"a/\$:$" :tnioP"\

এটি অনলাইন চেষ্টা করুন!

এলোমেলো সংখ্যার বিষয়ে একটি বাগ ফিক্স করার পরে (এটি প্রতিবার পুনরায় বীজ বপন করা 'RAহত, এবং বীজটি সিস্টেম সময় ছিল, ফলে পুনরাবৃত্ত মানগুলির বিশাল রান ঘটে) এটি সঠিকভাবে কাজ করে।

ব্যাখ্যা

এন্ট্রিটি দ্বিতীয় লাইনে রয়েছে, প্রথম পংক্তির অবধি যতক্ষণ না দুটি ডাইস ঘূর্ণায়মান ও সংমিশ্রণের জন্য কাজ করে।

কিছু প্রান্ত-মোড়ক এবং পাঠযোগ্যতার জন্য নিবন্ধিত কার্ল পুনঃনির্দেশগুলি সহ প্রোগ্রাম প্রবাহ

   R}}6'RA6'RA2++{{B͍                      Roll 2, sum, return
   >00B:7=S:b={+?\                        Entry, make first roll, compare to 7 and 11.
                  "Natural: "@            If true, print "Natural: " and the value, else go down
                 \:2=}:3=}:c={{++?/       Compare to 2, 3, and 12.
"Crapping out: "@                         If true, print "Crapping out: " and the value, else go up
                     \$:$" :tnioP"\       Print "Point: " and value (IP is travelling RTL)
                     /ak$00B:$            Print newline, roll, print
:7≠?\                                     Compare to 7
    \"Don't "R"Pass"ak$$;                 If equal, print a newline and "Don't Pass"
     {:}≠   ?\                            Else compare to initial roll.
             R"Pass"ak$$;                 If equal, print a newline and "Pass"
              6?......ak$00B              Else return to roll loop by printing a newline
                                              and rolling again (. are skipped instructions)

কেবলমাত্র 4 টি এনওপি নির্দেশাবলী ( {:}≠...?\.6?) রয়েছে যা অন্যান্য লাইনে প্রয়োজনীয় স্থানের (যেমন "Don't "স্ট্রিংয়ের দৈর্ঘ্য ) কারণে মুছে ফেলা খুব কঠিন হবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.