সর্বাধিক সম্ভাব্য সংখ্যাটি না ঘটিয়ে আপনি কতটি পাশা রোল করতে পারেন


26

সমস্যা

n=2পাশা থেকে শুরু :

  • রোল nডাইস, প্রতিটি ডাইয়ের সমান সম্ভাব্য সংখ্যার 1 থেকে 6 নম্বর সহ।
  • তাদের যোগফল nডাইসের জন্য সবচেয়ে সম্ভাব্য যোগফলের সমান কিনা তা পরীক্ষা করে দেখুন 3.5*n
    • যদি তারা সমান হয় তবে সমাপ্ত করুন।
    • অন্যথায়, মুদ্রণ করুন nএবং n+2পাশা দিয়ে শুরু থেকে পুনরাবৃত্তি করুন

আপনার কোডটি এই পদ্ধতিটি হুবহু করতে হবে না, তবে এলোমেলো সংজ্ঞাটির আমাদের সংজ্ঞা অনুসারে এলোমেলোভাবে আউটপুটটিকে সম্ভাব্য হিসাবে সমান করা উচিত ।

আপনার প্রোগ্রামটি তাদের নিজস্ব লাইনে সমস্ত সংখ্যা আউটপুট করা উচিত; উদাহরণস্বরূপ, যদি প্রোগ্রামটি 8 ডাইস পর্যন্ত উঠে যায় এবং 8 পাশ্বের সাথে সর্বাধিক সম্ভাব্য সংখ্যাটি ঘূর্ণিত হয় তবে আউটপুটটি হবে:

2
4
6

উদাহরণ রান

2 ডাইসে, 7সবচেয়ে সম্ভাব্য যোগফল। ধরা যাক, ঘূর্ণিত সংখ্যাগুলি ছিল 2এবং 3। তারপরে, আপনি মুদ্রণ করতে হবে 2

4 ডাইসে, 14সবচেয়ে সম্ভাব্য যোগফল। আসুন বলতে সংখ্যার ঘূর্ণিত ছিল 3, 4, 2, এবং 5। তারপরে, যোগফলটি 14তাই প্রোগ্রামটি এখানেই শেষ হবে।

এই ক্ষেত্রে চূড়ান্ত আউটপুট হয় "2"

বিধি


এই উত্তরটি যেমন দাঁড়িয়ে আছে ততই অস্পষ্ট। ইনপুট আছে কি, বা লুপ হিসাবে কোনও ইনপুট থেকে আউটপুট উত্পন্ন করার অর্থ? কোন এলোমেলো আছে? আমি কোনও এলোমেলোভাবে জড়িত বলে মনে হচ্ছে না।
হাইপারনিউটারিনো

যাইহোক, পিপিসিজিতে আপনাকে স্বাগতম! :)
হাইপারনিউট্রিনো

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

@ প্রশস্ততা তাই যদি আমি সঠিকভাবে বুঝতে পারি, তবে আমি 2, 4, 6, 8, ...এই পুনরাবৃত্তির জন্য সবচেয়ে সম্ভাব্য সংখ্যার উপর চাপ না দেওয়া পর্যন্ত প্রতিবারের মতো অনেক রাইস রোল আউটপুট করে রাখব বলে মনে করা হচ্ছে ?
হাইপারনিউট্রিনো

5
আমাদের প্রতিক্রিয়ার ভিত্তিতে আপনার চ্যালেঞ্জ সম্পাদনা করতে সময় দেওয়ার জন্য আপনাকে ধন্যবাদ! রেকর্ডের জন্য, আমাদের একটি জায়গা রয়েছে যেখানে পোস্ট করার আগে আপনি কিছু বিবরণ নিয়ে কাজ করার জন্য চ্যালেঞ্জগুলি পোস্ট করতে পারেন: স্যান্ডবক্স
FryAmTheEggman

উত্তর:


17

পাইথন 2 , 70 বাইট

from random import*
n=2
while eval("+randrange(6)-2.5"*n):print n;n+=2

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

কৌশলটি হ'ল evalস্ট্রিংয়ের মতো দেখতে বিন্যাস করে যোগফলকে গণনা করা

'+randrange(6)-2.5+randrange(6)-2.5'

