কার্ড জোড় হওয়ার সম্ভাবনা


9

মোট এন * এম কার্ডের জন্য পূর্ণসংখ্যার মানগুলির সাথে [ 1 , এম ] কার্ডগুলির এন কপি সমন্বিত একটি ডেকে দেওয়া , সম্ভাব্যতাটি গণনা করুন যে 1 এর মান সহ একটি কার্ড 2 এর মান সহ একটি কার্ডের সাথে সংযুক্ত থাকে ।

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

ডেকটি চক্রীয় নয় , সুতরাং যদি প্রথম কার্ডটি 1 হয় এবং শেষ কার্ডটি 2 হয় তবে এটি সংলগ্ন প্রয়োজনীয়তা পূরণ করে না।

পরীক্ষার কেস হিসাবে, এন = 4 এবং এম = 13 (একটি স্ট্যান্ডার্ড 52-কার্ড ডেক) এর প্রত্যাশিত সমাধানটি 48 ডলার%

পাইথন + নম্পপি এলোমেলো শ্যাফেলগুলি ব্যবহার করে এখানে অ-গল্ফ প্রয়োগের একটি উদাহরণ এখানে দেওয়া হয়েছে:

from __future__ import division
from numpy import *

def adjacent(N, M):
    deck = array([i for i in range(1, M+1)]*N)
    trials = 100000
    count = 0
    for i in range(trials):
        random.shuffle(deck)
        ores = (deck == 1)
        tres = (deck == 2)
        if(any(logical_and(ores[1:], tres[:-1])) or
           any(logical_and(ores[:-1], tres[1:]))):
            count += 1
    return count/trials

আউটপুটটি আপনার যে কোনও ফর্মের জন্য সুবিধাজনক (ফাংশন রিটার্ন মান, টার্মিনাল আউটপুট, ফাইল ইত্যাদি) খুঁজে পেতে পারে এবং ইনপুট আপনাকে যে কোনও ফর্মের মতো দেখতে পারে (ফাংশন প্যারামিটার, টার্মিনাল ইনপুট, কমান্ড লাইন আর্গ ইত্যাদি))

স্ট্যান্ডার্ড লুপ-হোল প্রয়োগ করা হয়।

এটি কোড গল্ফ, সংক্ষিপ্ততম কোড (বাইটে) জিতেছে।

লিডারবোর্ড


1
চারপাশে মোড়ানো না সংলগ্নতা একটি ছদ্মবেশী জটিল মোড়
স্পার

@ স্পার আপনি আমাকে একটি ধারণা দিয়েছেন! :-)
লুইস মেন্ডো

উত্তর:


2

পাইথ, 23 22 বাইট

csm}1sM.:.S*vzUQ2J^T4J

10000 পুনরাবৃত্তি চালায়। কোনও বাইট ব্যয়ে নম্বরটি পরিবর্তন করা যায়। ইনপুট নিউলাইন পৃথক করা হয়। আমার কম্পিউটারে প্রায় 9 সেকেন্ড সময় নেয়।

প্রদর্শন

csm}1sM.:.S*vzUQ2J^T4J
                 J^T4     J = 10000
  m              J        Do the following J times.
           *vzUQ          Set up the deck. (0 .. n-1, repeated m times.)
         .S               Shuffle the deck.
       .:       2         Find all 2 elment substrings.
     sM                   Add them up.
   }1                     Check if any pairs add to 1 ([0, 1] or [1, 0])
 s                        Add up the results (True = 1, False = 0)
c                     J   Divide by J.

2

এমএটিএল , 44 46 বাইট

এটি ভাষার প্রকাশের 3.1.0 ব্যবহার করে, যা এই চ্যালেঞ্জের চেয়ে আগের।

গণনাটি এমন লুপের সাহায্যে করা হয় যা 1000 এলোমেলো বাস্তবায়ন আঁকবে। এটি চালাতে কয়েক সেকেন্ড সময় নেয়। এটি একটি ভেক্টরাইজড উপায়ে দ্রুত করা যেতে পারে। ইনপুট ফর্ম হয় [N M]

পুরানো সংস্করণ : কার্ডগুলির একটি এলোমেলো ডেক উত্পন্ন করে এবং এটি দু'বার পরীক্ষা করে: প্রথমে সামনে এবং তারপরে পিছনের দিকে।

itpw1)1e3:"2$twZ@w/Y]t1HhXfnwH1hXfn|bb]xxN$hYm

নতুন সংস্করণ : কার্ডগুলির একটি এলোমেলো ডেক উত্পন্ন করে এবং তারপরে একটি এর সাথে এটির একটি ফ্লিপড সংস্করণ সংযোজন 0করে। এই পথে চেক করা ঠিক একবার, সামনের দিকে যেতে পারে। এটি দুটি বাইট সংরক্ষণ করে।

itpw1)1e3:"2$twZ@w/Y]tP0whh1HhXfngbb]xxN$hYm

উদাহরণ

>> matl itpw1)1e3:"2$twZ@w/Y]tP0whh1HhXfngbb]xxN$hYm
> [4 13]
0.469

ব্যাখ্যা

i                 % input: [N M]
tpw1)             % produce N*M and N
1e3:"             % repeat 1000 times
  2$twZ@w/Y]      % produce random deck of cards from 1 to N*M
  tP0whh          % append 0 and then flipped version of deck
  1Hh             % vector [1 2]
  Xf              % find one string/vector within another                          
  ng              % was it found at least once?
  bb              % bubble up element in stack, twice                     
]                 % end                                                     
xx                % delete top of the stack, twice
N$h               % vector with all elements in stack
Ym                % mean value

