0 অবধি র্যান্ডমাইজিং


29

চ্যালেঞ্জ

স্যান্ডবক্স পোস্ট

একটি ধনাত্মক পূর্ণসংখ্যা (K)আউটপুট প্রদান করেছে এর (Y)মধ্যে সমান -এলোমেলো পূর্ণসংখ্যা [0, K)

যদি Y > 0ধরে নাও K = Yএবং প্রক্রিয়াটি পুনরায় পুনরুদ্ধার করুন Y = 0

বিধি

  • ইনপুট প্রথমে মুদ্রিত করা আবশ্যক
  • আপনার ইচ্ছামত আউটপুট ফর্ম্যাট
  • আপনার প্রোগ্রামটি শেষ করতে হবে।
  • 0 অবশ্যই চূড়ান্ত আউটপুট হবে, পরিবর্তে emptyচ্ছিকভাবে একটি খালি লাইন 0

যদি জমাটি কোনও ফাংশন হয় তবে এটি মুদ্রণের পাশাপাশি 0 ফেরত দিতে পারে?
অ্যাডম

1
@ অ্যাডাম হ্যাঁ, আপনি অতিরিক্ত হিসাবে ফিরে আসতে পারেন
লুইস

আমার আরএনজি বীজ করা দরকার?
সিগস্ট্যাকফুল্ট

আমরা কি সীমানা ছাড়াই মুদ্রণ করতে পারি?
তিতাস

আমি কৌতুহল পেয়েছিলাম। এটি প্রমাণ করা বেশ সহজ যে এই প্রোগ্রামটি শেষ হওয়ার আগে গড় পদক্ষেপগুলি H (K-1) + 1 যেখানে এইচ (কে) হ'ল কে'থ সুরেলা সংখ্যা । এন = 1000 এর জন্য, এটি গড়ে 8.484 ধাপ।
জে.ডো

উত্তর:


19

পাইথ , 6 5 4 বাইট

.uOW

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

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

.uOW সম্পূর্ণ প্রোগ্রাম। STDIN থেকে পূর্ণসংখ্যা নেয় এবং একটি তালিকা STDOUT এ আউটপুট করে।
.u संचयी স্থির-পয়েন্ট point প্রদত্ত প্রাথমিক মান সহ প্রদত্ত ফাংশন প্রয়োগ করুন,
        যা কোনও ফলাফল না হওয়া পর্যন্ত ইনপুটকে স্পষ্টভাবে বরাদ্দ করা হয় 
        আগে পাওয়া যায়। অন্তর্বর্তী ফলাফলের তালিকা ফেরত দেয়।
   শর্তাধীন অ্যাপ্লিকেশন। যুক্তি (বর্তমান মান) যদি সত্যবাদী হয়, তবে
        নীচের ফাংশনটি প্রয়োগ করুন, অন্যথায় এটি অপরিবর্তিত রেখে দিন।
  হে পরিসীমা মধ্যে এলোমেলো পূর্ণসংখ্যা [0, এন)।
        IOW: .u এর প্রতিটি পুনরাবৃত্তিতে, আরম্ভ করে বর্তমান মানকে একটি ভেরিয়েবল এন বরাদ্দ করুন
        ইনপুট সহ যদি N 0 হয় না, তবে [0, N) এ এলোমেলো পূর্ণসংখ্যা নির্বাচন করুন
        প্রত্যাবর্তন এন অপরিবর্তিত। যখনই আমরা একটি 0 এর মুখোমুখি হই, পরের পুনরাবৃত্তিটিও অবশ্যই করা উচিত
        একটি 0 এর ফলাফল, এবং সেইজন্য লুপটি সেখানে থামে।

1
পাইথটিতে এটি করার একটি উপায় আমি দেখেছি তবে আমি একটি শিক্ষানবিস। সম্মান. আগস্ট মাসের ভাষা কি হতে পারে?
এলপেড্রো

15

সি (জিসিসি) , 42 বাইট

f(_){printf("%d\n",_);(_=rand()%_)&&f(_);}

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

শর্ট-সার্কিট যুক্ত যৌক্তিক এবং ব্যবহার করে।

f(_){                 // f(int _) {
    printf("%d\n",_); // print argument and a newline
    (_=rand()%_)      // set _ to rand()%_
    &&f(_);}          // short-circuit AND to recursively call f if _ not zero

সি (জিসিসি) , 40 বাইট (ডাব্লু / ও প্রিন্টিং প্রাথমিক মান)

f(_){printf("%d\n",_=rand()%_);_&&f(_);}

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