সঙ্গে nমত প্রকাশের কপি ঘনিভূত। randrange(6)আউটপুট থেকে একটি র্যান্ডম সংখ্যা [0,1,2,3,4,5], যা দ্বারা নিচে স্থানান্তরিত করা হয় 2.5গড় আছে 0। যখন যোগফল হয় 0, whileশর্তটি ব্যর্থ হয় এবং লুপটি সমাপ্ত হয়।

ব্যবহারের বিকল্পটি map4 বাইট দীর্ঘ ছিল:

from random import*
n=2
while sum(map(randrange,[6]*n))-2.5*n:print n;n+=2

আমি ডাইয়ের শূন্যকে বদলে দেবার জন্য সমান-দৈর্ঘ্যের এক্সপ্রেশনগুলির একগুচ্ছ খুঁজে পেয়েছি, তবে এর চেয়ে কম নয়

randrange(6)-2.5
randint(0,5)-2.5
randrange(6)*2-5
uniform(-3,3)//1

11
আমার এটা ভাল লেগেছে! মূলত কারণ এটি আমি একমাত্র বুঝতে পারি।
জোকারভার

7

এমএটিএল , 13 বাইট

`@E6y&Yrs@7*-

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

ব্যাখ্যা

`       % Do...while top of the stack is truthy
  @E    %   Push 2*k, where k is the iteration index starting at 1
  6     %   Push 6
  y     %   Duplicate 2*k onto the top of the stack
  &Yr   %   Array of 2*k integers distributed uniformly in {1, 2, ..., 6}
  s     %   Sum
  @7*   %   Push 7*k
  -     %   Subtract
        % End (implicit). If the top of the stack is non-zero, the loop
        % proceeds with the next iteration. Else the loop is exited.
        % Display stack (implicit)

6

জেলি ,  19  14 বাইট

লিকি নুনের সাহায্যে -5 বাইট (গণনা থেকে পুনরাবৃত্তিতে এগিয়ে যাওয়া)

‘‘6ṗX_3.L⁶S?Ṅß

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

এটি অনলাইন চেষ্টা করুন! - যে কোনও সময় 6 ডাইস ছাড়িয়ে গেলে মেমরির ব্যবহারের কারণে টিআইও এটি মেরে ফেলে তবে এটি নীতিগতভাবে কাজ করে - এটি করতে 40 ডলারও লাগে।

একটি আরও বন্ধুত্বপূর্ণ 15 বাইট সংস্করণ যা এত বেশি সময় নেয় না বা এত বেশি মেমরির প্রয়োজন হয় না তা এখানে উপলব্ধ ।

কিভাবে?

প্রতিটি ৩.৫ দ্বারা কমে আসা মুখগুলির যোগফল শূন্য না হওয়া পর্যন্ত অবিচ্ছিন্নভাবে আরও 2 ডাইস রোল করে, ডাইসের সংখ্যাটি যেমন যায় তেমন মুদ্রণ করে, শূন্য পৌঁছে গেলে এটি কোনও স্থান ত্রুটির কারণ হিসাবে কোনও স্থানের অক্ষর ব্যবহার করার চেষ্টা করে।

‘‘6ṗX_3.L⁶S?Ṅß - Main link: no arguments (implicit left=zero)
‘              - increment (initial zero or the previous result)
 ‘             - increment  (= # of dice to roll, n)
  6            - literal 6
   ṗ           - Cartesian power - all possible rolls of n 6-sided dice with faces 1-6
    X          - pick one of them
      3.       - literal 3.5
     _         - subtract 3.5 from each of the roll results
           ?   - if:
          S    -          sum the adjusted roll results (will be 0 for most common)
        L      - ...then: length (number of dice that were rolled)
         ⁶     - ...else: literal ' ' (causes error when incremented in next step)
            Ṅ  - print that plus a newline
             ß - call this link with the same arity (as a monad with the result)

বাহ, এটি খুব কম বাইট। সাবাশ! আরও কয়েক জন উত্তর না দেওয়া পর্যন্ত আমি এটি গ্রহণে স্থির আছি।
জোয়েকারভার

হ্যাঁ গ্রহণ করার আগে বেশ কিছুক্ষণ অপেক্ষা করা স্বাভাবিক, এমনকি যদি কখনও তা করে। অনেকে এক বা দুই সপ্তাহ সময় দেয়।
জোনাথন অ্যালান

এছাড়াও, আপনাকে পুনরাবৃত্তির সমস্ত আউটপুট দেওয়ার কথা রয়েছে - কেবল সর্বশেষটি নয়।
জোকারভার

ওহ, আমি একটি পুরানো সম্পাদনা উত্তর দিয়েছি - এটি সম্পূর্ণরূপে এটি পরিবর্তন করে, আমি এই পদ্ধতিটি অনেক উপায়ে ব্যবহার করতে পারি না।
জোনাথন অ্যালান

ওহ শুধু nএস অপেক্ষা করুন , ঠিক আছে সম্ভবত এটি উদ্ধারযোগ্য। আমি ভেবেছিলাম আপনার অঙ্কগুলি বোঝানো হয়েছে :)
জোনাথন অ্যালান