1

ল্যাবভিউ, 58 ল্যাবভিউ পুরষ্কার

ক্রিয়েট কার্ড অ্যারেগুলি তখন সেগুলি বদলে দেয়। 1 এস অনুসন্ধান করুন তারপর 2 সের জন্য সংলগ্ন কার্ডগুলি পরীক্ষা করুন check


1

পাইথ, 16 বাইট

JE?>J1-1^-1c2JQZ

প্রদর্শন.

এই অনুসরণ করে

  • একটি শিক্ষিত অনুমান করা,
  • এটি যথেষ্ট কাছাকাছি পরীক্ষা করুন,
  • পুনরাবৃত্তি

প্রোগ্রামিং কৌশল। এক্ষেত্রে বিজয়ী শিক্ষিত অনুমান

1 - (1 - 2 / M) ** N

যা মোটামুটিভাবে বলে যে Nবালতিগুলিতে পড়ার সম্ভাবনা রয়েছে এবং বৈধ বালতিগুলির ভগ্নাংশ 2 / M। বালতিগুলি স্লট স্থানে 0এস এর পরে রয়েছে এবং সম্ভাবনা 1গুলি s

ত্রুটিটি কখনই 3% (আশ্চর্যজনকভাবে) এর বেশি হয়ে যায় বলে মনে হয় না এবং প্যারামিটারগুলি বড় হওয়ার সাথে সাথে 0% তে রূপান্তরিত হয় বলে মনে হয় (যেমনটি আমি প্রত্যাশা করব)।

ইনপুট নিউলাইন পৃথক করা হয়।

              Q  Q = eval(input())
JE               J = eval(input())
  ?>J1           if J > 1
      -1^-1c2JQ  then 1 - (1 - 2 / J) ** Q
               Z else 0

আপনি যদি কোনও স্পষ্টভাবে স্পষ্ট সত্যটি গ্রহণ করেন False == 0এবং JE&>J1-1^-1c2JQপরিবর্তে এটি করেন তবে আপনি একটি অক্ষর সংরক্ষণ করতে পারেন ।


এটি পাইথের আমার প্রথম যেতে (এবং আমার প্রথম উত্তর) হওয়ার কারণ তাই সমালোচনা এবং সহায়তা বিশেষত স্বাগত।
Veedrac

1

এমএটিএল , 44 38 বাইট

এটি এমএটিএল সংস্করণ 3.1.0 ব্যবহার করে যা এই চ্যালেঞ্জের চেয়ে আগের than

নতুন সংস্করণ, 4 বাইট সংরক্ষণের জন্য লুইস মেন্ডোকে ধন্যবাদ!

iiXI*XJxO1e4XH:"JZ@I\TTo3X53$X+1=a+]H/

পুরানো সংস্করণ (44 বাইট):

OiitXIx*XJx1e4XH:"JJZrI\[1 1]3X5,3$X+1=a+]H/

ব্যাখ্যা

i               % take input for N
i               % take input for M
XI              % save M into clipboard I
*XJ             % multiply N and M and store in clipboard J
x               % clear the stack
O               % make a zero to initialise count of pairs
1e4XH:"         % 1e4=10000, XH saves into clipboard H, : makes the vector 1:1e4
                % which is used to index a for loop, started using "
    JZ@         % Use randperm to generate a random permutation of the vector 1:N*M
    I\          % take the result mod M, now each card has a value one less than before
    TTo3X53$X+  % convolve vector of card values with [1 1] to do pairwise summation
    1=a         % find if any sums equal 1, which means there is a [0 1] or [1 0]         
    +           % add the logical value to the count of pairs
]
H/              % divide the count by the number of deals to get the probability

উদাহরণ স্বরূপ,

>> matl 'iiXI*XJxO1e4XH:"JZ@I\TTo3X53$X+1=a+]H/'
> 4
> 13
0.4861

দ্রষ্টব্য (21/5/16): এমএটিএল 18.0.0 রিলিজ অনুসারে X+সরানো হয়েছে, তবে Y+তার জায়গায় ব্যবহার করা যেতে পারে। এমএটিএল সংস্করণ ৩.১.০ থেকে ১৮.০.০ এর পরিবর্তনের অর্থ এই উত্তরটি এখন কেবল 31 বাইটে *xO1e4:"2:Gtb*Z@w\TT2&Y+1=ah]Ym,।


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

আমি দৃolution়প্রত্যয়!
লুইস মেন্ডো

আপনি কিছুটা পরিবর্তন [1 1]এনে সংরক্ষণ করতে পারেন TTo। এছাড়াও, আপনার কমা দরকার নেই
লুইস মেন্ডো

@ লুইস মেন্ডো ধন্যবাদ! আমি ভেবেছিলাম এটি করার আরও ভাল উপায় নিশ্চয়ই ছিল!
ডেভিড

এখন আমি দেখছি কীভাবে এখানে সমঝোতা কাজ করে। কার্ডগুলির 0-ভিত্তিক নামকরণ ব্যবহার করা খুব চালাক ছিল!
লুইস মেন্ডো

0

গণিত, 93 92 91 বাইট

N@Count[RandomSample@Flatten[Range@#~Table~{#2}]~Table~{a=1*^5},{b=___,1,2,b}|{b,2,1,b}]/a&

এখনও একটি বন্ধ ফর্ম খুঁজছেন ...


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