শর্ট-সার্কিট যুক্ত যৌক্তিক এবং ব্যবহার করে।

f(_){              // f(int _) {
    printf("%d\n", // print an integer and a newline 
    _=             // The integer is _ which we set to...
    rand()%_);     // a random value modulo the input _
    _&&f(_);}      // short-circuit AND to recursively call f if _ not zero

4
rand()%_অভিন্ন নয়
njzk2

(যদি আপনি নিশ্চিত না হন তবে এই পদ্ধতিটি ব্যবহার করে [1,5] মান উত্পন্ন করতে 6-পার্শ্বযুক্ত ডাইস ব্যবহার করার চেষ্টা করুন।)
এনজেজকি 2

3
আমি পুরোপুরি অবগত যে র্যান্ড () প্রায় সর্বদা পক্ষপাতদুষ্ট (কাটনের কারণে) তবে মানকটি এর গ্যারান্টি দেয় না (RAND_MAX তত্ত্বের ভিত্তিতে কেবল আমাদের ভাগ্যের দ্বারা আমাদের সমস্ত সংখ্যার একাধিক হতে পারে: পি যদিও সাধারণত এটি ~ 65 কে )। যে পরিসীমাগুলির সাথে আমরা এটি ব্যবহার করছি তার অনুশীলনে আমরা চ্যালেঞ্জের অনুরূপ জমাগুলির বিরুদ্ধে দাঁড়াতে যথেষ্ট এলোমেলোভাবে উপস্থিত হতে পারি।
লাম্বদাবেতা

1
এটি চ্যালেঞ্জের মধ্যে থেকে "একটি সমান-এলোমেলো পূর্ণসংখ্যা আউটপুট আউট করুন", সুতরাং, কঠোরভাবে বলতে গেলে, এটি বৈধ নয়
njzk2

3
কঠোরভাবে এখানে সমস্ত ভাষা prng এর ব্যবহার করে। তাদের কেউই সত্যিকারের ইউনিফর্মের এলোমেলো নম্বর দেবে না (যার জন্য এনট্রপির একটি নিখুঁত উত্স প্রয়োজন)। যদিও এর চেয়ে অনেকগুলি অভিন্ন, লগ (কে) পুনরাবৃত্তিতে এটি লক্ষণীয় নয়।
লাম্বদাবেতা

10

আর , 66 60 56 43 41 বাইট

function(n)while(print(n))n=sample(n,1)-1

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


আমার মনে হয় না আপনার প্রয়োজন হবে >0এবং cat(n,"")(খালি স্ট্রিং) কাজ করবে।
জিউসেপে

তবে আমি মনে করি printএখানে আরও দক্ষ, কারণ এটি তার যুক্তিটি
জিউস্পে

এছাড়াও 56 বাইট:k=scan();while(x<-sample(1:k-1,1))k=c(x,k);cat(rev(k),0)
জাদ

1
আমি কোঁকড়া বন্ধনীগুলি সরিয়ে দিতে ভুলে গিয়েছি, যাতে আপনি আরও 2 টি বাইট সঞ্চয় করতে পারেন;) এটি অনলাইনে চেষ্টা করুন!
18

2
39 বাইট:n=scan();while(print(n))n=sample(n,1)-1
jজুরিও


6

পেপে , 25 বাইট

পেপে ব্যবহারকারী সোয়াকু দ্বারা তৈরি একটি প্রোগ্রামিং ভাষা ।

REeErEErReEEreeEREEeEEree 

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

ব্যাখ্যা:

REeErEErReEEreeEREEeEEree # full program

REeE                      # input as num, in stack 1
    rEE                   # create loop in stack 2 with name 0
       rReEE              # - output and preserve the number in stack 1
            reeE          # - output a newline "\n"
                REEeEE    # - random number by 0 to input
                      ree # goto loop with name 0 if stack 1 is not equal
                            to stack 2

5

পার্ল 6 , 18 বাইট

{$_,(^*).pick...0}

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

নামবিহীন কোড ব্লক যা মানগুলির একটি তালিকা প্রদান করে। যদি আপনার সংখ্যাটি ব্যাপ্তি হওয়ার বিষয়টি মনে না করে তবে আপনি এটি করতে পারেন:

{^$_,^*.pick...0}

17 বাইট জন্য। মজাদারভাবে যথেষ্ট, অন্য অন্তর্নির্মিত এলোমেলো ফাংশন, rollএকই পরিমাণ বাইটগুলির জন্য এই উদাহরণে একই আচরণ করে।


5

পার্ল 5 .10.0 -pl, 26 বাইট

say;say while$_=int rand$_

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