6

টিআই-বেসিক, 28 বাইট

2→N
While mean(randInt(1,6,N)-3.5
Disp N
N+2→N
End

ব্যাখ্যা

  • randInt(1,6,N) 1 থেকে 6 থেকে এন এলোমেলো সংখ্যার একটি তালিকা তৈরি করে
  • mean(randInt(1,6,N)-3.5 রোলগুলির গড় 3.5 মিলিয়ে নেমে যায়
  • While গড় প্রকাশটি শূন্যের সমান হওয়া অবধি অবধি চলবে (সবচেয়ে সম্ভাব্য সমষ্টি)

5

আর , 49 বাইট

n=2
while(sum(sample(6,n,T)-3.5)){print(n)
n=n+2}

sample(6,n,T)প্রতিস্থাপনের সাথে nপরিসীমা থেকে (ছদ্ম) এলোমেলো নমুনা উত্পন্ন করে 1:6। প্রতিটি উপাদান থেকে 3.5 কে বিয়োগ করলে একটি ফলাফল পাওয়া যায় যার ফলস্বরূপ sum0 (মিথ্যা) যদি হয় এবং কেবল যদি এটি সর্বাধিক সাধারণ মান হয়।

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

বিজোড় পাশা রোলগুলি এড়িয়ে যায়।


এটি আমার জন্য প্রতিবার 80 আউটপুট বলে মনে হচ্ছে, সম্ভাব্য বাগ?
জোকারভার

@ প্রশস্তি আপনি আবার চেষ্টা করার জন্য শেষে ফাঁকা স্থান যুক্ত করতে পারেন; এটি প্রতিবার ইনপুট / কোড
জিউসেপ

3
@ জিউস্পেপ আপনি সেটিংসের অধীনে টিআইওতে ক্যাশে অক্ষম করতে পারবেন।
xnor

আমি @ xnor এর মতো ক্যাশে অক্ষম করার পরে বলেছিলাম, এটি খুব ভাল কাজ করেছে। উত্তর করার জন্য ধন্যবাদ!
জোকারভার

@ এক্সনর কে জানত! ভবিষ্যতে জেনে রাখা ভাল।
জিউসেপ

4

জাভা 8, 123 149 113 108 বাইট

()->{for(int n=0,s=1,i;s!=n*7;){for(i=s=++n*2;i-->0;s+=Math.random()*6);if(s!=n*7)System.out.println(n*2);}}

অথবা 107 বাইট যদি আমরা ব্যবহার একটি Object nullঅব্যবহৃত প্যারামিটার হিসাবে পরিবর্তে।

বাগ- ফিক্সের জন্য +26 বাইটস, মন্তব্যগুলিতে @ জুলাইস দ্বারা সঠিকভাবে নির্দেশিত । অলিভারগ্রাগোয়ারের দুর্দান্ত চিন্তাভাবনার
জন্য -১৪ বাইট ধন্যবাদ !

ব্যাখ্যা:

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

()->{                           // Method without parameter nor return-type
  for(int n=0,                  //  Amount of dice
          s=1,                  //  Sum
          i;                    //  Index
      s!=n*7;){                 //  Loop (1) as long as the sum doesn't equal `n`*7,
                                //  because we roll the dice per two, and 3.5*2=7
    for(i=s=++n*2;              //   Reset both the index and sum to `n`*2,
                                //   so we can use random 0-5, instead of 1-6
                                //   and we won't have to use `+1` at `Math.random()*6`
        i-->0;                  //   Inner loop (2) over the amount of dice
        s+=Math.random()*6      //    And increase the sum with their random results
    );                          //   End of inner loop (2)
    if(s!=n*7)                  //   If the sum doesn't equal `n`*7
      System.out.println(n*2);  //    Print the amount of dice for this iteration 
  }                             //  End of loop (1)
}                               // End of method

1
আমি মনে করি ফাংশনটিতে একটি ত্রুটি আছে। যদি rসমান 3.5*nপ্রোগ্রাম সরাসরি বিনষ্ট করা উচিত নয়। তবে, আমি যদি ফাংশনটি সঠিকভাবে বুঝতে পারি তবে এটি nশেষ হওয়ার আগে শেষবারের মতো মুদ্রণ করবে ।
রাজনগুল

@ রজনগুল আসলে, এটি অতিরিক্ত সময় মুদ্রণ করছিল না। এটি তবে বাগড হয়েছিল। এটি আগে কী করেছিল: এলোমেলো 1-12 (বাগ 1: 2-12 হওয়া উচিত); এটি 7 এর সমান কিনা তা পরীক্ষা করুন: এটি যদি হয়: আমরা মুদ্রণ ছাড়াই সম্পন্ন করেছি; যদি তা না হয়: আবার 2 ডাইস রোল করুন (বাগ 2, আবার 2 এর পরিবর্তে 4 ডাইস হওয়া উচিত); তারপরে ২ টি মুদ্রণ করুন এবং ২ nদ্বারা বাড়িয়ে নিন So সুতরাং এতে দুটি বাগ (২-২ এর পরিবর্তে ১-১২; এবং ২ -> ২ -> ৪ -> - -> ... এর পরিবর্তে 2 -> এর পরিবর্তে 2 টি বাগ রয়েছে) 4 -> 6 -> ...)। এটি তবে সঠিকভাবে মুদ্রণ করছিল, কারণ এটি System.out.println(n),n+=2যদি rসত্যিই সমান হত তবে তা যেতে পারত না 3.5*n
কেভিন ক্রুইজসেন

2
"একবারে দুটি ডাইস রোল করুন, 2-12 থেকে এলোমেলো সংখ্যা বাছাই করে" - এটি সম্ভবত দুটি পাশা ঘূর্ণায়মান এবং প্রশ্নে প্রয়োজনীয় সংখ্যার যোগ করার সমতুল্য নয়, সুতরাং এটি সঠিক সমাধান নয়।
জুলে

1
কয়েক বাইট (113) দ্বারা ছোটো, কিন্তু সম্ভবত এখনও golfable: ()->{for(int n=2,s=0,e=7,i;s!=e;n+=2,e+=7){for(i=n,s=n;i-->0;)s+=Math.random()*6;if(s!=e)System.out.println(n);}}। এছাড়াও, জুলসের মন্তব্য এবং আমার ব্যাখ্যা সম্পর্কিত সঠিক। nডাইস, sসমষ্টি, eপ্রত্যাশিত, iসূচক। অবশেষে, যোগফলটি nএক +1, nসময় এড়াতে শুরু করে এবং s!=eপুনরাবৃত্তি হয় কারণ আমি কীভাবে কীভাবে এড়ানো যায় তা জানি না।
অলিভিয়ার গ্রাগোয়ার

1
আমি এটি আবার কিছুটা গল্ফ করেছি;)()->{for(int i=0,s=1,j;s!=i*7;){for(j=s=++i*2;j-->0;)s+=Math.random()*6;if(s!=i*7)System.out.println(i*2);}}
অলিভিয়ের

