ম্যাটল্যাব, 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 সুযোগ থাকবে, 2
2/6 সুযোগ থাকবে এবং 3
3/6 সুযোগ থাকবে।
পার্শ্ব নোট হিসাবে, যেহেতু repelem
এখনও অক্টোবায় উপলভ্য নয়, আমি টিআইও লিঙ্ক দিতে পারি না give অতিরিক্ত হিসাবে অক্টোবাকে ব্যবহার করা যায় না কারণ এখানে একটি বড় চরিত্রের জরিমানা রয়েছে input()
এবং disp()
এটি একটি বেনাম ফাংশন হিসাবে ব্যবহার করা সম্ভব নয়। যদি অক্টাভা সমর্থন করে repelem
তবে নিম্নলিখিত ব্যবহার করা যেতে পারে:
@(n)a(randi(nnz(a=repelem(n,n))))
এটি 16 বাইট সংরক্ষণ করতে পারে, কিন্তু এটি করা হয়নি।