এটি শেষ পর্যন্ত থামবে ...


41

একটি ইনপুট স্ট্রিং দেওয়া হয়েছে, নিম্নলিখিত পদ্ধতিতে খালি খালি বিভাজকের পরে Sমুদ্রণ করুন S:

  • পদক্ষেপ 1: Sএর 1/2মুদ্রিত হওয়ার একটি 1/2সুযোগ আছে এবং প্রোগ্রামটি শেষ হওয়ার সুযোগ রয়েছে ।

  • পদক্ষেপ 2: Sএকটি আছে 2/3ছাপা হচ্ছে সম্ভাবনা, এবং একটি 1/3প্রোগ্রাম বিনষ্ট সুযোগ।

  • পদক্ষেপ 3: Sএর 3/4মুদ্রিত হওয়ার একটি 1/4সুযোগ আছে এবং প্রোগ্রামটি শেষ হওয়ার সুযোগ রয়েছে ।

  • ...

  • ধাপ n: Sএকটি আছে n/(n+1)ছাপা হচ্ছে সম্ভাবনা, এবং একটি 1/(n+1)প্রোগ্রাম বিনষ্ট সুযোগ।

নোট

  • ইনপুট স্ট্রিংটিতে কেবলমাত্র এমন অক্ষর থাকবে যা আপনার ভাষার স্ট্রিং ধরণের ক্ষেত্রে গ্রহণযোগ্য।

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

  • প্রোগ্রামটি যে কোনও 1/2কিছু মুদ্রণের আগে শেষ করার সুযোগ রয়েছে।

  • একটি চলন্ত নতুন লাইন গ্রহণযোগ্য।

  • আপনার উত্তর বর্ণিত সম্ভাব্যতা সম্মান করতে একটি আসল প্রচেষ্টা করতে হবে। স্পষ্টতই, কখন nবড় এটি কম এবং কম সত্য হবে। আপনার উত্তরে কীভাবে সম্ভাবনাগুলি গণনা করা হয় তার সঠিক ব্যাখ্যা (এবং কেন তারা চশমাগুলিকে সম্মান করে, ছদ্ম-এলোমেলোতা এবং বৃহত সংখ্যক সমস্যাগুলিকে উপেক্ষা করে) যথেষ্ট।

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins


বিভাজক একটি খালি স্ট্রিং হতে পারে?
rturnbull

16
@ আর্টারনবুল ভাল না, কারণ সে ক্ষেত্রে কোনও বিভাজনকারী নেই।
ফ্যাটালাইজ করুন

আমাদের কি এইগুলি একের পর এক মুদ্রণ করতে হবে, বা প্রোগ্রামটি শেষ হয়ে গেলে আমরা কেবল সেগুলি সব মুদ্রণ করতে পারি?
ডেনিস

@ একের পর এক ডেনিস।
ফ্যাটালাইজ করুন

উত্তর:


18

পাইথ , 7 বাইট

WOh=hZQ

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

কিভাবে এটা কাজ করে

সুডোকোড:

while rand_int_below(1 + (Z += 1)):
    print(input)

পাইথ আবার 05AB1E মারছে না?
এরিক আউটগলফার

সমাপ্তির সম্ভাবনার পাশাপাশি মুদ্রণ বিবৃতিটির নিজস্ব সম্ভাবনাও দরকার নেই?
tuskiomi

1
@ টসকিওমি নাহ, এন / (এন + 1) হ'ল 1-1 / (এন + 1), বা 1 - (সমাপ্তির সম্ভাব্যতা)।
অ্যাডোরাথ

29

সি #, 94 85 বাইট

আমার প্রথম উত্তর!

using System;s=>{var r=new Random();for(var i=2;r.Next(i++)>0;)Console.Write(s+" ");}

পূর্ববর্তী প্রচেষ্টা (আমি এটি পছন্দ করেছি goto):

using System;s=>{var i=2;var r=new Random();a:if(r.Next(i++)>0){Console.Write(s+" ");goto a;}}

Ungolfed:

using System;
class P
{
    static void Main()
    {
        Action<string> f = s =>
        {
            var r = new Random();
            for (var i = 2; r.Next(i++) > 0;) Console.Write(s + " ");
        };

        f("test");

        Console.ReadKey();
    }
}

