হোমস্টকের ক্যাটিটিভ ডুমসডে ডাইস ক্যাসকেডার কার্যকর করুন


29

চ্যালেঞ্জ

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

ক্যাটেনটিভ ডুমসডে ডাইস ক্যাসকেডারের জন্য অ্যালগরিদম নীচে রয়েছে:

প্রথমত, প্রাইম বুদবুদে ছয় পক্ষের ডাই ঘূর্ণিত হয় এবং ফলাফলটি পরবর্তী পদক্ষেপের কতগুলি পুনরাবৃত্তি ঘটে তা নির্ধারণ করে।

একটি ছয়তরফা ডাই দিয়ে শুরু করুন। প্রাইম বুদ্বুদ ডাইয়ের রোল হিসাবে যতবার, কারেন্ট ডাইয়ের রোলের ফলাফলের ফলে পরবর্তী ডাইয়ের পাশের সংখ্যাটি বহুগুণ করুন। উদাহরণস্বরূপ, যদি ছয় পক্ষের আপনার প্রথম রোলটিতে আপনার রোলটি 2 হয়, তবে আপনার পরবর্তী ডাইয়ের 6 * 2 = 12 দিক থাকবে।

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

উদাহরণ

উদাহরণ # 1 (উপরের লিঙ্ক থেকে সরাসরি নেওয়া):

The Prime Bubble rolls a 6, meaning that the Cascader will iterate six times

#1: We always start with a 6 sided die, and it rolls a 2, so the next die has 6x2=12 sides
#2: The 12 sided die rolls an 8, meaning that the third die has 12x8=96 sides
#3: The 96 sided die rolls a 35, meaning that die 4 has 96x35=3360 sides
#4: The 3360 sided die rolls a 2922, so die 5 has 3360x2922 = 9,817,920 sides
#5: The 9.8 million sided die rolls a 5,101,894, so the final die has 50,089,987,140,480 sides
#6: The 50 trillion sided die rolls a one. Hooray. 
Since the last die rolled gave a 1, your function or program should output 1.

উদাহরণ # 2

The Prime Bubble rolls a 2, meaning that the Cascader will iterate twice.

#1: We always start with a 6 sided die, and it rolls a 4, so the next die has 6x4 = 24 sides
#2: The 24 sided die rolls a 14

Since the last die rolled gave a 14, your function or program should output 14.

4
সর্বাধিক আউটপুট কি? প্রতিটি রোল যদি সর্বাধিক দিকে ফলাফল করে? আমার মনে হয় এটি 7958661109946400884391936 = ((((6 ^ 2) ^ 2)) 2) ^ 2) ^ 2 = 6 ^ (2 ^ 5) = 6 ^ 32
কেজেটিল এস

6
@KjetilS। প্রকৃতপক্ষে, এবং যে আউটপুট সম্ভাবনা 1 হতে হবে16i=05(62i)=16×6×62×64×68×616×632=12155416739906037495048372267884096782336
জোনাথন অ্যালান

3
এটি কি এলোমেলো হওয়ার কথা? প্রশ্ন এলোমেলোতা সম্পর্কে কিছুই উল্লেখ করে না?
গম উইজার্ড

10
@ শ্রুতচিলিজম ও'জাইক ডাইস-রোলিং এলোমেলোভাবে বোঝায়।
mbomb007

6
@ শ্রীওচিলিজম ও'জাইক xkcd.com/221
নেইট

উত্তর:



8

পার্ল 6 , 43 37 বাইট

-6 বাইটস nwellnhof ধন্যবাদ

{(6,{roll 1..[*] @_:}...*)[1+6.rand]}

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

নামবিহীন কোড ব্লক যা কিয়ামতের দিন পাশের ফলাফল দেয়।

ব্যাখ্যা:

{                                   }   # Anonymous code block
 (                       )[1+6.rand]    # Take a random number from
                     ...*               # The infinite list of
  6,{roll 1..[*] @_:}                   # Cascading dice values
  6,                                    # Starting from 6
    {roll          :}                   # And choosing a random value from
          1..                           # One to
             [*] @_                     # The product of every value so far


5

জে , 21 বাইট

