এলোমেলোভাবে একটি অ্যারে থেকে নির্বাচন করুন


19

এই চ্যালেঞ্জটি বরং সহজ:
আপনাকে ইতিবাচক (0 সহ নয়) একটি অ্যারে দেওয়া হবে এবং এই অ্যারে থেকে একটি এলোমেলো উপাদান নির্বাচন করতে হবে।

তবে এখানে মোড়টি:
কোনও উপাদান নির্বাচনের সম্ভাবনাটি পূর্ণসংখ্যার মানের উপর নির্ভরশীল, মানে পূর্ণসংখ্যার আকার বাড়ার সাথে সাথে এটি নির্বাচিত হওয়ার সম্ভাবনাও খুব বেশি!

উদাহরণ

আপনাকে অ্যারে দেওয়া হবে [4, 1, 5]

এই ক্ষেত্রে অ্যারের সমস্ত উপাদানের যোগফলকে 4 দ্বারা নির্বাচিত হওয়ার সম্ভাবনা 4 টির সমান 4 / ( 4 + 1 + 5 ) = 4 / 10 =40%
1 টি নির্বাচনের সম্ভাবনা হ'ল 1 / 10বা 10%

ইনপুট

ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে।

আউটপুট

কোনও পদ্ধতি ব্যবহার করা হলে নির্বাচিত পূর্ণসংখ্যাটি ফেরত দিন বা এটিকে সরাসরি মুদ্রণ করুন stdout

বিধি

  • এটি তাই কোনও ভাষার জয়ের বাইটে সংক্ষিপ্ততম কোড।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

উত্তর:


20

জেলি , 3 বাইট