2
নিস! 22 এর জন্য খুব অনুরূপ পদ্ধতির সাথে উপস্থিত হয়েছে: এটি অনলাইনে চেষ্টা করুন!
ডম হেস্টিংস

অন্যান্য অনুরূপ: 20 + 2 বাইট
ডেনিস ইবায়েভ

5

জেলি ,  4  3 বাইট

XƬ0

এটি একটি monadic লিঙ্ক (ফাংশন) যা একটি অ্যারে মুদ্রণ করে এবং 0 ফেরত দেয় ।

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

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

XƬ0  Monadic link. Argument: n

XƬ   Pseudo-randomly pick (X) an integer k in [1, ..., n], set n = k, and repeat.
     Do this 'til (Ƭ) the results are no longer unique and return the array of
     unique results, including the initial value of n.
     This stops once X returns k with argument k. The second k will be omitted
     from the return value.
  0  Print the resulting array and set the return value to 0.

4 এর খুব সুন্দর স্ট্রাইকথ্রু!
এনজিএম

1
আমরা নিয়মিত 4 এর মতো দেখতে 4 টি অতিক্রম করতে চাই না, তাই না?
ডেনিস

4

ব্র্যাচল্যাগ , 8 বাইট

ẉ?ℕ₁-₁ṙ↰

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

ব্যাখ্যা

ẉ          Write the input followed by a linebreak
 ?ℕ₁       The input must be in [1, …, +∞)
    -₁ṙ    Generate an integer in [0, …, input - 1] uniformly at random
       ↰   Recursive call with that random integer as the new input

পুনরাবৃত্তি একবার ?ℕ₁ব্যর্থ হয়ে দাঁড়ায় , যখন ইনপুট হয় 0



4

জে, 13 বাইট

[:}:? ::]^:a:

সাবওয়েতে, তাই টিআইওর অভাবের জন্য ক্ষমাপ্রার্থী (আশা করি সঠিকতার অভাব নেই)।

মানগুলির একটি তালিকা আউটপুট করে।

সম্ভবত এপিএল পদ্ধতির সংক্ষিপ্ততর হবে, তবে এটিই আমি ভেবেছিলাম।

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

^:a: কনভার্জেন্স পর্যন্ত বারবার প্রয়োগ করুন, একটি অ্যারেতে মধ্যবর্তী ফলাফলগুলি সংরক্ষণ করে।

?[0, K)জন্য পরিসীমা এলোমেলো পূর্ণসংখ্যাK বেশি 0. 0, এটি সীমার মধ্যে একটি র্যান্ডম পূর্ণসংখ্যা দেয় (0,1)। ভাসমান পয়েন্ট সংখ্যাটির জন্য এটি ত্রুটি করে।

::] ইনপুট করার জন্য একটি ত্রুটি ধরুন ? ইনপুটটিতে পরিবর্তে, হয়ে ইনপুটটিকে আউটপুট দিন।

}: অ্যারেতে সর্বশেষ মানটি থেকে মুক্তি পান (এটি এমন যাতে ভাসমান পয়েন্ট সংখ্যা আউটপুট না হয়)।

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


এটা ঠিক আমার নাকি কোড একই আউটপুট দেয়?
লুইস ফেলিপ দে জেসুস মুনোজ

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

@ কোল আপনি সঠিক আছেন
জোনাহ

4

জাভাস্ক্রিপ্ট (ES6), 38 37 বাইট

-1 বাইট @ আর্নল্ডকে ধন্যবাদ

f=n=>[n,...n?f(Math.random()*n|0):[]]


আপনি কি আদৌ ম্যাথ.র্যান্ডম কমাতে পারবেন? উদাহরণস্বরূপ কোডগল্ফ.স্ট্যাকেক্সেঞ্জাওএএ
মেরি

1
@ মেরি ব্যবহার new Date%nকরে এখানে সত্যিই কাজ হয় না, যেহেতু এটি একাধিক এলোমেলো সংখ্যা তৈরির জন্য দরকারী হিসাবে দ্রুত পর্যাপ্ত পরিবর্তন করে না
হারমান এল

4

সি, 38 বাইট

f(k){printf("%d ",k);k?f(rand()%k):0;}

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

Ungolfed

void f(int k){
    printf("%d ",k);
    if(k)
        f(rand()%k);
}

1
আপনি একটি দিয়ে টের্নারি অপারেটর প্রতিস্থাপন করে একটি বাইট সংরক্ষণ করতে পারেন &&; এছাড়াও, আপনি আপনার mainফাংশনে আরএনজি বপনের বিষয়টি বিবেচনা করতে পারেন : এটি অনলাইনে চেষ্টা করুন!
এরিকএফ

