মন্টি হল সমস্যা চালান


11

মন্টি হল সমস্যা অনুকরণ সম্পর্কে ইতিমধ্যে একটি প্রশ্ন ছিল । এই এক অন্য। ব্যবহারকারী হবে খেলা মন্টি হল সমস্যা। আপনার প্রোগ্রামটি হোস্টের ভূমিকা পালন করবে। মন্টিবোট, ভালো লাগলে।

পদক্ষেপ এখানে:

  1. তিনটি দরজার মধ্যে কোনটি পুরষ্কারটি লুকিয়ে রাখে (এলোমেলোভাবে) বাছুন।
  2. তিনটি দরজার একটি ভিজ্যুয়াল প্রদর্শন আউটপুট করুন। একটি সহজ ABCকরতে হবে। বা তিনটি স্কোয়ার। বা যাই হোক না কেন.
  3. দরজাগুলির মধ্যে একটি চয়ন করে ইনপুট পান। এটি পছন্দসই দরজায় মাউস ক্লিক বা একক বর্ণের ইনপুট ( B) বা যা কিছু হতে পারে।
  4. অন্য একটি দরজা খুলুন। আপনি নির্বাচিত দরজা খুলবেন না। আপনি প্রধান পুরষ্কারটি লুকিয়ে দরজাটি খোলেন না। এর অর্থ হতে পারে আপনার কোনও পছন্দ নেই, বা এটির অর্থ হতে পারে যে আপনার দুটি পছন্দ আছে। আপনার যদি দুজনের পছন্দ থাকে তবে এলোমেলোভাবে একটি বেছে নিন। দৃশ্যত নির্দেশ করুন যে দরজাটি খোলা হয়েছে এবং এর পিছনে কোনও পুরষ্কার লুকানো হয়নি hidden প্রোগ্রামের পাঠ্য-ভিত্তিক ইনপুট / আউটপুটটির জন্য, আউটপুটিংয়ের মতো সহজ হতে পারে AB0, Cএটির জন্য দরজাটি খোলা হয়েছে। আরও উদ্ভাবনী হতে নির্দ্বিধায়। আপনি যদি একটি জিইউআই প্রোগ্রাম করছেন, তবে আপনার প্রদর্শন পছন্দ আপনার উপর নির্ভর করবে।
  5. ব্যবহারকারীর কাছ থেকে ইনপুট গ্রহণ করুন। ব্যবহারকারী ইনপুট করতে পারেন stickবা switch(বা, জিইউআই প্রোগ্রামের জন্য, বোতামগুলিতে ক্লিক করতে পারেন, বা একটি নির্বাচন ইনপুট ব্যবহার করতে পারেন বা যা কিছু)। ব্যবহারকারী কিছু প্রবেশ করে তাহলে চেয়ে stickবা switch, বাস্তবায়ন undefined করা হয়। যা ইচ্ছা কর.
  6. পাঠ্য আউটপুট You won!বা You lost
  7. প্রোগ্রামটি শেষ করুন।

নিয়মাবলী:

  1. যখন আপনাকে এলোমেলোভাবে কিছু চয়ন করতে হবে , তখন ক্রিপ্টোগ্রাফিক এলোমেলো সম্পর্কে চিন্তা করবেন না। যে কোনও rand()ফাংশন করবে।
  2. প্রোগ্রাম অবশ্যই প্রতারণা করবেন না। গেমটি শুরুর আগে অবশ্যই পুরষ্কারটি থাকা উচিত। এর অর্থ হল যে পদক্ষেপগুলি প্রদত্ত ক্রমে অবশ্যই সম্পাদন করা উচিত: প্রথমে আপনার পুরস্কারটি গোপন করার জন্য একটি দরজা বেছে নিন, তারপরে খেলোয়াড়কে চয়ন করতে বলুন। চতুর্থ ধাপে কোন দরজাটি খুলতে হবে তার পছন্দটি অবশ্যই চতুর্থ ধাপে ঘটবে: এটি আগাম নির্বাচন করা হয়নি।
  3. Step ধাপে আউটপুট অবশ্যই সৎ হতে হবে।
  4. এটি কোড গল্ফ। সংক্ষিপ্ততম কোড জিতেছে।

এই সাইটে আমার প্রথমবারের মতো পোস্ট করা, তবে আমি অনেকটা লুকোচুরি করছি , তাই আমি মনে করি আমি আপনার নিয়মগুলির সাথে পরিচিত।
ট্রিগ

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

আমি পূর্বরূপ দিচ্ছি যে বিজয়ী আরও একটি গল্ফস্ক্রিপ্ট উত্তর হবে ...
ভিক্টর স্টাফুসা