3

05 এ বি 1 ই , 22 20 বাইট

-2 বাইট ধন্যবাদ এমিগিনার কাছে

[YF6L.RO}7Y*;ïQ#Y=ÌV

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

ব্যাখ্যা

[YF6L.RO}7Y*;ïQ#Y=ÌV
[                    # Infinite loop start
 YF     }            # Y times... (Y defaults to 2)
   6L.R               # Push a random number between 1 and 6 (why does this have to be so looooong ._.)
       O              # Sum
         7Y*;ï       # Push 3.5 * Y as an int
              Q      # Is it equal to 3.5 * Y?
               #     # If so: Quit
                Y    # Push Y
                 =   # Print without popping
                  ÌV # Set Y to Y + 2

1
আপনি সরানোর Oপরে .Rযদি সরান )এবং s
এমিংগা

3

আর, 48 44 42 বাইট

জিউসেপের উত্তরের উপর একটি 5 বাইট উন্নতি ।

while(sum(sample(6,F<-F+2,1)-3.5))print(F)

এটি (আব) Fডিফল্টরূপে নির্ধারিত একটি পরিবর্তনশীল যা বাস্তবায়িত হয় FALSEযা কোয়ার্স করে 0এবং তারপরে বৃদ্ধি করা যেতে পারে, আমাদের কাউন্টার ভেরিয়েবলটি আরম্ভ করার প্রয়োজনীয়তা সংরক্ষণ করে।