1+[:?(*1+?)^:(?`])@6x

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

ফ্রাউনফ্রোগ দ্বারা চিহ্নিত একটি যুক্তিযুক্ত সমস্যার জন্য +6 বাইটস ধন্যবাদ

দ্রষ্টব্য: জে নীলাদিক ক্রিয়া নেই। যাইহোক, এই ক্রিয়াটি একই কাজ করবে আপনি কোনও যুক্তিই দেবেন না কেন। টিআইওর উদাহরণে, আমি এটিকে কল করছি 0, তবে আমি ব্যবহার করতে পারতাম 99বা ''ঠিক তেমনও করতে পারি ।

কিভাবে

  • 1+ একটি যোগ করুন ...
  • [:?একটি N- পার্শ্বযুক্ত ডাই একটি একক রোল (পক্ষই পড়া 0থেকে n-1), যেখানে সংখ্যা nদ্বারা নির্ধারিত হয় ...
  • (*1+?)বর্তমান যুক্তি নেওয়া yএবং মেটাল রোল ?মধ্যে একটি র্যান্ডম সংখ্যা উত্পাদন করতে 0এবং y-11+করে নির্মিত হয় 1থেকে y, সমেত। অবশেষে *একটি জে হুক তৈরি করে, যা এটি yআবার গুন করবে ।
  • ^: উপরোক্ত এটি বহুবার করুন ...
  • (?`]) ?প্রাথমিক আর্গুমেন্টটি রোল করুন, এটি 6কতবার পুনরাবৃত্তি করতে হবে তা নির্ধারণ করতে। আমরা যদি রোল করি 0( 1প্রাইম বুদ্বুদে কোনওটির সাথে সম্পর্কিত), যুক্তিটি অপরিবর্তিত হয়ে যাবে। ]যে ইঙ্গিত 6, অপরিবর্তিত, পুনরাবৃত্তি শুরুর মান হতে হবে (*1+?)ক্রিয়া যে চূড়ান্ত রোল জন্য ডাই মান নির্ধারণ করে।
  • @6xধ্রুব ক্রিয়া সংযুক্ত করে 6, যাতে আমরা যেকোন কিছু দিয়ে এটি কল করতে পারি এবং xজে জোর করে সংখ্যায় বর্ধিত সংখ্যার গণনা ব্যবহার করতে বাধ্য করি যা আমাদের সম্ভবত বিশাল সংখ্যার জন্য প্রয়োজন।

in this case 0 executes the previous verb once, 1 twice, etcএটা কেন?
ফ্রাউনফ্রগ