1
বিটিডাব্লু, "উদ্ভাবক হওয়া" কোডগল্ফিংয়ের সাথে ভাল হয় না, কারণ উদ্ভাবক হওয়ার কারণে কিছু বাইট গ্রাস হয় এবং কোডগল্ফিংয়ের উদ্দেশ্য এর বিপরীত।
ভিক্টর স্টাফুসা

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

উত্তর:


2

এপিএল, 77

p←?3⋄d[e[?⍴e←(⍳3)~p,c←⍞⍳⍨⎕←d←3↑⎕A]]←'_'⋄⎕←d⋄⎕←'You','lost' 'won!'[(c=p)=5=⍴⍞]

প্রয়োজন ⎕IO←0। ডায়ালগ পরীক্ষিত।

ব্যাখ্যা

p←?3                       ⍝ p(rize) is a random number between 1 and 3
⎕←d←3↑⎕A                   ⍝ d(oors) is the string 'ABC'; output it
c←d⍳⍞                      ⍝ ask for one of the letters; c(hoice) is its position
o←e[?⍴e←(⍳3)~p,c]          ⍝ o(pen) is a random position except for p and c
d[o]←'_'                   ⍝ replace the o position in the d string with a '_'
⎕←d                        ⍝ output the modified d string
w←(c=p)=5=⍴⍞               ⍝ get choice, if it's stick (5 chars) and c=p, or neither, (w)in 
⎕←'You','lost' 'won!'[w]   ⍝ print the result

উদাহরণ

      p←?3⋄d[e[?⍴e←(⍳3)~p,c←⍞⍳⍨⎕←d←3↑⎕A]]←'_'⋄⎕←d⋄⎕←'You','lost' 'won!'[(c=p)=5=⍴⍞]
ABC
A
AB_
stick
You lost 
      p←?3⋄d[e[?⍴e←(⍳3)~p,c←⍞⍳⍨⎕←d←3↑⎕A]]←'_'⋄⎕←d⋄⎕←'You','lost' 'won!'[(c=p)=5=⍴⍞]
ABC
A
AB_
stick
You won! 

বাহ! তবে আমি মনে করি উত্সটিতে এমন একটি =রয়েছে যা ব্যাখ্যাতে পরিবর্তিত হয় ।
ট্রিগ

ধন্যবাদ, এটি একটি টাইপো ছিল, পোস্ট করার আগে আমি শেষ বাগটি ঠিক করেছিলাম।
টোবিয়া

2

পাইথন, 157

from random import*
C=choice
I=raw_input
p='\n> '
a='ABC'
g=C(a)
i=I(a+p)
print'You '+'lwoosnt!'[(i==g)^('w'in I(a.replace(C(list(set(a)-{g,i})),'_')+p))::2]

উদাহরণ:

$ python monty.py
ABC
> A
AB_
> switch
You won!

2

পাওয়ারশেল: 192 174

মূল থেকে পরিবর্তনগুলি:

  • -8 অক্ষর যেহেতু দরজাগুলির ভিজ্যুয়াল প্রদর্শনটি "যাই হোক না কেন" হতে পারে আমি বুঝতে পেরেছিলাম যে আমি অক্ষরের পরিবর্তে সংখ্যা ব্যবহার করে কিছু অক্ষর (বিশেষত, স্ট্রিংগুলি সংজ্ঞায়িত করার জন্য প্রয়োজনীয় অ্যাস্ট্রোফেস) সংরক্ষণ করতে পারি।
  • -8 অক্ষর বিশেষত একক-অঙ্কের পছন্দ করে, প্রধান সংখ্যাগুলি দরজা উপস্থাপনের জন্য আমি হোস্টের সম্ভাব্য পছন্দ বা প্লেয়ারের ডোর অদলবদলের জন্য দরজা মেলে যখন প্রয়োজন হয় তখন আমি তুলনামূলক অপারেটরের পরিবর্তে সংক্ষিপ্ত মডুলো অপারেটরটি ব্যবহার করতে পারি। ( সংক্ষেপে এখানে ব্যাখ্যা করা হয়েছে। )
  • -2 অক্ষর ফাইনালের জয় / হারের প্রতিক্রিয়াগুলি অদলবদল করে / অন্য বিবৃতিতে আমাকে সেখানে মডুলো ট্রিকটি ব্যবহার করার অনুমতি দেয়।

গল্ফ কোড

$w=($d=3,5,7)|random;357;$p=read-host;-join$d-replace($h=$d|?{$_%$w-and$_%$p}|random),0;if((read-host)-match'w'){$p=$d|?{$_%$p-and$_%$h}}if($p%$w){'You lost'}else{'You won!'}

মন্তব্যের সাথে আন-গল্ফ কোড

# Set up an array of doors ($d), and choose one to be the winner ($w).
$w=($d=3,5,7)|random;

# Show doors.
357;

# Get input and save player's choice ($p).
$p=read-host;