দ্রষ্টব্য: সি # তে Random.Next(N)পদ্ধতিটি [0, N-1] পরিসরে একটি nonnegative পূর্ণসংখ্যা প্রদান করে, সুতরাং আমরা কেবল পরীক্ষা করতে পারি যে প্রাপ্ত সংখ্যা 0 এর চেয়ে বেশি greater


1
আপনাকে using System;আপনার বাইট গণনাতে অন্তর্ভুক্ত করতে হবে। আপনি ডিক্লেয়ার করতে পারেন r, ইনলাইন একটি পরিবর্তনশীল এটি সেট করার কোন প্রয়োজন: new Random().Next(i++)। গল্ফড ফ্যাঙ্কে আপনাকে পেছনের অর্ধিকোলনের দরকার নেই।
TheLethalCoder

1
ওহ এবং প্রথম প্রথম উত্তর! আমার প্রয়াসের চেয়ে কম হতে হবে :)
TheLethalCoder

@TheLethalCoder আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ! আমি ব্যবহার করার চেষ্টা করেছি new Random().Next(i++)কিন্তু যখন আমি এটি কার্যকর করার চেষ্টা করেছি, ফলাফলটি সর্বদা হয় কোনও কিছু প্রিন্ট না করেই প্রোগ্রামটি বন্ধ হয়ে যায়, বা প্রোগ্রামটি কখনও থামে না। আমি যখন ভেরিয়েবলটি ঘোষণা করি r=new Random()এবং ব্যবহার করি, যখন rওপি জিজ্ঞাসা করবে প্রোগ্রামটি এলোমেলোভাবে থামবে।
চার্লি

আহ আহ আছে কারণ লুপটি এত শক্ত tight
TheLethalCoder

2
@ দ্য লেথলকোডার - হ্যাঁ, থাইট লুপটির অর্থ এমন একটি সুযোগ রয়েছে যা জেনারেটরের বীজ একই হয়। দেখুন: এমএসডিএন.মাইক্রোসফটকম /en-us/library/system.random.aspx#Instantiate
এরনো

12

আর, 47 46 43 বাইট

মন্তব্যে রবিন রাইডারের কারণে 43 বাইট

s=scan(,"")
while(sample(T<-T+1)-1)print(s)

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

ব্যাখ্যা

s=scan(,"")  # Takes input from stdin.
             T<-T+1    # T is 1 by default, so this
                       # evaluates to 2, and will increment
                       # at each step.
      sample(T<-T+1)   # Take a sample of size 2, i.e. generate
                       # a list of integers from 1 to 2 in random order
      sample(T<-T+1)-1 # Subtract one from every element of this list.
while(sample(T<-T+1)-1)# while() will treat the first value in this list
                       # as a logical value, i.e. FALSE for zero and TRUE
                       # for nonzero values. The other elements of the list
                       # are ignored, triggering a warning.
                       print(s) # print s

এটি কি কখনও শেষ হয়?
এমফ্লোরেন

@ এমফ্লোরেন হ্যাঁ, এখানে অন্যান্য সমস্ত উত্তরগুলির মতো এটিও স্টোকাস্টিক, সমাপ্তির সুযোগ ক্রমশ কমে যাওয়ার সাথে সাথে এটি শেষ হয়ে যাবে। একটি .5 সুযোগ আছে এটি কিছুই মুদ্রণ করবে! এটি বেশ কয়েকবার চালানোর চেষ্টা করুন এবং ফলাফলগুলি তুলনা করুন।
rturnbull

function(s)এর চেয়ে সংক্ষিপ্তs=scan(,'');
জেএড

1
এবং pryr::f(while(runif(1)<T/(T<-T+1))print(s))আরও খাটো হয়।
জেএডি

1
@ জারকো ডাবডেলডাম দুর্ভাগ্যক্রমে আপনি (অাব) ব্যবহার করতে পারবেন না Tএবং Fবেনামে ফাংশন সহ, কারণ এটি একটি বৈশ্বিক পরিবর্তনশীলকে পরিবর্তিত করে এবং এর অর্থ হল যে ফাংশনটি কেবল একবার ডাকা যেতে পারে। এখানে দেখুন : "সমাধান ফাংশনটি এর আগে যতবার ডাকা হয়েছে তা নির্বিশেষে ধারাবাহিকভাবে সম্পাদন করে"।
rturnbull