1
আপনি পুরো তিনটি অংশ থেকে মুক্তি পেতে পারেন এবং একটি ত্রুটিতে শেষ করতে পারেন। 34 বাইট
জো কিং

4

পাইথ , 4 বাইট

W
~O

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

এটি মূলত অ্যালগোরিদম প্রয়োগ করে:

প্রশ্নঃইনপুটআরপিএকটিটি1।টিমিপিপ্রশ্নঃ2।প্রশ্নঃunif{0,প্রশ্নঃ-1}3।পিRআমিএনটি(টিমিপি)ইউএনটিআমিটিমিপি=0

পাইথটি অ্যালগরিদমে অনুবাদ করতে, আমরা বেশিরভাগটি কেবল প্রতিটি চরিত্রের অর্থ কী তা পরীক্ষা করতে পারি। যেহেতু Pyth উপসর্গ স্বরলিপি লেখা আছে (অর্থাত * + 1 2 3হয় (1 + 2) * 3) আমরা আর্গুমেন্ট বাম এবং ভরাট থেকে শুরু করতে পারেন হিসাবে আমরা যেতে।

Wলুপ যখন একটি traditionalতিহ্যগত শুরু। এর পরে প্রথম বিবৃতিটি লুপের শর্ত এবং এর পরে দ্বিতীয় বিবৃতিটি লুপ বডি। দ্বিতীয় বিবৃতিটি খালি থাকলে এটি কোনও অপশন হয়ে যায় । এটি যখন পাইথনের ঠিক মতো কাজ করে, তাই এটি শূন্য-শূন্য সংখ্যাকে সত্য এবং শূন্য হিসাবে মিথ্যা হিসাবে মূল্যায়ন করবে।

কিছুক্ষণ পরে প্রথম বিবৃতিটি নিউলাইন চরিত্রের সাথে শুরু হয়। এটি পাইথের "মুদ্রণ এবং নতুন লাইনের সাথে ফিরুন" ফাংশনের সাথে মিলে যায়। এটিতে একটি যুক্তি লাগে যা পরে মুদ্রিত হয় এবং অশোধিতও ফিরে আসে। এটি আমাদের প্রয়োজনীয় ক্রিয়াকলাপ সম্পাদন করার সময় মধ্যবর্তী পদক্ষেপগুলি মুদ্রণ করতে সহায়তা করে।

এই মুদ্রণ ফাংশনে পাস হওয়া যুক্তিটি শুরু হয় ~যা কিছুটা বিশেষ। চরিত্রটি যদি তাত্ক্ষণিকভাবে ~পরিবর্তনশীল হয় তবে এটি দুটি আর্গুমেন্ট গ্রহণ করে, অন্যথায় এটি একটি নেয়। যেহেতু Oএকটি পরিবর্তনশীল নয় ~কেবলমাত্র একটি যুক্তি গ্রাস করবে। অনেকগুলি প্রচলিত ভাষায় ~যেমন কাজ +=করে তেমনি নিকটতম অপারেটর পোস্ট-ইনক্রিমেন্ট অপারেটর ++হতে পারে C। আপনি হয়ত জানেন যে এটি বর্তমান মান হিসাবে x++ব্যবহারের xমতো xহবে তবে এর পরে হবে x+1~একই ধারণা, তবে প্রথম যুক্তির ফলাফল যাই হোক না কেন তা সাধারণীকরণ করা হয়। কীভাবে ভেরিয়েবলকে নির্ধারণ করা হবে তা পরে সম্বোধন করা হবে।

আর্গুমেন্ট ~হয় Oযা খুবই সহজ। যখন এর একটি যুক্তি একটি পূর্ণসংখ্যা হয়O এলোমেলোভাবে অভিন্নভাবে সেই পূর্ণসংখ্যার চেয়ে 0 থেকে একের কম হয়।

এখন আপনি লক্ষ্য করেছেন Oযে কোনও যুক্তি নেই। এখানে পাইথ ইন্টারপ্রেটারটি অনুমেয়ভাবে অনুমান করে যা এখানে পরিবর্তনশীল QQপাইথের একটি বিশেষ অর্থ রয়েছে: যখনই এটি কোনও প্রোগ্রামে উপস্থিত থাকে তখন পাইথ প্রোগ্রামটি প্রোগ্রামের Qইনপুটকে অর্পণ করে শুরু হয় । যেহেতু এটি প্রথম ভেরিয়েবলের ~যুক্তিতে ঘটবে Qএটি এখন ভেরিয়েবল যা ~একটি মান নির্ধারণ করবে।