# Join the doors into one string, replacing the host's choice ($h) with a zero, and display them again.
-join$d-replace
(
    # Host will randomly choose a door from those which are not evenly divisible by $w or $p.
    $h=$d|?{$_%$w-and$_%$p}|random
 ),0;

# Get input from player. If it contains a 'w', switch doors.
# While this is generally a sloppy way to distinguish 'switch' from 'stick', it is allowed by the rules.
# "If the user enters anything other than stick or switch, the implementation is undefined. Do whatever you want."
if((read-host)-match'w')
{
    # Player will switch doors to one which is not evenly divisible by the $h or the original $p.
    $p=$d|?{$_%$p-and$_%$h}
}

# Announce the result.
# If $p is not evenly divisible by $w, player has lost. Otherwise, they have won.
if($p%$w){'You lost'}else{'You won!'}

# Variables cleanup - not included in golfed code.
rv w,d,p,h

আমি এটি পছন্দ করি যদি এটিতে 'ডাব্লু' কৌশল থাকে।
ট্রিগ

ঘটনাচক্রে, আমি মূলত বলেছিলাম যে ইনপুটটি "স্টিক" বা "স্যুইচ" ব্যতীত অন্য কিছু হলে প্রোগ্রামটি শেষ করা উচিত, তবে আমি পোস্ট করার আগে আমার মন পরিবর্তন করেছি।
ট্রিগ

@TRiG এর জন্য ধন্যবাদ। যদিও এটি কার্যকর করা কঠিন হত না, এটি কিছুটা ব্লাট যোগ করত।
ইসজি

এবং বিভিন্ন কৌশল (আপনার ডাব্লু সনাক্তকরণ, বা চরিত্র গণনা ) যাইহোক, আরও মজাদার।
ট্রিগ

0

জাভাস্ক্রিপ্ট, 221 197

(function(q,r,s,t,u,v){f='ABC';d=[0,1,2];b=q()%3;a=r(f);d.splice(a,1);(a==b)?(r(f[d[q()%2]])==t)?s(u):s(v):(r(f[d[(d[0]==b)+0]])!=t)?s(u):s(v)})(Date.now,prompt,alert,'stick','You won!','You lost')

এটি বিলম্বের নিশ্চয়তা দেওয়ার জন্য একটি প্রম্পট সহ এলোমেলো হওয়ার জন্য ডেট.নো () তে দুটি কল ব্যবহার করে। ব্যবহারকারীর ইনপুটটি 0-ভিত্তিক সূচক (নিয়মটি "যাই হোক না কেন" বলেছিল)। নিম্নলিখিত সতর্কতাটি বলে যে কোন দরজাটি খোলা হয়েছিল। এটি কিছুটা দীর্ঘতর সংস্করণ যা এটি প্রতারণা করে না তা যাচাই করার জন্য ব্যবহারকারী চয়ন করার আগে উত্তর দেয়:

(function(q,r,s,t,u,v){f='ABC';d=[0,1,2];b=q()%3;s('ans:'+b);a=r(f);d.splice(a,1);(a==b)?(r(f[d[q()%2]])==t)?s(u):s(v):(r(f[d[(d[0]==b)+0]])!=t)?s(u):s(v)})(Date.now,prompt,alert,'stick','You won!','You lost')

ফিডল: http://jsfiddle.net/acbabis/9J2kP/

সম্পাদনা: ধন্যবাদ ডেভ


আপনি এটি সংক্ষিপ্ত করতে পারেন 197: (function(q,r,s,t,u,v){f='ABC';d=[0,1,2];b=q%3;a=r(f);d.splice(a,1);(a==b)?((r(f[d[q%2]])==t)?s(u):s(v)):(r(f[d[(d[0]==b)+0]])!=t)?s(u):s(v)})(Date.now(),prompt,alert,'stick','You won!','You lost')
ডেভ

@ ডেভ এটি সহায়ক আমি এখানে টার্নারি অপারেটরটি ব্যবহার করার কথা ভাবিনি। যদিও আমি ডেট.নো () পাস করতে পারি না, কারণ এলোমেলো সংখ্যা স্বাধীন হওয়া দরকার। আমি তবে তারিখ পাস করতে পারি।
আইবাবিস

@acbabis "I can't pass Date.now() ... I can, however, pass Date.now"???
টিমটেক

@Timtech date.nowফাংশন পাস, date.now()ফাংশনের ফলাফলের পাসের
ডেভ

@ ডেভ ওহ, আমি পেয়েছি ধন্যবাদ :)
টিমটেক

0

পিএইচপি> = 5.4, 195 192

$r=[0,1,2];unset($r[$p=rand(0,2)]);$d='012';echo"$d\n";fscanf(STDIN,"%d",$c);unset($r[$c]);$d[array_rand($r)]='_';echo"$d\n",!fscanf(STDIN,"%s",$s),'You '.($s=='switch'^$c==$p?'won!':'lost.');

আউটপুট:

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