11

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

[NÌL.R#,

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

ব্যাখ্যা

[         # start loop
 NÌL      # push range [1 ... current_iteration+2]
    .R    # pick a random number
      #   # if true (1), exit loop
       ,  # print input

@ ফ্যাটালাইজ: এটি আমার পক্ষে হয়েছে। এটি কয়েকবার চালানোর চেষ্টা করুন। এতে কোনও ফলাফল আউটপুট না করার 50% সম্ভাবনা রয়েছে সুতরাং আপনি "দুর্ভাগ্য" হতে পারেন।
এমিগানা

11
এলোমেলো কাজগুলির উত্তরাধিকারী সমস্যা problem কখনও কখনও সমস্ত প্রতিক্রিয়া আপনার বিরুদ্ধে হয়।
J_F_B_M

@ জ_এফ_বি_এম সহজাত?
লিকি নুন

1
@ ল্যাকিয়ুন নন, এটি "উত্তরাধিকারী সমস্যা" (ঘটনার সম্ভাবনা পূর্ববর্তী ঘটনা থেকে উত্তরাধিকার সূত্রে প্রাপ্ত নয়)। জে_এফ_বি_এম স্পষ্টতই জুবিলারের মিথ্যাচারের কথা উল্লেখ করছিল।
এ্যাববিস

11

জাভাস্ক্রিপ্ট, 60 58 54 বাইট

f=(s,n=1)=>Math.random()<n/++n?console.log(s)+f(s,n):0

আউটপুট স্ট্রিং হবে s। প্রোগ্রামটি সমাপ্ত হলে সেপারেটরটি মুদ্রিত হয় NaNবা হয় 0

f=(s,n=1)=>Math.random()<n/++n?console.log(s)+f(s,n):0

f('test')

Math.random()0 এবং 1 এর মধ্যে একটি মান প্রদান করে যদি সেই মানটি নীচে থাকে n/(n+1)তবে sতা pritned হবে।

4 বাইট সংরক্ষিত @ নীলকে ধন্যবাদ


1
কেন ব্যবহার n/++nকরবেন না ?
নীল

1
@ নীল ধন্যবাদ, 4 বাইট সংরক্ষণ!
টমাস ডাব্লু

2
যদি আপনার পরিবেশ যদি কোনও ব্রাউজার হয় তবে আপনি 6 বাইট সংরক্ষণের alertপরিবর্তে ব্যবহার করতে পারেন console.log- স্নিপেটটি alert = console.logযদি ইচ্ছা হয় তবে অবিচ্ছিন্ন আউটপুট দেখানোর জন্য সেট করতে পারে (যদি অনুমতি দেওয়া হয় - বাইটস সংরক্ষণ করে না, কেবল একটি বুদ্ধিমান রাখতে সাহায্য করে)
ক্রেগ আয়র

10

জাভা 8, 72 62 61 বাইট

s->{for(int n=2;Math.random()<1f/n++;System.out.println(s));}

-১০ বাইট @ ক্লিফরোটকে ধন্যবাদ ।
-1 বাইট @ জলি জোকারকে ধন্যবাদ ।

ডিলিমিটার একটি নতুন লাইন।

ব্যাখ্যা:

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

s->{                          // Method with String parameter and no return-type
  for(                        //  Loop
    int n=2;                  //   Start `n` on 2
    Math.random()<1f/n++;     //   Continue loop as long as a random decimal (0.0-1.0)
                              //   is smaller than 1/`n` (and increase `n` by 1 afterwards)
    System.out.println(s)     //   Print the input-String
  );                          //  End of loop
}                             // End of method

2
আমি এই মুহুর্তে পরীক্ষা করতে অক্ষম তবে কন্ডিশন ব্লকের ifভিতরে forশর্তটি রাখছি না কেন ?
ক্লিফ্রুট

@cliffroot এটা হল মধ্যে forলুপ।
Okx

1
@ ওএক্সএক্স-এ আমার অর্থ শর্তটি ছিল forলুপটি কখন শেষ করা উচিত যাতে এর সুস্পষ্ট প্রয়োজন হয় না return। বিবৃতি জন্য ভিতরে দ্বিতীয় প্রকাশ।
ক্লিফ্রুট

@ ক্লিফ্রুট আহ, আমি বুঝতে পারি
Okx

1
হায় int n=2এবং 1f/n++কাজ করে?
জলি জোকার

9

গণিত, 43 বাইট

(n=1;While[RandomInteger@n>0,Print@#;n++])&

জংহওয়ান মিন 1 বাইট (উপরে) সংরক্ষণ করেছে এবং আরও ভাল কিছু প্রস্তাব করেছে (নীচে)

গণিত, 37 বাইট

For[n=1,RandomInteger@n++>0,Print@#]&

1
RandomInteger@n!=0RandomInteger@n<1এই ক্ষেত্রে হিসাবে একই , এবং n++একত্রিত করা যেতে পারে RandomInteger@n। এছাড়াও, For(প্রায় সর্বদা) এর চেয়ে কম While: -5 বাইটFor[n=1,RandomInteger@n++>0,Print@#]&
जंगহওয়ান মিন

"জন্য" জয়! আমি আপনার উত্তরও পোস্ট করেছি
J42161217

For[n=1,!n∣Hash[# n++],Print@#]&হ্যাশ মোটামুটি এলোমেলো বলে ধরে নিয়ে 34 বাইটেও কাজ করবে। এলোমেলোতা ইনপুট উপর নির্ভর করে, তবে। উদাহরণস্বরূপ চেষ্টা করুন% /@ Alphabet[]
কেলি লোডার

8

ক্লোজার, 61 56 বাইট

ওহ কেন আমি forপ্রথমে একটি সাথে গেলাম না ? কিন্তু আসলে পেডেন্টিক doseqহওয়ার জন্য অলসতার সাথে forমূল্যায়ন করা যেমন ব্যবহার করতে হয় ।

#(doseq[n(range):while(>(rand-int(+ n 2))0)](println %))

মূল:

#(loop[n 2](if(>(rand-int n)0)(do(println %)(recur(inc n)))))

(>(+(rand-int n)2)0)সবসময় সত্য না ?
ক্লিফ্রুট

আহ ভাল ধরা, মানে ইনক্রিমেন্ট n!
নিকোনিহার

8

> <> , 124 112 বাইট

i:0( ?v
 &5a ~/
&p0[^ >"\_\^x0!>"0&1+:&p1&:&p2&:&p3&:&p4&:&p0&1+:&p3&:&p4&:
=?v[/!}l]:?!;1
{:   ?^  >
:o>_ {:?!^

এটি অনলাইন চেষ্টা করুন! (আপনি এটা দেখতে পারেন মাছ খেলার মাঠ , কিন্তু কারণে কিছু বাগ আপনি যদি একটি যোগ আছে }পরে lএটি সঠিকভাবে কাজ করতে পারে চতুর্থ লাইনে এবং কোড পরে নতুন লাইন একটি গুচ্ছ যোগ করুন।)

এলোমেলো অবস্থা> <> এ জটিল। একমাত্র এলোমেলো নির্দেশ x, যা চারটি পছন্দ (বাম, ডান, উপরে এবং নীচে) থেকে এলোমেলোভাবে মাছের দিকনির্দেশকে বেছে নিয়েছে, সুতরাং সম্ভাব্যতা 1 / এন সহ কোনও কিছুতে রূপান্তর করা সহজ নয় straight

কোডের নীচে র্যান্ডমনেসের একটি টাওয়ার তৈরি করতে> <> এর স্ব-পরিবর্তনকারী ক্ষমতা ব্যবহার করে এই কোডটি এটি করে does সুতরাং চতুর্থ পর্যায়ে, উদাহরণস্বরূপ, কোডটি দেখে মনে হচ্ছে:

i:0( ?v
 &5a ~/
&p0[^ >"\_\^x0!>"0&1+:&p1&:&p2&:&p3&:&p4&:&p0&1+:&p3&:&p4&:
=?v[/!}l]:?!;1
{:   ?^  >
:o>_ {:?!^
>!0x^
\  _\
>!0x^
\  _\
>!0x^
\  _\
>!0x^
\  _\

মাছ টাওয়ারের নীচে শুরু হয়। টাওয়ারের প্রতিটি স্তরে, xদুটি আয়নাগুলির মধ্যে আটকা পড়ে, তাই মাছগুলি কেবল বাম বা ডান দিকে যেতে পারে। এই দিকগুলির কোনওটিই টাওয়ারটির পরবর্তী স্তরে মাছটি প্রেরণ করে, তবে বাম দিকে যেতে এছাড়াও 0স্ট্যাকের দিকে ধাক্কা দেয় । মাছ টাওয়ারের শীর্ষে পৌঁছে যাওয়ার সময়, স্ট্যাকটিতে কয়েকটি সংখ্যক 0গুলি রয়েছে এবং এই সংখ্যাটি এন ট্রায়াল এবং পি  = 1/2 সহ দ্বিপদী বিতরণ অনুসরণ করে ।

স্ট্যাকের দৈর্ঘ্য যদি 0 হয় (যার সম্ভাব্যতা 1/2 এন ) থাকে তবে প্রোগ্রামটি বন্ধ হয়ে যায়। দৈর্ঘ্য যদি 1 হয় (সম্ভাব্যতা এন / 2 এন সহ ) তবে মাছগুলি ইনপুট এবং একটি নতুন লাইন প্রিন্ট করে এবং টাওয়ারের আরও একটি স্তর তৈরি করে। দৈর্ঘ্য যদি অন্য কোনও হয় তবে মাছগুলি স্ট্যাকটি বাদ দেয় এবং টাওয়ারের নীচে ফিরে যায়। বাস্তবে, সম্ভাব্যতা যা প্রকৃতপক্ষে কিছু করে, তাদের মধ্যে এন ইনপুট স্ট্রিংটি প্রিন্ট করে এবং তার মধ্যে একটি প্রোগ্রামটি থামিয়ে দেয়, প্রয়োজনীয় সম্ভাবনা দেয়।


7

পাইথন 3 , 72 69 66 বাইট

from random import*
s=input();i=1
while randint(0,i):print(s);i+=1

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


1
আউটপুট ক্যাশে বন্ধ করার জন্য একটি সেটিংস রয়েছে - এর মতো
জোনাথন অ্যালান

2
আমি মনে করি এটি বৃহত্তর এনগুলির জন্য "অফ" হিসাবে গ্রহণযোগ্য হবে (আমি গিয়ারে ইংলিশ ব্রেইন পেতে পারি না, "..." (এবং কেন তারা চশমাগুলিকে সম্মান করে, ছদ্ম-এলোমেলোতা এবং বড় সংখ্যক সমস্যার উপেক্ষা করে ...) "উপেক্ষা - ঠিক আছে?) তা হলে আপনি করতে পারেন random()<1/i
জোনাথন অ্যালান

1
এটি কি সম্ভাবনা দিয়ে শুরু হয় না ⅓? randintঅন্তর্ভুক্ত। তারপরে আপনি সেই লাইনটি সংক্ষিপ্ত করতে পারবেনwhile randint(0,i):print(s);i+=1
L3viathan

1
আমি সবেমাত্র একই সমাধান নিয়ে এসেছি।
ফলসিংয়ের ফল

টিআইও লিঙ্ক আপডেট হয়েছে। এখন বাইট গণনাও ভাসমান পয়েন্ট সংস্করণের মতো।
জোনাথন অ্যালান

6

কিউবিআইসি , 19 17 বাইট

ড্রপড =1, সুইচড কন্ডিশনাল, 2 বাইট সংরক্ষণ করা হয়েছে

{p=p+1~_rp||?;\_X

ব্যাখ্যা

{       Infinitely DO
p=p+1   Add 1 to p (p starts as 0, so on first loop is set to 1, then 2 etc...)
~       IF
  _rp|| a random number between 0 and p
        (implicitly: is anything but 0)
?;      THEN print A$ (which gets read from the cmd line)
\_X     ELSE QUIT
        END IF and LOOP are auto-added at EOF

6

ব্রেনল্ফ , 23 বাইট

#|V12[R!&@v!r?<1+>1+]|;

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

এলোমেলো সংখ্যা উত্পন্ন করে xযেখানে 0 0 <= x < n+1হলে শেষ xহয়, অন্যথায় বৃদ্ধি nএবং লুপ থাকে। বিভাজক হয়|

ব্যাখ্যা:

#|V12[R!&@v!r?<1+>1+]|;  Implicit input of commandline args to stack
#|                       Push |
  V                      Create stack2 and switch to it
   12                    Push 1, then 2
     [..............]    Do-While loop, will run indefinitely unless conditional skips
                         Closing bracket
      R                  Return to stack1
       !&@               Print entire stack without popping
          v              Switch to stack2
           !r            Generate random number 0 <= x < n where n is last item on stack
             ?           If last item is greater than 0..
              <          ..Move first item to end of stack
               1+        ..and increment, this is the loop counter number
                 >       ..Move back
                  1+     ..and increment, this is the upper range of the RNG
                    ]    ..end loop
                     |   Endif
                      ;  Suppress implicit output

6

অ্যালিস , 18 বাইট

/?!\v
\iO/>]qhUn$@

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

ব্যাখ্যা

/     Reflect to SE. Switch to Ordinal.
i     Read all input as a string and push it to the stack.
!     Store the string on the tape.
/     Reflect to E. Switch to Cardinal.
>     Ensure that the IP moves east. This begins the main loop.

  ]   Move the tape head to the right. We'll be using the tape head's 
      position as a counter variable. Note that this tape head is independent
      of the one used in Ordinal mode to point at the input string.
  q   Push the tape head's position to the stack.
  h   Increment it (so that it's 2 initially).
  U   Get a uniformly random number in [0,n).
  n   Logical NOT. Gives 1 with probability 1/n and 0 otherwise.
  $@  Terminate the program if we got a  1.
  \   Reflect to NE. Switch to Ordinal.
  ?   Retrieve the input from the tape.
  O   Print it with a trailing linefeed.
  \   Reflect to E. Switch to Cardinal.

v     Send the IP south where it runs into the > to start the next
      loop iteration.



3

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

A²γW‽γ«θ_A⁺γ¹γ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। _বিভাজক হিসাবে ব্যবহার করে। দ্রষ্টব্য: আউটপুট ক্যাচিং অক্ষম করা হয়েছে, সুতরাং অনুগ্রহ করে ডেনিসের সার্ভার হাতুড়ি করবেন না!


3

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

`G@QYrq]x

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

ব্যাখ্যা

`        % Do...while
  G      %   Push input
  @      %   Push iteration index k, starting at 1
  QYrq   %   Random integer uniformly distributed in {0, 1, ..., k}. This is the
         %   loop condition. If non-zero (which occurs with probability k/(1+k))
         %   proceed with next iteration; else exit loop
]        % End
x        % Delete, as there are one too many strings. Implicitly display the stack

3

পার্ল 6 ,  50 41 38 36  26 বাইট

{put $_//last for (($,$_),*⊎$_...*).map(*.pick)}

চেষ্টা করে দেখুন

{eager ->{(++$).rand>.5??.put!!last}...*}

চেষ্টা করে দেখুন

{eager ->{(++$).rand>.5??.put!!0}...0}

চেষ্টা করে দেখুন

{eager ->{(++$).rand>.5&&.put}...!*}

চেষ্টা করে দেখুন

.put while (++$/).rand>.5

( -nকমান্ডলাইন যুক্তি সহ)

চেষ্টা করে দেখুন


3

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

v=s=input();i=2
while hash(v)%i:print(s);i+=1;v=hash(v)

ব্যাখ্যা

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

যদি হ্যাশটি সিউডো-এলোমেলো যথেষ্ট হয় তবে এর সাথে থাকা মডুলোটি iসম্ভাবনার সাথে শূন্য 1/i

নোট

আমি রিডানড্যান্ট হ্যাশ দেখে কিছুটা বিরক্ত, তবে পাইথনে কিছুক্ষণের জন্য বা শর্তে অ্যাসাইনমেন্ট না দিয়ে আমি কিছুটা আটকে আছি।


আপনি কি জানেন যে পুনরাবৃত্ত হ্যাশিং সর্বদা এলোমেলো সংখ্যার পূর্ণ স্থানকে coverেকে রাখে, বা এটি সম্ভবত কোনও চক্রের মধ্যে আটকে যেতে পারে? মানুষকে ইচ্ছাকৃতভাবে হ্যাশের সংঘর্ষ সৃষ্টি করতে এড়ানোর জন্য বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজ আজকাল র্যান্ডমাইজড হ্যাশ অ্যালগরিদম ব্যবহার করে তবে আমি নিশ্চিত নই যে কীভাবে হ্যাশ অ্যালগরিদমগুলি পিআরএনজি এর সাথে তুলনা করে।

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

I'm a little bothered...পুনরাবৃত্তির?
ফিলিপে নারদী বাটিস্তা

3

সি শার্প

এটি শীর্ষ সি # উত্তর হিসাবে একই দৈর্ঘ্য, কিন্তু:

using System;s=>{var x=(1<<31)/new Random().Next();for(;++x>0;)Console.Write(s+" ");}

কেবলমাত্র উল্লেখ করতে চেয়েছিলেন যে কিছু গণিত সঠিক সম্ভাবনা তৈরি করতে পারে।

int.MaxValue/new Random().Next()-1

এর সমতুল্য

(int)(1 / new Random().NextDouble()) - 1;

এবং f (x) = 1 / x-1 ফাংশনটি হ'ল:

f (1) = 0

f (1/2) = 1

f (1/3) = 2

f (1/4) = 3

সুতরাং 1/2 এর জন্য 0 কে গোল করার সুযোগ, 1/6 কে 1 করে গোল করার সুযোগ এবং 1 / (n + 1) (n + 2) কে গোল করে নামিয়ে নেওয়ার সুযোগ হবে।

হতে পারে অন্য কোনও ভাষা এটির মূলধন দিতে পারে।

সম্পাদনা: আমার ভুল সংশোধন

এটিকে আরও ছোট করার জন্য আমি কিছু ভেবেছিলাম।

সম্পাদনা সম্পাদনা: আমি শুধু সব ধরণের ভুল। ল্যান্ডটি এলোমেলোভাবে টানছে কারণ এটি যদি একাধিকবার মূল্যায়ন করা হয় তবে এটি কাজ করবে না।

সম্পাদনা সম্পাদনা সম্পাদনা: আমি পরিবর্তনশীল থেকে মুক্তি পেয়েছি i। আমি এখন এটি সঙ্কুচিত করার চেষ্টা বন্ধ করতে যাচ্ছি। নাহ, মিথ্যা। অন্য একটি বাইট থেকে মুক্তি পেয়েছি।



2

সি, 41 বাইট

n;f(char*s){for(n=1;rand()%++n;puts(s));}

অনুমান randবীজযুক্ত হয়। এটি অনলাইন চেষ্টা করুন!


"ধরে নেওয়া randহয় বীজযুক্ত।" - এটি কি বৈধ অনুমান? randডিফল্টরূপে 1 এর একটি নির্দিষ্ট বীজমূল্য পেতে মানের দ্বারা প্রয়োজনীয় এবং আমি জানি যে সমস্ত প্রয়োগগুলি কেবল এটিই করে। এই কোডটি যদি অন্য কোডের সাথে একত্রিত হওয়ার সময় চ্যালেঞ্জটি জিজ্ঞাসা করে কেবল তাই করে তবে আমি মনে করি যে উত্তর এবং বাইট গণনায় অন্য কোড অন্তর্ভুক্ত করা দরকার।
এইচডিভি

2

braingasm , 22 বাইট

সম্পাদনা করুন: একই বাইট গণনা, তবে আমি বুঝতে পেরেছি যে আমি নতুন টেপের Lনকল বৈশিষ্ট্যটি ছিনিয়ে নিতে পারি ।

,[>,]>L+[+$rzQ>[.>]:>]

0বিভাজক হিসাবে ব্যবহার করে । এর মতো কাজ করে:

,[>,]                   Read a byte and move to next cell until end of input.
     >                  After the loop we're in an empty cell;
                          Leave it empty and move to the next.
      L                 Set tape limit here:
                          The tape will then wrap around if we move further.
       +                Increase current cell by one.
                          This cell will be our counter.
        [            ]  Loop until the counter is zero.
                          That won't happen, so it's an infinite loop.
         +              Increase again, so the first time the counter is 2.
          $r            Get a random number, 0 <= r > current cell
            zQ          Quit the program if that random number was 0
              >         Wrap around to the start of the tape.
               [.>]     Print the input stored on the tape
                          The loop will stop at the blank cell.
                   :    Print the blank cell as a number ("0")
                    >   Go to the next (last) cell

2

পাইথন , 54 বাইট

lambda s:int(1/random()-1)*(s+'|')
from random import*

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

যেমন কপির সংখ্যা জেনারেট করা floor(1/p)-1সঙ্গে pঅবিশেষে ইউনিট ব্যবধান থেকে চয়ন করা হয়েছে। কপি সংখ্যা nযখন 1/p-1মধ্যে বৃক্ষের পতন nএবং n+1, যা যখন ঘটে 1/(n+2) < p < 1/(n+1)। এটি সম্ভাব্যতা 1/(n+1)-1/(n+2)বা সঙ্গে ঘটে 1/((n+1)*(n+2)। আউটপুট nকপিগুলির কাঙ্ক্ষিত সম্ভাবনা : 1/20 এর 1/6প্রোব, 1 এর 1/12প্রোব, 2 এর প্রোব, ...


form random import*নীচে কেন ?
ক্যালকুলেটরফলাইন

পছন্দ করুন ফাংশন সংজ্ঞা যেভাবে কাজ করে।
xnor

@ ক্যালকুলেটরফ্লাইন f=টিআইও হেডারে লিখে না রেখে বাইটে
নামার জন্য

এটা বোধগম্য.
ক্যালকুলেটরফলাইন

2

সি ++, 97 96 57 বাইট

এখানে কোডগল্ফে আমার প্রথম চেষ্টা :)

#include<iostream>
int main(){std::string S;std::cin>>S;int i=1;while(rand()%++i)puts(S.data());}

আমি ব্যবহার করে একটি বাইট সংরক্ষণ করেছি for

#include<iostream>
int main(){std::string S;std::cin>>S;for(int i=1;rand()%++i;)puts(S.data());}

39 টি বাইট সংরক্ষণ করা হয়েছে যেহেতু কেউ মনে করে না এর মধ্যে রয়েছে count

void p(string S){for(int i=1;rand()%++i;)puts(S.data());}

ungolfed

#include <iostream>
int main()
{
  // Create and read string from inputstream
  std::string S;
  std::cin >> S;       

  // rand % i: create random int in range [0, i-1]
  // Zero is seen as false and all positive int as true
  int i = 1;
  while (rand() % ++i) 
    puts(S.data());    
}

আপনি কমান্ড লাইন থেকে স্ট্রিংটিকে একটি আর্গুমেন্ট হিসাবে নিতে পারেন
মালিয়াফো

অন্তর্ভুক্ত গণনা করা হয়, যদি না আপনি ডিফল্টরূপে অন্তর্ভুক্ত এমন একটি সংকলক খুঁজে না পান
ফিলিপ নারদী বাটিস্তা

2

এফ #, 161 বাইট

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

let f s=
 let r,z=System.Random(),(<>)0
 let p _=printfn"%s"s
 seq {for i in 2|>Seq.unfold(fun i->Some(i,i+1))do yield r.Next(i)}|>Seq.takeWhile z|>Seq.iter p

এর সাথে সম্পাদন করুন:

[<EntryPoint>]
let main argv =
    "test" |> f
    0

বিভাজক হিসাবে একটি নতুন লাইন লিখেছেন।


2

রুবি , 29 + 1 = 30 বাইট

-nপতাকা ব্যবহার করে ।

i=1;puts$_ while i>rand(i+=1)

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


যেহেতু আপনি ঠিক এক লাইনের ইনপুট নিচ্ছেন, তাই আপনি use ব্যবহার করতে পারেন $ আমি পরিবর্তে বিশেষ পরিবর্তনশীল । যুক্তিযুক্তভাবে আপনি এর puts$_সাথে প্রতিস্থাপন করতে পারেন printতবে এটি বিধি সমর্থন করে তা পরিষ্কার নয়।
হিস্টোক্র্যাট

2

জেএস (ইএস 6), 47 বাইট

x=>{for(i=1;Math.random()<i/(i+1);i++)alert(x)}

অন্যান্য ES6 উত্তরের মতো নয়, এটি পুনরাবৃত্তির পরিবর্তে লুপ এবং সতর্কতা বোমার জন্য ব্যবহার করে। প্রোগ্রামটি বন্ধ হয়ে গেলে যে সেপারেটর মুদ্রিত হয় তা অপরিজ্ঞাত।



1

পাইথন, 75 বাইট

অন্য পাইথনের উত্তরটি সংক্ষিপ্ত, তবে আমি এটি অন্যভাবে চেষ্টা করতে চেয়েছিলাম:

from random import*
f=lambda d=1,s=input():randint(0,d)and s+'!'+f(d+1)or''
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.