আমাদের "পঠনযোগ্য" প্রোগ্রামটির সংক্ষিপ্তসারটি দেখতে পারে:

while print_and_return( assign_variable( Q, unif(0, Q-1) ) ):
    pass

এবং একটি নমুনা "রান-থ্রু" এর মতো দেখতে পাওয়া যেতে পারে:

  1. প্রশ্ন = 5
  2. O3 ~রিটার্ন দেয়, 5 টি \nরিটার্ন করে এবং 5 প্রিন্ট করে যা সত্য
  3. প্রশ্ন = 3
  4. O0 প্রদান করে, ~3 প্রদান করে, 3 \nফেরত দেয় এবং 3 টি প্রিন্ট করে যা সত্য
  5. Q = 0
  6. Oঅপ্রাসঙ্গিক কিছু দেয়, ~0 দেয়, \nফেরত দেয় এবং 0 মুদ্রণ করে যা মিথ্যা
  7. প্রশ্ন = অপ্রাসঙ্গিক কিছু
  8. ফুরান

3

এপিএল (ডায়ালগ ইউনিকোড) , 12 9 বাইট

বেনামে ট্যাসিট প্রিফিক্স ফাংশন। ধরে নেওয়া ⎕IO( I ndex O rigin) 0, যা বহু সিস্টেমে ডিফল্ট। চালানোর সময় মুদ্রণের পাশাপাশি চূড়ান্ত মান (0) প্রদান করে।

{⌊?⎕←⍵}⍣=

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

{... }⍣= স্থিতিশীল না হওয়া পর্যন্ত নিম্নলিখিত ফাংশন প্রয়োগ করুন:

⎕←⍵ আর্গুমেন্ট আউটপুট

? সেই – 1 এর মাধ্যমে 0 পরিসীমাতে অভিন্ন বিতরণ করা এলোমেলো নম্বর প্রদান করুন। 1

 বৃত্তাকার ডাউন (কারণ ?0একটি (0,1) ভাসা দেয়)


3

সি (জিসিসি) , 40 42 বাইট

কিছু বোকা first প্রাথমিক মানটি প্রথমে প্রিন্ট করতে ভুলে গিয়েছিল।

f(K){while(K)printf("%d\n",K,K=rand()%K);}

আতঙ্কিত হবেন না।


তুমি আমাকে বাঁধা, প্রশ্ন এছাড়াও প্রয়োজন যে আপনি তা ছাড়া প্রাথমিক কে প্রিন্ট আমিও 40 পেয়েছিলাম এছাড়াও আপনি একই ভাবে 42 সম্পূর্ণরূপে অনুবর্তী সংস্করণ পেতে পারেন: f(K){while(K)printf("%d\n",K),K=rand()%K;}। তবুও আপনি আমার সমান সমাধানের জন্য +1 পেয়েছেন!
লাম্বদাবেতা

আরও ভাল:f(K){while(K)printf("%d\n",K,K=rand()%K);}
সাইনস্ট্যাকএফএল্ট

3

x86 + রড্র্যান্ড, 19 বাইট

সোজা বাস্তবায়ন। কে ইনপুট নেয় ecxএবং একটি বাফারকে আউটপুট দেয় ebx

0000000a <start>:
   a:   0f c7 f0                rdrand %eax
   d:   31 d2                   xor    %edx,%edx
   f:   f7 f1                   div    %ecx
  11:   89 13                   mov    %edx,(%ebx)
  13:   83 c3 04                add    $0x4,%ebx
  16:   89 d1                   mov    %edx,%ecx
  18:   85 c9                   test   %ecx,%ecx
  1a:   75 ee                   jne    a <start>
  1c:   c3                      ret  

3

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

f=lambda k:print(k)or f(hash('.'*k)%k)

সম্ভবত সর্বাধিক ক্রিপ্টোগ্রাফিক সুরক্ষিত এলোমেলো সংখ্যা জেনারেটর নয় তবে মানুষের চোখের কাছে এটি যথেষ্ট এলোমেলো মনে হচ্ছে ...

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


দ্রষ্টব্য: 1) এন্ট্রি প্রতিটি নতুন দোভাষীতে চালিত হওয়ার সময় (সাধারণত) বিভিন্ন ফলাফল দেয় তবে একই পাইথন সেশনের মধ্যে চালানো হলে একই ফলাফল দিতে পারে। 2) আমি ধরে নিয়েছি যে স্পষ্টভাবে পরীক্ষা না করেই কোনও ত্রুটির মধ্য দিয়ে সমাপ্তি k=0গ্রহণযোগ্য।
লুকা সিটি