1
অবশ্যই, আপনি দুই বাইট কল করে সংরক্ষণ করতে পারবেন sample(6)পরিবর্তে sample(1:6)কিন্তু খুঁজে পার 44 এখনও 44 .... codegolf.stackexchange.com/a/82343/67312
: Giuseppe

@ জিউসেপ অবশ্যই, ধন্যবাদ! আমি এখনই উত্তর সম্পাদনা করেছি।
rturnbull

2

পিএইচপি , 75 বাইট

for($d=2;(++$i*7/2-$r+=rand(1,6))||$i<$d;)$i%$d?:$d+=1+print"$d
".$r=$i="";

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


1
5^2/++$i*$d+=rand()%6লুপের জন্য সামান্য খাটো শর্ত। এছাড়াও আমি মনে করি বর্তমান লুপটি ভুলভাবে প্রস্থান করে যদি খুব প্রথম "ডাইস" রোলডটি "1" হয় (এটি প্রাথমিকের জন্য 0 জেনারেট করে $d)।
ব্যবহারকারী59178

@ user59178 নিস আইডিয়া তবে এটি শূন্য ত্রুটির দ্বারা বিভাজন হতে পারে তাই আমাকে অবশ্যই এটি সংশোধন করতে হবে। এই ক্ষেত্রে থামার আগে আপনি আমার সমাধানটি ঠিক বলেছেন যা ভুল।
জার্গ হালসারম্যান

আপনার 45-বাইট উত্তরটি অবৈধ কারণ ফলাফল বিতরণ প্রশ্নের মত একই নয়, এখানে দেখুন । আপনার 42-বাইট উত্তরটি, আমার মনে হয়, এটিও ভুল বিতরণ ব্যবহার করে; এটি উদাহরণস্বরূপ ধরে নেওয়া যায় বলে মনে হয় যে দুটি ডাইসের জন্য এটির যোগফল হিসাবে 2 এবং 7 হওয়ার সমান সম্ভাবনা রয়েছে।

@ পাক হ্যাঁ 45 বাইট উত্তরটি অবৈধ। আমি মনে করি যে 42 বাইট সংস্করণে যা ঘটেছিল তা আপনার চিন্তাভাবনা ভুল। প্রসারিত সংস্করণটি দেখুন এটি চেষ্টা করুন অনলাইনে!
জার্গ হালসারম্যান

@ জার্গহালসারম্যান এই প্রসারিত সংস্করণটি আমি যা বলেছি তা নিশ্চিত করে। একটি যথাযথ প্রয়োগে, bigger i এর বড় মানের জন্য $ r / $ এর মানটি আমি 3.5 এর কাছাকাছি হওয়া উচিত, তবে আমি তা ঘটতে দেখছি না। 9984 ডাইসের জন্য আমি গড়ে 1.16 পেয়েছি, এটি পরিসংখ্যানগতভাবে অত্যন্ত অসম্ভব।


1

গণিত, 47 বাইট

For[n=1,Tr@RandomInteger[5,2n++]!=5n,Print[2n]]

LLlAMnYP থেকে -5 বাইট



1

ব্যাচ, 109 বাইট

@set/an=%1+2,s=n*5/2
@for /l %%i in (1,1,%n%)do @call set/as-=%%random%%%%%%6
@if %s% neq 0 echo %n%&%0 %n%

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