কারণ আমি একটি ভুল করেছি :(। শিগগিরই ঠিক হয়ে যাবে
জোনাহ

এখনই স্থির। ধন্যবাদ।
জোনাহ

4

কে (ওকে) , 32 বাইট

সমাধান:

*|{x,1+1?x:(*).x}/[*a;6,a:1+1?6]

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

6 এবং "1 চয়ন 6" দিয়ে শুরু করুন, "1 চয়ন 6" বারটি পুনরাবৃত্তি করুন:

*|{x,1+1?x:(*).x}/[*a;6,a:1+1?6] / the solution
  {             }/[n;    c     ] / iterate over lambda n times with starting condition c
                            1?6  / 1 choose 6, between 0..5 (returns a list of 1 item)
                          1+     / add 1 (so between 1..6)
                        a:       / store as 'a'
                      6,         / prepend 6, the number of sides of the first dice
                   *a            / we are iterating between 0 and 5 times, take first (*)
           (*).x                 / multi-argument apply (.) multiply (*) to x, e.g. 6*2 => 12
         x:                      / save that as 'x'
       1?                        / 1 choose x, between 0..x-1
     1+                          / add 1 (so between 1..x)
   x,                            / prepend x
*|                               / reverse-first aka 'last'

আপনি স্ক্যানের জন্য ওভার স্যুইচ করে পুনরাবৃত্তিগুলি দেখতে পারেন , যেমন

(6 3        / 1 choose 6 => 3, so perform 3 iterations
 18 15      / 1 choose (6*3=18) => 15
 270 31     / 1 choose (18*15=270) => 31
 8370 5280) / 1 choose (270*31=8730) => 5280

1
(*).x-> */xএবং { }/[*a;6,a:1+1?6]->a{ }/6,a:*1+1?6
এনজিএন

4

জেলি , 9 বাইট

6X×$5СXX

একটি নীলাদিক লিঙ্ক যা একটি ধনাত্মক পূর্ণসংখ্যা দেয়।

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

আরও সুস্পষ্ট উপর একটি বাইট সংরক্ষণ 6X×$6X’¤¡X

কিভাবে?

6X×$5СXX - Link: no arguments
6         - initialise left argument to 6
    5С   - repeat five times, collecting up as we go: -> a list of 6 possible dice sizes
   $      -   last two links as a monad = f(v):           e.g [6,18,288,4032,1382976,216315425088]
 X        -     random number in [1,v]                     or [6,6,6,6,6,6]
  ×       -     multiply (by v)                            or [6,36,1296,1679616,2821109907456,7958661109946400884391936]
       X  - random choice (since the input is now a list) -> faces (on final die)
        X - random number in [1,faces]

খুশী হলাম। আমি আমার 'সুস্পষ্ট' উত্তরটি ছাড়িয়ে যাওয়ার উপায় চিন্তা করার চেষ্টা করছিলাম, তবে সমস্ত পাশা উত্পন্ন করার এবং এলোমেলোভাবে কোনওটি বেছে নেওয়ার কথা ভাবি নি।
নিক কেনেডি

হেই, আমি মিস করেছি যে আপনি প্রায় সঠিক উত্তর পোস্ট করেছেন!
জোনাথন অ্যালান

3

05 এ বি 1 ই , 10 বাইট

X6DLΩF*DLΩ

বড় তালিকাগুলির জন্য অন্তর্নির্মিত পছন্দটি বেশ ধীর গতির, তাই প্রাইম বুদ্বুদ রোল উদাহরণস্বরূপ যদি 6 হয় তবে সময়সীমা শেষ হতে পারে।

অনলাইনে এটিকে পরখ করে বা রোলস দেখতে যোগ কপি করে প্রিন্ট সঙ্গে অনলাইনে এটিকে পরখ করে । (টিআইও 05AB1E এর উত্তরাধিকার সংস্করণ ব্যবহার করে, যেহেতু এটি সামান্য দ্রুত।

ব্যাখ্যা:

X           # Push a 1 to the stack
 6          # Push a 6 to the stack
  D         # Push another 6 to the stack
   L        # Pop the top 6, and push a list [1,2,3,4,5,6] to the stack
    Ω       # Pop and push a random item from this list (this is out Prime Bubble roll)
     F      # Loop that many times:
      *     #  Multiply the top two values on the stack
            #  (which is why we had the initial 1 and duplicated 6 before the loop)
       D    #  Duplicate this result
        LΩ  #  Pop and push a random value from its ranged list again
            # (after the loop, output the top of the stack implicitly)

3

জেলি , 9 বাইট

6×X$X’$¡X

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

জোনাথন অ্যালানের উত্তর দাবি করেছে যে এটি

আরও সুস্পষ্ট উপর একটি বাইট সংরক্ষণ 6X×$6X’¤¡X

। আসলে, আমাদের এত বড় পরিবর্তন করার দরকার নেই। অতএব, এটি জোনাথন অ্যালানের উত্তরের বিকল্প পন্থা, এবং, আমার প্রাথমিক অবৈধ 6-বাইটারের বিশ্রামের জায়গা। :(



2

কাঠকয়লা , 16 বাইট

⊞υ⁶F⊕‽⁶⊞υ⊕‽ΠυI⊟υ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

⊞υ⁶

পূর্বনির্ধারিত তালিকায় 6 টি চাপুন।

F⊕‽⁶

1 থেকে 6 পর্যন্ত এলোমেলো বার পুনরাবৃত্তি করুন ...

⊞υ⊕‽Πυ

... তালিকার 1 এবং তালিকার পণ্যগুলির মধ্যে একটি এলোমেলো সংখ্যা টিপুন।

I⊟υ

তালিকায় ধাক্কা দেওয়া শেষ সংখ্যাটি আউটপুট করুন।

বিকল্প পদ্ধতির, এছাড়াও 16 বাইট

≔⁶θF‽⁶≧×⊕‽θθI⊕‽θ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔⁶θ

পাশের সংখ্যা 6 এ সেট করুন।

F‽⁶

0 থেকে 5 বারের মধ্যে একটি এলোমেলো সংখ্যা পুনরাবৃত্তি করুন ...

≧×⊕‽θθ

... পাশের সংখ্যাটিকে 1 থেকে পাশের সংখ্যায় এলোমেলো সংখ্যায় গুণ করুন।

I⊕‽θ

পক্ষ থেকে একটি সংখ্যা থেকে 1 এলোমেলো নম্বর মুদ্রণ করুন।



2

আর , 43 বাইট

s=sample
for(i in 1:s(k<-6))T=s(k<-k*T,1)
T

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

kমরতে মুখের বর্তমান সংখ্যা ট্র্যাক করে। Tহিসাবে আরম্ভ করা হয় যে সত্য ব্যবহার করে 1

আমি আরও কয়েকটি জিনিস চেষ্টা করেছিলাম, তবে এই সহজ, সোজাসাপ্টা পদ্ধতির কাছে পরাস্ত করতে পারি নি।


1

জেলি , 10 বাইট

6×X$6X’¤¡X

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

ব্যাখ্যা

       ¤   | Following as a nilad:
    6X     | - A random number between 1 and 6
      ’    | - Decrease by 1 (call this N)
6          | Now, start with 6
   $    ¡  | Repeat the following N times, as a monad
 ×         | - Multiply by:
  X        |   - A random number between 1 and the current total
         X | Finally, generate a random number between 1 and the output of the above loop


1

জাভা 10, 214 93 86 বাইট

v->{int r=6,n=0;for(var d=Math.random()*6;d-->0;n*=Math.random(),r*=++n)n=r;return n;}

অনলাইনে এটিকে পরখ করে বা পদক্ষেপ দেখতে অতিরিক্ত প্রিন্ট লাইনের অনলাইনে এটিকে পরখ করে

intjava.math.BigInteger632intlongBigIntegerintBigIntegers

ব্যাখ্যা:

v->{                        // Method with empty unused parameter & integer return-type
  int r=6,                  //  The range in which to roll, starting at 6
      n=0;                  //  The roll itself (which must be initialized, therefor is 0)
  for(var d=Math.random()*6;//  Roll the Prime Bubble Dice
      d-->0                 //  Loop that many times:
      ;                     //    After every iteration:
       n*=Math.random(),    //     Roll a random dice in the range [0, n)
       r*=++n)              //     Increase `n` by 1 first with `++n`, so the range is [1,n]
                            //     And then multiply `r` by `n` for the new range
    n=r;                    //   Set `n` to `r`
  return n;}                //  After the loop, return `n` as result

আপনার প্রতিযোগিতামূলক সমাধান হিসাবে বিগইন্টেগার না করে এমন সমাধান পোস্ট করুন।
স্ট্যাকস্টাক

232int

আমি এই সম্পর্কে মেটাতে কিছু পেতে পারি কিনা তা আমি দেখতে পাব।
স্ট্যাকস্টাক

1
ওপি বলেছে যে পূর্ণসংখ্যার আকার সীমা সম্পর্কে চিন্তা করবেন না। intপ্রকারটি ব্যবহার করুন ।
স্ট্যাকস্টাক

1
@ স্ট্যাকস্টাক সম্পন্ন হয়েছে এবং প্রক্রিয়াটিতে 7 বাইট গল্ফ করেছে। :)
কেভিন ক্রুইজসেন

0

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

$r=$q=rand(1,$s=6);while($l++<$q)$r=rand(1,$s*=$r);print$r;

সম্প্রসারিত:

$r=$q=rand(1,$s=6);
while($l++<$q)$ 
    r=rand(1,$s*=$r);
print$r;

নিশ্চিত না যে আমি ওপেন ট্যাগটি অন্তর্ভুক্ত করব।

আমার মেশিনে, এটি $s*$rখুব বড় হলে এটি ক্র্যাশ হয়, তাই এটি $q>=5কখনও কখনও মুদ্রণ করে না ... কারণ সংখ্যাগুলি এত বড় হয়। ঠিক করার বিষয়ে নিশ্চিত নন।


0

পাইথ , 14 বাইট

uhO=*|Z6GO6hO6

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

uhO=*|Z6GO6hO6   
         O6      Random number in range [0-6)
u                Perform the following the above number of times...
           hO6   ... with starting value G a random number in range [1-6]:
    *   G          Multiply G with...
     |Z6           The value of Z, or 6 if it's the first time through (Z is 0 at program start)
   =  Z            Assign the above back into Z
  O                Random number in range [0-Z)
 h                 Increment
                 Implicit print result of final iteration

0

সি # (.নেট কোর) , 136 বাইট

class A{static void Main(){var r=new System.Random();int i=r.Next(6),j=6;while(i-->0)j*=1+r.Next(j);System.Console.Write(r.Next(j)+1);}}

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

আমি এখানে নিশ্চিত যে অসীম পূর্ণসংখ্যার দৈর্ঘ্যের অনুমানের পরেও এটি কাজ করে pretty যদি আমাকে প্রকৃতপক্ষে ওভারফ্লো পরিচালনা করতে হয় তবে আমার পুরোপুরি আলাদা ক্লাস বের করতে হবে।


System.ArgumentOutOfRangeException: 'maxValue' must be greater than zero632intlongBigIntegers

@ কেভিন ক্রুজসেন হ্যাঁ, এটি আমার মন্তব্যের পুরো বক্তব্য।
স্ট্যাকস্টাক


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