x`X

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

দেখো মা, ইউনিকোড নেই!

ব্যাখ্যা:

x`X
 `  Make monad from dyad and use same left and right arguments
x   Repeat each element of the left argument (implicit) list its respective number of times in the right argument list
  X Random element

1
দয়া করে আপনার কোডটি কী ব্যাখ্যা করতে পারেন? :)
ইয়ান এইচ।

1
@IanH। এটি সত্যিই একটি সাধারণ অ্যালগরিদম প্রতিটি উপাদান নিজেই পুনরাবৃত্তি তারপর এলোমেলোভাবে চয়ন করুন।
এরিক আউটগল্ফার

16

আর , 25 বাইট

function(s)sample(s,1,,s)

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

ব্যাখ্যা:

function(s){
 sample(x = s, size = 1, replace = FALSE, prob = s)
}

ওজন সহ প্রতিস্থাপন ছাড়াই sআকারের একটি নমুনা নেয় ; এগুলি সম্ভাব্যতা হিসাবে পুনরুদ্ধার করা হয়।1s

বিতরণ যাচাই করতে, এই লিঙ্কটি ব্যবহার করুন


আপনি 9 মাস দ্বারা আমাকে এটি মারধর! : ডি
জেসি

@ জেসি হেহ, আপনার উপর আমার একমাত্র সুবিধা মনে হচ্ছে আপনি বেশ গল্ফার হওয়ায় "প্রথমে যাচ্ছেন"! :-)
জিউসেপ

13

পাইথ , 4 বাইট

OsmR

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

একটি অস্বাভাবিক পদ্ধতির সাহায্যে @ জাকুবকে ধন্যবাদ, একটি বাইট সংরক্ষণ করেছেন

পাইথ , 5 বাইট

Osm*]

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

কিভাবে?

# 1

OsmR - সম্পূর্ণ প্রোগ্রাম।

   আর - ডান মানচিত্র ...
  মি - ... মানচিত্র ব্যবহার করছি। এটি মূলত [[4,4,4,4], [1], [5,5,5,5,5]] তালিকা তৈরি করে।
       - ... ক্রেডিট এর জন্য জাকুবে যায়!
 s - সমতল।
ও - এর এলোমেলো উপাদান ^ স্পষ্টভাবে প্রদর্শন করুন।

# 2

ওসম *] - সম্পূর্ণ প্রোগ্রাম।

  মি - ইনপুট উপর মানচিত্র।
    ] - বর্তমান উপাদান, ডি, আবৃত; [ঘ]।
   * - বারবার বারবার।
 s - সমতল।
ও - র্যান্ডম এলিমেন্ট। সুস্পষ্টভাবে ফলাফল মুদ্রণ করুন।

1
আমি এটি 4 এ করতে পারি I আমি কি এটি লুণ্ঠন করব, না আপনি নিজে এটি খুঁজে পেতে চান?
জাকুব

2
@ জাকুব একটি সামান্য বিট অপেক্ষা করুন। আমি এটা করতে পারি কিনা তা দেখতে চান। এটা কি যে সুস্পষ্ট?
মিঃ এক্সকডার

1
@ জাকুব ঠিক আছে, আমি হাল ছেড়ে দিলে আমি পিং করব।
মিঃ এক্সকোডার

1
OsmLবাOsmR
জাকুব

1
@ জাকুব ওহ যে খুব চালাক! অন্তর্নিহিত যুক্তি d, তারপরে dএকটি পরিসীমা মানচিত্র ... প্রতিভা!
এরিক আউটগল্ফার

8

সিজেএম (9 বাইট)

q~_]ze~mR

অনলাইন ডেমো । এটি একটি সম্পূর্ণ প্রোগ্রাম যা স্টিডিনে সিজেম অ্যারে বিন্যাসে ইনপুট নেয় এবং নির্বাচিত উপাদানটি স্টাডআউটে প্রিন্ট করে।

ব্যবচ্ছেদ

q~   e# Read and parse input
_]z  e# Copy and transpose
e~   e# Run-length decode
mR   e# Select random element uniformly

1
এত সাধারণ কাজের জন্য একটি শক্তিশালী গল্ফ।
এরিক আউটগল্ফার

7

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

@ ব্র্যাড গিলবার্ট বি 2 গিলের জন্য 1 বাইট সংরক্ষণ করা হয়েছে।

{bag(@_ Zxx@_).pick}

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

এটিতে 1 তালিকার যুক্তি লাগে। আমরা xxঅপারেটরটি ব্যবহার করে এই তালিকার 2 টি অনুলিপি জিপ করি । সুতরাং @_ Zxx@_, আমরা একটি তালিকা পেতে যা উপাদান সময় xউপস্থাপন করা xহয়। এরপরে এটি জোর করা হয় Bag, এটি এমন একটি সংগ্রহ যা সামগ্রীতে কতবার প্রদর্শিত হয় তা সংরক্ষণ করে। অবশেষে, আমরা এই সংগ্রহ থেকে একটি এলোমেলো উপাদান বেছে নিই pick, যা অ্যাকাউন্টে গণনাগুলি গ্রহণ করে এবং সঠিক জিনিস does করে ™


এটি সংক্ষিপ্ত করা যায়{bag(@_ Z=>@_).pick}
ব্র্যাড গিলবার্ট বি

@ ব্র্যাডগিলবার্টব 2 গিলস, দুঃখের বিষয় এটি কার্যকর হয় না। এটি জোড়া থেকে একটি ব্যাগ তৈরি করে (সুতরাং একবার "1" হবে না, "2" দু'বার ইত্যাদি, তবে "1 => 1" একবার, "2 => 2" একবারও ইত্যাদি etc. আমি যা চাই তা নয়) । কারণ এডভেন্ট ক্যালেন্ডারে বর্ণিত, সুরকাররা বাধ্যতামূলক নয়
রামিলিজ

@ ব্র্যাডগিলবার্টবিলগিলস, তবে যাইহোক আপনাকে ধন্যবাদ, আপনি আমাকে এখানে কিছু জায়গা এবং অন্যান্য চ্যালেঞ্জগুলিতে গল্ফ করতে সহায়তা করেছিলেন!
Ramillies

আমি বোঝাতে চাইছি{bag(@_ Zxx@_).pick}
ব্র্যাড গিলবার্ট বিগগিলস

আঃ, দেখছি। কেন এটা আমার কাছে ঘটেনি ...: -) ধন্যবাদ।
রামিলিজ






4

জাভা (ওপেনজেডিকে 8) , 88 87 86 83 বাইট

a->{int r=0,x=-1;for(int i:a)r-=i;for(r*=Math.random();r<1;)r+=a[++x];return a[x];}

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


আপনি একটি ব্যাখ্যা যোগ করতে পারেন? আমি কেন for(r*=Math.random();;)প্রয়োজন তা বোঝার চেষ্টা করছি বা আপনার যা যা প্রয়োজন তা যদি হয় r*=Math.random()
আইয়ব

@ আইবি 4 বিটিটি for(;;)লুপ ব্যতীত সংকলকটি সন্তুষ্ট করার জন্য এটির পরে দ্বিতীয় (কখনও পৌঁছায় না) রিটার্ন বিবৃতি প্রয়োজন for(int i:a)...- যা 3 বাইট দীর্ঘ হবে।
নেভায়ে

আহ, অবশ্যই আপনার for(int i:a)মত foreachসি # তে আছে। আমার একই সমস্যা ছিল, তবে কেবল forএমনটি ব্যবহার করেছি যা ক্রমাগত লুপ হয়। আপনার নতুন উত্তরটি আমাকে চক্রান্ত করে, আমি আপনার কিছু ধারণাগুলি চেষ্টা করে দেখতে পারি।
আইয়ব

3

জে, 8 7 8 বাইট

7 বাইটারটি অবৈধ; আমি যখন দু'দিনের মধ্যে আমার কম্পিউটারে ফিরে আসি তখন এটিকে পূর্ববর্তী সম্পাদনাতে ফিরিয়ে আনব।

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

?@+/{#~

:( একটি অ্যারের থেকে এলোমেলো উপাদান নির্বাচন করা ব্যয়বহুল।

8 বাইট

#~{~1?+/

9 বাইট

(1?+/){#~

ব্যাখ্যা

?@+/{#~
?        Choose random number in range
  +/     Sum of the array
    {    Select that element from
     #~  The elements duplicated as many times as their value

?@+/হয় (?@+)/; আমি আশঙ্কা করছি যে আপনি এটি আবার 8 পর্যন্ত
ফায়ারফ্লাই

@ ফায়ারফ্লাই আমার আরও পরীক্ষা করা উচিত, ভাল ধরা।
কোলে

3

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

a=>a.sort((a,b)=>b-a)[Math.random()**2*a.length|0]

আশা করি এটি কীভাবে কাজ করে তা স্পষ্ট, তবে আমি এখানে যাইহোক এটি ব্যাখ্যা করব। এটি অবতরণ ক্রমে পূর্ণসংখ্যার বাছাই করে, তারপরে একটি বিটা বিভ্রান্তির (1 / 2,1) সাথে এলোমেলোভাবে একটি বেছে নেয় ।


আমি মনে করি না এটির সঠিক বিতরণ হবে। আমার পরীক্ষাগুলি দেখায় যে এর সাহায্যে a=[4,1,5]আপনি প্রায় 18% 1, 24% 4এবং 58% পাবেন 5, যা প্রস্তাব দেয় যে আপনি 3 এর দৈর্ঘ্যের কোনও ইনপুট দিয়ে সেই বিতরণ পাবেন
জিউসেপ্পে

এটা আমার কাছে সঠিক বলে মনে হচ্ছে উচ্চতর পূর্ণসংখ্যা, উচ্চতর সম্ভাবনা।
kamoroso94

আচ্ছা বুঝলাম. আমি প্রশ্নটি ভুলভাবে পড়েছি। দুর্দান্ত সমাধান, +1!
জিউসেপে


2

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

($args[0]|%{,$_*$_})|Random

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

$args[0]আক্ষরিক অ্যারে হিসাবে ইনপুট নেয় । প্রতিটি উপাদান মাধ্যমে লুপ |%{...}এবং প্রতিটি পুনরাবৃত্তি উপাদানগুলির একটি নতুন অ্যারে ,$_তৈরি $_করে - উদাহরণস্বরূপ, এর জন্য 4একটি অ্যারে তৈরি করা হবে @(4,4,4,4)। সেই অ্যারে উপাদানগুলি তারপরে পাইপ করা হয় Get-Randomযা সমুদ্র সম্ভাব্যতা সহ একটি উপাদানকে ছুঁড়ে ফেলবে se যেহেতু, উদাহরণস্বরূপ, @(4,1,5)এটি আমাদের @(4,4,4,4,1,5,5,5,5,5)সম্ভাব্যতার প্রয়োজনীয়তাগুলি পূরণ করে।


2

সি # (.নেট কোর) , 93 89 87 76 + 18 = 94 বাইট

a=>{int i=-1,r=new Random().Next(a.Sum());while(r>=0)r-=a[++i];return a[i];}

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

অতিরিক্ত 18 বাইটের জন্য using System.Linq;

প্রাপ্তি স্বীকার

11 বাইট নেভাকে ধন্যবাদ বাঁচিয়েছে, যার এলোমেলো সংখ্যা বাস্তবায়ন অনেক বেশি সংক্ষিপ্ত ছিল (পাশাপাশি একটি এর intপরিবর্তে একটি হওয়া double)।

Degolfed

a=>{
    int i=-1,
    r=new Random().Next(a.Sum());
    while(r>=0)
        r-=a[++i];
    return a[i];
}

ব্যাখ্যা

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


94 বাইট:a=>{int i=-1,r=new Random().Next(a.Sum());for(;r>=0;)r-=a[++i];return a[i];}
নেভে

2

জাপট , 7 বাইট

ËÆD
c ö

এটি এখানে পরীক্ষা করুন


ব্যাখ্যা

অ্যারের অন্তর্নিহিত ইনপুট U

Ë

অ্যারে উপরের মানচিত্রটি এমন একটি ক্রিয়াকলাপের মধ্য দিয়ে প্রতিটি উপাদানকে অতিক্রম করে যেখানে Dবর্তমান উপাদান রয়েছে।

ÆD

একটি দৈর্ঘ্যের অ্যারে তৈরি করুন Dএবং এটি পূরণ করুন D

c

চেপ্টা।

ö

একটি এলোমেলো উপাদান পান।



1

পার্ল, 31 বাইট

@a=map{($_)x$_}@ARGV;$a[rand@a]

এটি ইনপুটটিকে কমান্ড লাইন আর্গুমেন্ট হিসাবে ধরে নিয়েছে। মনে রাখবেন সংখ্যাগুলি বড় হলে এটি মেমরির বাইরে চলে যেতে পারে।




1

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

F⪪θ;FIι⊞υι‽υ

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

  θ             Input variable as string
 ⪪ ;            Split on semicolons
F               Loop i over each string
     Iι         Cast i to integer
    F           Repeat that many times
       ⊞υι      Push i to (originally empty) list
          ‽υ    Random selection from list
                Implicitly print


1

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

-7 বাইটস @ জাস্টিন মেরিনারকে ধন্যবাদ

a=>a.find(m=>(n-=m)<0,n=Math.random()*eval(a.join`+`))

উদাহরণ কোড স্নিপেট

f=
a=>a.find(m=>(n-=m)<0,n=Math.random()*eval(a.join`+`))
console.log(f([4,1,5]))


eval(a.join`+`)পরিবর্তে ব্যবহার করে যোগফল করতে পারেন reduce
জাস্টিন মেরিনার

আপনি যদি ES7 + এর সাথে ঠিক থাকেন তবে আপনি ব্যবহার করতে পারেন: [].find(m=>(n-=m)<0,n=Math.random()*eval(a.join+ ))এবং সাথে কল করতে পারেনinput::[].find(...)
ডাউনগোট

1

হাস্কেল , 78 77 বাইট

import System.Random
f l=randomRIO(0,sum l-1)>>=pure.((l>>= \n->n<$[1..n])!!)

এটি অনলাইন চেষ্টা করুন! ব্যবহারের উদাহরণ: f [1,99]সম্ভবত ফলন হবে 99

ব্যাখ্যা:

  • fপূর্ণসংখ্যার একটি তালিকা নেয় lএবং এলোমেলোভাবে নির্বাচিত পূর্ণসংখ্যা হিসাবে প্রদান করেIO Int
  • l>>= \n->n<$[1..n]প্রতিটি উপাদান nবারবার nবারের সাথে একটি তালিকা তৈরি করে ।
  • randomRIO(0,sum l-1) পুনরাবৃত্ত উপাদানগুলির তালিকার দৈর্ঘ্য থেকে শুরু করে দৈর্ঘ্য পর্যন্ত একটি পূর্ণসংখ্যার উত্পাদিত হয়, যা সীমাবদ্ধ ব্যতিক্রমের বাইরে এড়াতে মাইনাস এক, সমস্ত উপাদানগুলির সমষ্টি।

বোনাস: 85 বাইট পয়েন্ট-মুক্ত সংস্করণ

import System.Random
(>>=).randomRIO.(,)0.pred.sum<*>(pure.).(!!).(>>= \n->n<$[1..n])

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


1

বাশ , 51 বাইট

for n in $@;{ printf $n\\n%.s `seq $n`;}|shuf|sed q

এক আর্গুমেন্ট বা একাধিক যুক্তিতে স্থান-বিচ্ছিন্ন বা নিউলাইন-পৃথক ইনপুট নেয়।

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

আরও জটিল পরীক্ষার ক্ষেত্রে এলোমেলো ফ্রিকোয়েন্সি বৈধ করুন


1

জাভা 8, 127 122 121 বাইট

import java.util.*;a->{List l=new Stack();for(int i:a)for(int j=i;j-->0;Collections.shuffle(l))l.add(i);return l.get(0);}

-1 বাইট @ নেভায়ে ধন্যবাদ ।

@ এরিটআউটগলফারের জেলি উত্তর হিসাবে অনুরূপ পদ্ধতির ব্যবহার করে তালিকায় nআইটেমটি যোগ করে nএবং সেই তালিকা থেকে এলোমেলোভাবে একটি নির্বাচন করুন।

ব্যাখ্যা:

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

import java.util.*;        // Required import for List, Stack and Collections
a->{                       // Method with integer-array parameter and integer return-type
  List l=new Stack();      //  Create a List
  for(int i:a)             //  Loop (1) over the input array
    for(int j=i;j-->0;     //   Inner loop (2) from `i` down to 0
        Collections.shuffle(l))
                           //   and shuffle the List randomly after every iteration
      l.add(i);            //    Add `i` that many times to List `l`
                           //   End of inner loop (2) (implicit / single-line body)
                           //  End of loop (1) (implicit / single-line body)
  return l.get(0);         //  And then return the first item of the list
}                          // End of method

1
আপনি #shuffle1 বাইট সংরক্ষণ করার জন্য কলটি লুপটিতে সরাতে পারেন for(int j=i;j-->0;Collections.shuffle(l))l.add(i);
নেভায়ে

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


1

জিএনইউ এপিএল 1.2, 26 23 বাইট; 1.7 21 19 বাইট

এরিক আউটগলফার জেলি উত্তর দ্বারা অনুপ্রাণিত । ⎕IO1 এর পরিবর্তে 0 হওয়ার উপর নির্ভর করে যা GNU APL এর জন্য ডিফল্ট (এর জন্য +5 বাইটের জন্য সাজানো ⎕IO←0)।

-৩, -২ বাইট @ জাচারাকে ধন্যবাদ ý

ফাংশন ফর্ম

∇f R
S[?⍴S←∊0 0⍉R∘.⍴R]∇

নামবিহীন ল্যাম্বদা ফর্ম

{S[?⍴S←∊0 0⍉⍵∘.⍴⍵]}

ব্যাখ্যার জন্য, আমি ব্যবহার করবে যুক্তি ফাংশন প্রেরণ প্রতিনিধিত্ব করতে, কিন্তু এটা সমতূল্য Rমধ্যে ফর্ম।

⍵∘.⍴⍵পুনরায় আকার ( ) অপারেটরটি ব্যবহার করে তালিকার বাইরের পণ্যটি গণনা করে । কার্যকরভাবে, এটি একটি টেবিল তৈরি করে (একটি গুণ টেবিলের মতো) তবে গুণনের পরিবর্তে, এটি কলামে উপাদানটিকে সারিতে থাকা উপাদানের সমান বহুবার পুনরাবৃত্তি করে। প্রশ্নে দেওয়া উদাহরণের জন্য, এটি হ'ল:

4 4 4 4    1 1 1 1    5 5 5 5   
4          1          5         
4 4 4 4 4  1 1 1 1 1  5 5 5 5 5

0 0⍉⍵∘.⍴⍵ম্যাট্রিক্স স্থানান্তর করে এবং কেবল প্রধান তির্যকটি প্রদান করে। এটি আমাদের কেবলমাত্র সেই অংশগুলি দেয় যেখানে সারি এবং কলামটি ⍵∘.⍴⍵একই ছিল অর্থাৎ আমরা সংখ্যাকে তার মানটির সমান বহুবার পুনরাবৃত্তি করেছি। উদাহরণস্বরূপ, এটি হ'ল:

4 4 4 4  1  5 5 5 5 5

তার যুক্তি একটি তালিকায় পরিণত করে। ট্রান্সপোজ ( ) অপারেটরটি ব্যবহার করে আমরা একটি ভেক্টর পেয়েছি যেখানে 3 জন ভেক্টর রয়েছে। তালিকাভুক্ত করা ( ) এটিকে সমস্ত উপাদান যুক্ত একক ভেক্টরে পরিণত করে।

S←...এই নতুন ভেক্টরকে ভেক্টর নিয়োগ করে S⍴Sআমাদের সেই তালিকার দৈর্ঘ্য দেয়। ?এলোমেলো অপারেটর, সুতরাং ?⍴Sআমাদের 0 এবং তালিকার দৈর্ঘ্যের (একচেটিয়া) এর মধ্যে একটি এলোমেলো সংখ্যা দেয় (এ কারণেই এটি ⎕IO0 হওয়ার উপর নির্ভর করে ; অন্যথায় এটি 1 এবং দৈর্ঘ্যের মধ্যে অন্তর্ভুক্ত থাকে)। S[...]প্রদত্ত সূচকে উপাদানটি প্রদান করে।


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

বাহ, আমি <IO> <IO>⍉প্রধান তির্যক পেতে নতুন কখনও এমনকি একটি জিনিস ছিল না!
Zacharý

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

ওহ, জিএনইউর চেয়ে আরও ভাল একটি মুক্ত এপিএল উপস্থিত রয়েছে, এটিকে এনজিএন এপিএল বলা হয়। এটি আসলে বেশ দুর্দান্ত! ( ngn.github.io/apl/web , তবে এতে ট্রেডফ্যান নেই)
জাকারি

@ জ্যাচারý আমারও এটি আছে :) দুর্ভাগ্যক্রমে ট্রান্সপোজ ফাংশনটি কাজ করে না (বা আমি কিছু মিস করেছি)। আমি এখন এটি আবার পরীক্ষা করবো যে এটি কীভাবে কাজ করে তা সম্পর্কে আমার আরও ভাল ধারণা রয়েছে।
আর্ক 676

1

ম্যাটল্যাব, 30 বাইট

@(a)datasample(repelem(n,n),1)

এটি ম্যাটল্যাব আর ২০১৫ এ বা আরও নতুন এবং স্ট্যাটিস্টিক্স এবং মেশিন লার্নিং টুলবক্স ইনস্টল করে ধরেছে।

কীভাবে repelemব্যবহৃত হয় তার জন্য নীচের ব্যাখ্যা দেখুন । এই সংক্ষিপ্ততর এবং নীচের একটির মধ্যে পার্থক্যটি হ'ল এস অ্যান্ড এমএল টুলবক্সে এমন ফাংশন অন্তর্ভুক্ত রয়েছে datasampleযা এলোমেলোভাবে একটি অ্যারে থেকে এক বা একাধিক উপাদান নেওয়ার জন্য ব্যবহার করা যেতে পারে (অভিন্ন সম্ভাবনার সাথে) যা একটি বেনাম ফাংশনটি ব্যবহার করার অনুমতি দেয়, এড়িয়ে চলে যায় input/dispকল।

ম্যাটল্যাব, 49 বাইট

n=input('');a=repelem(n,n);disp(a(randi(nnz(a))))

এই কোডটি ধরে নিয়েছে যে repelemফাংশনটি চালু করার সময় MATLAB R2015a বা আরও নতুন ব্যবহার করা হয়েছিল।repelemএকটি ফাংশন যা দুটি পরামিতি নেয়, প্রথমটি হ'ল সংখ্যার অ্যারেটি প্রতিলিপি করা হয়, এবং দ্বিতীয়টি সংশ্লিষ্ট উপাদানটির কতবার প্রতিলিপি করা উচিত তার একটি অ্যারে হয়। মূলত ফাংশনটি সংখ্যা এবং রান-দৈর্ঘ্য সরবরাহ করে রান-লেংথ ডিকোডিং সম্পাদন করে।

উভয় ইনপুটগুলিতে একই ইনপুট সরবরাহ করে repelemআমরা একটি অ্যারের সাথে শেষ করি যা যদি এন এর এলিমেন্ট এন এর আরও কয়েকগুণ বেশি থাকে তবে তা বোঝা যায়। আপনি সরবরাহ করলে [1 2 3]আপনি পাবেন [1 2 2 3 3 3]। আপনি সরবরাহ করলে [1 2 4 2]আপনি পাবেন [1 2 2 4 4 4 4 2 2]। এটি করার মাধ্যমে এর অর্থ হ'ল আমরা যদি অভিন্ন সম্ভাব্যতা সহ একটি উপাদান নির্বাচন করি (ইউনিফর্ম সম্ভাব্যতার সাথে randi(m)1 থেকে মি পর্যন্ত একটি এলোমেলো পূর্ণসংখ্যা প্রদান করি), প্রতিটি উপাদান n এর নির্বাচিত হওয়ার চেয়ে n গুণ বেশি সম্ভাবনা থাকে। এর প্রথম উদাহরণে [1 2 3], 1একটি 1/6 সুযোগ থাকবে, 22/6 সুযোগ থাকবে এবং 33/6 সুযোগ থাকবে।


পার্শ্ব নোট হিসাবে, যেহেতু repelemএখনও অক্টোবায় উপলভ্য নয়, আমি টিআইও লিঙ্ক দিতে পারি না give অতিরিক্ত হিসাবে অক্টোবাকে ব্যবহার করা যায় না কারণ এখানে একটি বড় চরিত্রের জরিমানা রয়েছে input()এবং disp()এটি একটি বেনাম ফাংশন হিসাবে ব্যবহার করা সম্ভব নয়। যদি অক্টাভা সমর্থন করে repelemতবে নিম্নলিখিত ব্যবহার করা যেতে পারে:

@(n)a(randi(nnz(a=repelem(n,n))))

এটি 16 বাইট সংরক্ষণ করতে পারে, কিন্তু এটি করা হয়নি।


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