1

জাভাস্ক্রিপ্ট (ES2015), 75 78 বাইট

f=(n=2)=>[...Array(n)].reduce(a=>a+Math.random()*6|0,n)==3.5*n?'':n+`
`+f(n+2)

নিউলাইনগুলি দ্বারা পৃথক করা ফলাফলের একটি স্ট্রিং আউটপুট দেয়

সম্পাদনা করুন: শেগিকে একটি বাইট ধন্যবাদ সংরক্ষণ করা, 2 এ ফাংশন শুরু করতে 4 বাইট যুক্ত করা হয়েছে

ব্যাখ্যা

f=n=>
  [...Array(n)]                // Array of size n
    .reduce(                   // Combine each item
      a=>a+Math.random()*6|0,  // Add a random roll between 0 and 5 for each item
    n)                         // Start at n to correct rolls to between 1 and 6
    ==3.5*n                    // Compare total to most probable roll total
  ? ''                         // If true, end
  : n+'\n'+f(n+2)              // Otherwise, output n and continue

f=(n=2)=>[...Array(n)].reduce(a=>a+Math.random()*6|0,n)==3.5*n?'':n+`
`+f(n+2)

let roll = _ => document.getElementById('rolls').innerHTML = f();
document.getElementById('roll-button').onclick = roll;
roll();
<button id="roll-button">Roll</button>
<pre id="rolls"></pre>


2
আক্ষরিক পরিবর্তে ব্যাকটিক্সে আবদ্ধ আক্ষরিক নিউলাইন ব্যবহার করে একটি বাইট সংরক্ষণ করুন '\n'
শেগি

এটি দিয়ে শুরু হয় না n=2, পরিবর্তে আপনাকে ফাংশনটি ডাকা হলে ডাইসের প্রারম্ভিক নম্বরটি নির্দিষ্ট করতে হবে।
এমটি0

1

পিএইচপি - 89 অক্ষর

$r=0;$n=2;while($r!=$n*3.5){$r=$i=0;while($i<$n){$r+=rand(1,6);$i++;}print $n."
";$n+=2;}

এর পরিবর্তে আপনার প্রথম $r=0;ব্যবহারের দরকার নেই এবং এর echoপরিবর্তে লুপগুলি print $n."লিখতে পারেন তবে "$nলুপের পরে কিছু বা কিছু বাইট সংরক্ষণ করার আগে কিছু করতে দেয়
Jgrg Hülsermann


1

Haskell, 133 132 বাইট

import System.Random;import Control.Monad
s k=do n<-replicateM k$randomRIO(1,6);if sum n==7*div k 2 then pure()else do print k;s(k+2)

নীচের মন্তব্যে পরামর্শের জন্য @ লাইকোনিতে ক্রেডিট করুন।


১) আমদানিগুলি বাইট গণনায় গণনা করা উচিত। 2.) return()থেকে সংক্ষিপ্ত করা যেতে পারে pure()এবং putStrLn$showকরা সংক্ষিপ্ত করা যেতে পারে print
লাইকনি

আমি এখনই এটি ঠিক করব। ধন্যবাদ
ডেভিড স্পাতারো

কিছু আরও ছোট জিনিস: div k 2 thenহতে পারে div k 2thenএবং do print k;s(k+2)হয় print k>>s(k+2)
লাইকনি

1

অক্টাভ 55 বাইট

n=2;
while mean(randi(6,n,1))-3.5!=0
n
n=n+2;
end

অ্যান্ড্রুয়ার্কির উত্তরে অনুপ্রাণিত। যদি কারও কাছে এটি ছোট করার জন্য কোনও পয়েন্টার থাকে তবে তারা স্বাগত।


বাহ, টিআই-বেসিক এবং
অষ্টাভের