দুঃখিত, তবে ফাংশনগুলি একই পরিবেশে প্রায়শই পুনরায় ব্যবহারযোগ্য হতে হবে । কোনও ত্রুটির মধ্যে সমাপ্তি গ্রহণযোগ্য যদিও
জো কিং

কার্যটির জন্য প্রদত্ত পরিসর থেকে অভিন্ন র্যান্ডম নম্বর প্রয়োজন requires বজায় রাখার hash() চেষ্টা করে কিন্তু এই সম্পত্তিটির গ্যারান্টি দেয় না । এই কাজের জন্য আপনার randomমডিউলটি ব্যবহার করা উচিত ।
ডেভিড ফোস্টার

কেবল 57 বাইটের সাহায্যে আপনি random.randrange()from random import*;f=lambda k:print(k)or f(randrange(k))
ডেভিড ফোস্টার 13

3

টিআই-বেসিক (টিআই -৪৮ প্লাস সিই), 17 13 বাইট

While Ans
Disp Ans
int(randAns
End
Ans

মিশা লাভরভ থেকে -4 বাইট

Ansহিসাবে ইনপুট লাগে 50:prgmNAME

টিআই-বেসিক একটি টোকেনাইজড ভাষা । এখানে ব্যবহৃত সমস্ত টোকেনগুলি একটি বাইট।

ব্যাখ্যা:

While Ans    # 3 bytes, While the number we hold is not zero:
Disp Ans     # 3 bytes,   Display it on its own line
int(randAns  # 4 bytes,   and replace it with a number randomly
                        # chosen from 0 to one less than it (inclusive)
End          # 2 bytes, end While loop
Ans          # 1 byte,  Display (and return) zero

মিশা লাভরভের প্রস্তাবিত একটি 11-বাইট সমাধান enterযা প্রথমটি অনুসরণ করে প্রতিটি লাইনের পরে চাপতে হবে ।

Ans
While Ans
Pause int(randAns
End

1
int(Ansrandখাটো হয়। এছাড়াও, Pauseপরিবর্তে ব্যবহার করে Disp, আপনি লুপটিতে একমাত্র বিবৃতি দিতে পারেন Pause int(Ansrandযা আপডেট হয় Ans
মিশা লাভরভ

3

পাইথন 2 , 64 62 60 বাইট

from random import*
k=input()
while k:print k;k=randrange(k)

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


সংরক্ষিত

  • -২ বাইটস, জোনাথন অ্যালানকে ধন্যবাদ

"ইনপুট প্রথমে মুদ্রিত হতে হবে" ... while 1:print k;k=randint(0,~-k)কাজ করা উচিত (শেষে একটি ত্রুটি সহ)
জোনাথন অ্যালান

... এবং তারপরে while 1:print k;k=randrange(k)দু'জনকে বাঁচায়।
জোনাথন অ্যালান

1
@ জোনাথন অ্যালান ধন্যবাদ :), প্রশ্নগুলি বলছে যে আমি 0 এর পরিবর্তে একটি খালি লাইন ব্যবহার করতে পারি, সুতরাং কোনও ত্রুটি নেই।
TFeld

3

সি ++ (জিসিসি), 98 বাইট

#import<cstdio>
#import<cstdlib>
#define d printf("%i ",x 
int p(int x){d);while(x>0)d=rand()%x);}

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

ব্যবহার

int main() {
    p(100);
}

এটি আমার প্রথম কোড গল্ফ প্রচেষ্টা। যে কোনও প্রতিক্রিয়া বা মন্তব্য স্বাগত।

সম্পাদনা করুন: বৈধ করার জন্য প্রস্তাবিত মূল ফাংশনটি সরানো হয়েছে।


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

-Dd='printf("%i,",x'পরিবর্তে সংকলক পতাকা যুক্ত করা #defineআপনার কিছু বাইট সংরক্ষণ করতে পারে (-4), এবং আপনি যতক্ষণ না আপনার ফলাফলের দিকে বাইটগুলি গণনা করেন ততক্ষণ অনুমতি দেওয়া হবে (কারণ এটি একটি মান নয় এমন প্রাক-প্রসেসর নির্দেশিকা You আপনি আমদানিগুলিও ছাড়তে পারেন (এ অন্তত -std=c++98এবং এর সাথে -w, যা বাইট হিসাবে গণনা করা হয় না) এবং ভেরিয়েবল প্রকারগুলি। সুতরাং, আপনি থাকতেন p(x){d);while(x>0)d=rand()%x;}এবং -Dd='printf("%i,",x'

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

3

> <>, 92 + 2 বাইট

:nao:0=?;0_1>:{:}(?\\
}(?!\$2*1>x~\$+1$*2/\~00:{{:@}
8+1.\~:{:}\+>$1+f
~~@~~47*0.\(a2*1@@?!.

-ভি পতাকা জন্য + 2 বি

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

> <> 'র্যান্ডমনেসের একমাত্র উত্স' এক্স 'নির্দেশনা থেকে আসে, যা নির্দেশ পয়েন্টারের দিকটি এলোমেলো মান হিসাবে সেট করে। যেমন, 0 থেকে n থেকে এলোমেলো সংখ্যা উত্পন্ন করা তুচ্ছ নয়।

আমি প্রথমে গণনা করি [0, n) এর মধ্যে একটি সংখ্যার প্রতিনিধিত্ব করার জন্য কতগুলি বিট প্রয়োজন, তারপরে একটি এলোমেলো সংখ্যা তৈরি করতে এলোমেলো বিট উত্পন্ন করুন। এটি সম্ভাবনা ছেড়ে দেয় যে এটি এন এর চেয়ে কিছুটা বড় একটি সংখ্যা তৈরি করবে, সেক্ষেত্রে আমরা কেবল এটিকে বাতিল করে দিয়ে আবার চেষ্টা করব।

ব্যাখ্যা:

:nao                              Print the current number followed by a newline
    :0=?;                         If the current n is 0, terminate

Calculate how many random bits we need to be generating:
         0 1                      Initialise the variables for this loop: 
                                      numberOfBits = 0, maxValue = 1
             :{:}(?\              If maxValue >= n, break out of the loop
                 *2               maxValue *= 2
             $+1$                 numberOfBits += 1

Generate the random number:
                     ~            Delete maxValue
                      00          Initialise randomNumber = 0, i = 0
}(?!\                   :{{:@}    If i >= numberOfBits, break out of the (inner) loop
     $2*                          randomNumber *= 2
          _
        1>x~\                     The random bit: If the IP goes up or 
          \+>                     left, it'll be redirected back onto the 'x', 
                                  if it goes down, it adds one to randomNumber
                                  If it goes right, it does nothing to randomNumber

             $1+                  increment i
8+1.            f                 Jump back to the start of the inner loop

After we've generated our number, check that it's actually below n
     ~                            Delete i
      :{:} (      ?               Test that the number is less than n
            a2*1    .             If it's not, jump back to the start 
                                  of the number generation section
  @~~                             Otherwise delete the old value of n, and numberOfBits
     47*0.                        Then jump back to the start of the program

খুব সুন্দর! আমি স্বাধীনভাবে একই ধারণা নিয়ে এসেছি; হোয়াইটস্পেস ছাড়াই, আমার সমাধানটি আপনার চেয়ে বেশ কয়েকটি অক্ষর ব্যবহার করে তবে আপনি কোডের আরও অনেক কমপ্যাক্ট ব্লক তৈরি করতে সক্ষম হয়েছেন।
থিওফিল

2
বর্তমান মেটা conক্যমত্য হ'ল ফ্ল্যাগগুলিতে আপনাকে ব্যবহৃত বাইটগুলি গণনা করতে হবে না
জো কিং

3

ম্যাটল্যাব ( ৪৯ 46 বাইট)

@(k)eval('while k;disp(k);k=randi(k)-1;end;0')

নমুনা আউটপুট:

>> @(k)eval('while k;disp(k);k=randi(k)-1;end;0')
ans(5)

ans = 

    @(k)eval('while k;disp(k);k=randi(k)-1;end;0')

     5    
     3    
     2    
     1   

ans =    
     0

1
আমি মনে করি আপনি k=randi(k)-1কয়েক বাইট কম জন্য করতে পারেন ।
সান্চাইসেস

2

রেটিনা , 21 বাইট

.+
*
L$`.
$.`
+¶<)G?`

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

+

মান পরিবর্তন হওয়া বন্ধ হওয়া পর্যন্ত পুনরাবৃত্তি করুন (যেমন 0)।

¶<)

লুপের মাধ্যমে প্রতিটি পাসের আগে মানটি মুদ্রণ করুন।

.+
*

অ্যানারিতে রূপান্তর করুন।

L$`.
$.`

সীমা তৈরি করুন এবং দশমিক রূপান্তর করুন।

G?`

একটি এলোমেলো উপাদান চয়ন করুন।


2

পাইথ , 6 7 বাইট

QWQ=OQQ

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

প্রাথমিক ইনপুট মানটি প্রিন্ট করতে +1।

প্রশ্নটি সত্য হলেও, Q কে 0 এবং Q এর মধ্যে এলোমেলো পূর্ণসংখ্যা হিসাবে সেট করুন এবং Q মুদ্রণ করুন set

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


2
আমি ক্রমহ্রাসমান হ্রাস ব্যবহার করে টাই করতে পেরেছি তবে এটি একটি প্রক্রিয়াগত প্রোগ্রাম হিসাবে রেখেছি। গল্ফে কাজ করার অনুপ্রেরণার জন্য ধন্যবাদ :)
FryAmTheEggman

চমৎকার. এটি কীভাবে (কেন) কাজ করে তা বের করার চেষ্টা করছে।
এলপেড্রো

ডিফল্টরূপে, উভয় =এবং ~ভেরিয়েবল হিসাবে একটি এক্সপ্রেশনের প্রথম ভেরিয়েবল ব্যবহার করুন যা নির্দিষ্ট করা না থাকলে নির্ধারিত হবে। উদাহরণস্বরূপ 10 ফেরার সময় 11 এ ~hTসেট Tকরা হবে কেবলমাত্র অন্য অভিনব কৌতুকটি হ'ল নিউলাইন চরিত্রটি তার ইনপুটটি মুদ্রণ করে এবং সেই মানটি অবিস্মরণিত করে দেয়, যাতে আমাদের খালি লুপের বডি থাকতে পারে have অন্য কিছু বিভ্রান্তিকর হলে আমাকে জানতে দিন :)
FryAmTheEggman

1
@ ফ্রিআম দ্য এজম্যান এটি সুন্দর।
isaacg

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


2

আইবিএম / লোটাস নোটস সূত্র, 48 বাইট

o:=i;@While(i>0;i:=@Integer(i*@Random);o:=o:i);o

ক্ষেত্রের সূত্র যা অন্য ক্ষেত্র থেকে ইনপুট নেয় i

সূত্রের জন্য কোনও টিআইও নেই তাই এখানে একটি নমুনা আউটপুটটির স্ক্রিনশট রয়েছে:

এখানে চিত্র বর্ণনা লিখুন


2

পাওয়ারশেল, 36 32 বাইট

-4 বাইট ধন্যবাদ অ্যাডমবর্কবার্ককে

filter f{$_;if($_){Random $_|f}}

Testscript:

filter f{$_;if($_){Random $_|f}}

100 |f

আউটপুট:

100
61
20
8
6
3
0

2
Get-হয় উহ্য , তাই এটা আপনার জন্য অপসারণ করতে পারেন -4 বাইট অনলাইনে চেষ্টা করুন!
অ্যাডমবর্কবার্ক

2

পাওয়ারশেল , 35 বাইট

for($a="$args";$a;$a=Random $a){$a}

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

পুরো প্রোগ্রাম। ইনপুট নেয় $args, এটিকে সঞ্চয় করে $aএবং একটি forলুপে প্রবেশ করে । প্রতিটি পুনরাবৃত্তি আমরা $aএখনও ইতিবাচক কিনা তা পরীক্ষা করে 0দেখছি (পাওয়ারশেলের ক্ষেত্রে এটি মিথ্যা) তারপরে আমরা $aপাইপলাইনে রেখে পরবর্তী পুনরাবৃত্তিতে চলে যাই, যেখানে আমরা $aফলাফল হতে সেট করেছিলাম Get-Random $a, যা পরিসরে একটি পূর্ণসংখ্যা ফেরত দেয়0..($a-1)

(আব) এই সত্যটি ব্যবহার করে যে পাওয়ারশেল চূড়ান্ত শূন্য আউটপুট দেওয়ার পরিবর্তে (বর্তমানে লেখা হিসাবে বিধি দ্বারা অনুমোদিত) অতিরিক্ত ট্রেলিং নিউলাইন আউটপুট দেয় uses


"$args"- সুন্দর। আমি $args[0]এই ক্ষেত্রে আটকে ছিলাম
মজজি

2

লুয়া , 58 বাইট

p,r=print,...+0 p(r)while r>0 do r=math.random(0,r)p(r)end

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

আরও কিছু লুয়া প্রেমের জন্য এখানে :)


আরে, আপনি rঘোষণাপত্রে +0 মুছে ফেলতে পারেন এবং এটিকে rবিবৃতিতে স্থানান্তর করতে পারেন, এটি করে আপনি স্পেসের জন্য 1 টি কম বাইট ব্যবহার করবেন ( p,r=print,...p(r)while)।
ভিসমার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.