@ অ্যান্ড্রুআর্কি অষ্টাভে (অনলাইন সংস্করণটি আমি যা ব্যবহার করি তা হ'ল) ​​প্রোগ্রামিংয়ের ক্ষেত্রে কেবলমাত্র বেসিকগুলির মূল বিষয়গুলি।
মিচথন

1

পিপিসিজিতে আপনাকে স্বাগতম!
মার্টিন ইন্ডার

ধন্যবাদ! সবেমাত্র পাইথ টিউটোরিয়ালটি শেষ করেছি এবং অনুভব করেছি যে আমি এটি ব্যবহার করে দেখতে পারি, যদিও এটি সম্ভবত এখনও অসম্ভব। কোন পরামর্শ প্রশংসা করা হয়।
কিওয়ার্টজ

0

কিউবিআইসি , 40 বাইট

{[1,r|g=g+_r1,6|]~g=r*3.5|_X\g=0?r┘r=r+2

এই ব্যাখ্যাটি অনেক আক্ষরিক অর্থে যা চ্যালেঞ্জের জন্য জিজ্ঞাসা করে; সঠিকভাবে বিতরণটি পাওয়ার সবচেয়ে কম উপায় বলে মনে হচ্ছে seems

ব্যাখ্যা

{          DO infinitely
[1,r|      FOR a=1, a<=r (at start, r == 2), a++
g=g+       Add to g (0 at start)
  _r1,6|   a random number between 1 and 6 incl.
]          NEXT
~g=r*3.5   IF the result of all dice rolls equals the expected value
|_X        THEN quit
\g=0       ELSE, reset the dice total
?r┘        PRINT the number of dice used
r=r+2      and add 2 dice.
           END IF and LOOP are courtiously provided by QBIC at EOF.


0

জাভাস্ক্রিপ্ট (ES6) - 69 টি অক্ষর

r=n=>n?r(n-1)+(Math.random()*6|0)-2.5:0;f=(n=2)=>r(n)?n+`
`+f(n+2):""

console.log(f())

ব্যাখ্যা :

r=n=>                                     # Roll n dice
     n?                                   # If there is a dice left to roll
       r(n-1)                             #   Roll n-1 dice
             +(Math.random()*6|0)         #   Add a random number from 0 .. 5
                                 -2.5     #   Subtract 2.5 so sum of average is 0
                                     :0   # Else total is 0

এবং:

f=(n=2)=>                                 # Start with n = 2
         r(n)                             # Roll n dice
             ?n+"\n"+f(n+2)               # If non-zero then concatenate n, newline and
                                          #    result for n+2 dice
                           :""            # If zero (average) terminate.

0

ক্যালক 2 0.7, 119 118 111 বাইট

using"runtime";for(n=2,d=0;d!=3.5*n;Console.WriteLine(n),n+=2)for(i=d=0;i++<n;)d+=Math.Int(Random().Next(1,7));

ungolfed:

using "runtime";
var d = 0;
var r = Random();
for(var n = 2; d != 3.5 * n; Console.WriteLine(n), n += 2)
{
    d = 0;
    for(var i = 0; i < n; i++)
        d += Math.Int(r.Next(1,7));
}

আমি ম্যাথ ছাড়া করতে পারি। এটি ঠিক করা হয়েছে তবে এই প্রশ্নটি পোস্ট করার পরেই। আমি কিছুই জিতব না, তবে ওহে, ধারণার দুর্দান্ত প্রমাণ।

সম্পাদনা:

  • "রানটাইম" (-1 বাইট) ব্যবহারের মধ্যে অপ্রয়োজনীয় স্থান সরিয়ে ফেলে

Edit2:

  • var r মুছে ফেলা হয়েছে এবং একটি নতুন র্যান্ডম তৈরি করুন যেখানে এটির প্রয়োজন (-4 বাইট)

  • i = 0, d = 0 থেকে i = d = 0 (-2 বাইট) পরিবর্তন হয়েছে

  • চেক পরে ইনক্রিমেন্ট i (-1 বাইট)


0

রুবি , 52 বাইট

s=x=2;(s=0;p x.times{s+=rand(6)-2.5};x+=2)while s!=0

ব্যাখ্যা

s=x=2;                                                # sum=2, x=2
      (                                  )while s!=0  # while sum != 0:
       s=0;                                           #  reset the sum
           p                                          #  print
             x.times{              };                 #  repeat x times:
                     s+=                              #   Add to sum:
                        rand(6)                       #    random int in 0..5
                               -2.5                   #    subtract average
                                                      #  (implicitly return x for printing)
                                     x+=2             #  Increment x by 2

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


@ s=0পাক লুপের সামনের দিকে এবং এর ব্যবহারটি নোট করুন x.times। এর অর্থ প্রতিবার যোগফল পুনরায় সেট করা হয় এবং তারপরে xডাইস ঘূর্ণিত হয় যা সঠিক বিতরণ হওয়া উচিত। আমি আমার কোড একটি ব্যাখ্যা লিখতে হবে।
মান কালি

আপনি সঠিক, আমি আমার উপসংহার সঙ্গে খুব দ্রুত ছিল।

0

জাভাস্ক্রিপ্ট, 87 টি অক্ষর

for(n=2;eval('+'.repeat(n).replace(/./g,x=>x+(Math.random()*6|0)))!=2.5*n;n+=2)alert(n)

console.logপরিবর্তে এর সাথে পরীক্ষা করুন alert:

for(n=2;eval('+'.repeat(n).replace(/./g,x=>x+(Math.random()*6|0)))!=2.5*n;n+=2)console.log(n)
console.log('Done')


0

লুয়া, ১০২ বাইট

function r(n,t) for d=1,n do t=t+math.random(1,6)end return t==n*3.5 or print(n)or r(n+2,0)end r(2,0)

বা আরও পাঠযোগ্য সংস্করণ

function r(n,t) --recursive function does its magic, t is given to safe usage bytes(no local)
    for d=1,n do --roll n dice and count them up to the total (t)
         t =t+math.random(1,6)
    end 
    return t==n*3.5 or --check if t==n*3.5. If it is then it ends
           print(n) or --t != n*3.5 thus print n. print returns nil
           r(n+2,0) --both the check and the return value from print are false thus r gets executed.
end 
r(2,0) --start the process

96 বাইটের জন্য আরও প্রতারণামূলক সংস্করণ

function r(n,t,m)t=t+m(1,6)+m(1,6)return t==n*3.5 or print(n)or r(n+2,t,m)end r(2,0,math.random)

এটি বেশিরভাগ ক্ষেত্রে প্রথম হিসাবে একই রকম কাজ করে তবে আগের কলগুলি থেকে রোলগুলি পুনরায় ব্যবহার করে। এ কারণে আমি লুপটি অপসারণ করতে পারি। উভয় লুয়া 5.2 পরীক্ষিত হয়



-1

পিএইচপি, 51 বাইট

$r=2;$n=2;while(rand(0,6)-2.5*$r){print $n;$n=$n+2;}

যদি আপনার আউটপুট সর্বদা 2 হয়, তবে এটি কোনও বৈধ উত্তর নয় ...

লুপের সময় আমরা যদি ভিতরে print n প্রিন্ট করি তবে এটি নীচেরগুলি মুদ্রণ করবে: 2,4,6,8,10 .....
শিব

2
তবুও, আমি দেখতে পাচ্ছি না এটি কীভাবে প্রশ্নের প্রয়োজনীয়তাগুলি অনুসরণ করে। আপনি দুটি ভেরিয়েবল ব্যবহার করেন: "$ n" এবং "এন"। "n" অপরিজ্ঞাত, তাই শূন্যতে সেট করা হবে। সুতরাং কার্যকরভাবে, আপনি যা করেন তা হল একটি সমান সংখ্যা মুদ্রণ করা এবং তার পরের সমান সংখ্যা মুদ্রণের 5/6 সুযোগ রয়েছে। এটি গাণিতিকভাবে প্রশ্নের বিতরণের সমতুল্য নয়।

টাইপ, সেই এনটি সর্বদা 2 হওয়া উচিত, কোডটি আপডেট করে।
শিব

তবুও প্রশ্নটি যা জিজ্ঞাসা করছে তা নয় ... এখন আপনি একটি ডাই ছুঁড়ছেন, এটি পাঁচটি (= ২ * 2.5) কিনা তা পরীক্ষা করুন; যদি মরণটি পাঁচ হয়, আপনি থামুন, এবং যদি এটি পাঁচটি না হয়, আপনি পরবর্তী সমান সংখ্যাটি লিখুন এবং চালিয়ে যান। গাণিতিকভাবে কার্যকরভাবে আপনি কোডটির পূর্ববর্তী সংস্করণে যা করেছেন তেমনই কার্যকর।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.