একটি নির্দিষ্ট পরিসরে জাভাস্ক্রিপ্টে এলোমেলো পুরো সংখ্যা তৈরি করছেন?


1954

আমি কীভাবে জাভাস্ক্রিপ্টে দুটি নির্দিষ্ট ভেরিয়েবলের মধ্যে এলোমেলো পুরো সংখ্যা তৈরি করতে পারি, যেমন x = 4এবং এর মধ্যে y = 8কোনও আউটপুট দিতে পারে 4, 5, 6, 7, 8?


1
এখানে একটি দরকারী গিস্টটি রয়েছে
ড্যান কে কে

9
পার্শ্ব নোট হিসাবে: যারা এনপিএম ব্যবহার করে এবং একটি দ্রুত, নির্ভরযোগ্য এবং প্রস্তুত সমাধানের সন্ধান করছেন সেখানে লড্যাশ.রেন্ডম রয়েছে যা খুব সহজেই একটি দুর্দান্ত ছোট পদচিহ্নের সাথে প্রয়োজনীয় হতে পারে (এটি কেবল পদ্ধতিটি নিজেই আমদানি করবে এবং পুরো লোড্যাশ নয়)।
নোবিটা

যদি এটি ক্রিপ্টো সুরক্ষিত বিকাশকারী
খুশি

উত্তর:


3830

মজিলা বিকাশকারী নেটওয়ার্ক পৃষ্ঠায় কয়েকটি উদাহরণ রয়েছে :

/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}

/**
 * Returns a random integer between min (inclusive) and max (inclusive).
 * The value is no lower than min (or the next integer greater than min
 * if min isn't an integer) and no greater than max (or the next integer
 * lower than max if max isn't an integer).
 * Using Math.round() will give you a non-uniform distribution!
 */
function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

এর পিছনে যুক্তি এখানে। এটি তিনটির একটি সহজ নিয়ম:

Math.random()একটি ফেরৎ Numberমধ্যে 0 (সমেত) এবং 1 (একচেটিয়া)। সুতরাং আমাদের এই মত একটি বিরতি আছে:

[0 .................................... 1)

এখন, আমরা min(অন্তর্ভুক্ত) এবং max(একচেটিয়া) মধ্যে একটি সংখ্যা চাই :

[0 .................................... 1)
[min .................................. max)

Math.random[মিনিট, সর্বাধিক) ব্যবধানে সংবাদদাতা পেতে আমরা এটি ব্যবহার করতে পারি । তবে, প্রথমে আমাদের minদ্বিতীয় বিরতি থেকে বিয়োগ করে কিছুটা সমস্যা তৈরি করা উচিত :

[0 .................................... 1)
[min - min ............................ max - min)

এটি দেয়:

[0 .................................... 1)
[0 .................................... max - min)

আমরা এখন আবেদন করতে পারি Math.randomএবং তারপরে সংবাদদাতাকে গণনা করতে পারি। আসুন একটি এলোমেলো সংখ্যা নির্বাচন করুন:

                Math.random()
                    |
[0 .................................... 1)
[0 .................................... max - min)
                    |
                    x (what we need)

সুতরাং, সন্ধানের জন্য x, আমরা এটি করব:

x = Math.random() * (max - min);

minফিরে যুক্ত করতে ভুলবেন না , যাতে আমরা [মিনিট, সর্বাধিক) ব্যবধানে একটি নম্বর পাই:

x = Math.random() * (max - min) + min;

এটি এমডিএন থেকে প্রথম কাজ ছিল। দ্বিতীয়টি , উভয় সমেত minএবং এর মধ্যে একটি পূর্ণসংখ্যা প্রদান করে max

এখন পূর্ণসংখ্যা পাওয়ার জন্য আপনি ব্যবহার করতে পারেন round, ceilবা floor

আপনি ব্যবহার করতে পারেন Math.round(Math.random() * (max - min)) + min, এটি তবে অ-সম-বিতরণ দেয়। উভয়ই, minএবং maxকেবল রোল করার প্রায় অর্ধেক সুযোগ রয়েছে:

min...min+0.5...min+1...min+1.5   ...    max-0.5....max
└───┬───┘└────────┬───────┘└───── ... ─────┘└───┬──┘    Math.round()
   min          min+1                          max

maxঅন্তর থেকে বাদ দিয়ে , এটির তুলনায় আরও কম সুযোগ রয়েছে min

আপনার সাথে Math.floor(Math.random() * (max - min +1)) + minপুরোপুরি এমনকি বিতরণও রয়েছে।

min.... min+1... min+2 ... max-1... max.... max+1 (is excluded from interval)
|        |        |         |        |        |
└───┬───┘└───┬───┘└─── ... ┘└───┬───┘└───┬───┘    Math.floor()
   min     min+1               max-1    max

আপনি ব্যবহার করতে পারেন না ceil()এবং -1যার মধ্যে সমীকরণের কারণ maxএখন রোল করার জন্য একটি সামান্য কম সুযোগ ছিল, কিন্তু আপনি (অবাঞ্ছিত) রোল করতে min-1খুব স্থাপিত।


10
এটি কেবল এটি করছে কারণ এটি কল করছে floor, যা গোল হয়।
জোশ স্টোডোলা

4
@ thezachPress31 আপনি ব্যবহার করতে পারেন round, তবে উভয়ই, minএবং maxঅন্যান্য সংখ্যার মতোই রোল করার অর্ধেক সুযোগ ছিল। আপনি একটি সাবস্ট্রাক্ট এবং নিতে পারে ceil। তবে ইন্টারভালের maxকারণে ন্যূনতম কম সুযোগ নিয়ে এই সংখ্যাটি ছেড়ে যায় [0,1)
ক্রিস্টোফ

12
যদি কেউ এই পদ্ধতির বিতরণ পরীক্ষা করতে চান তবে আমি একটি জেএসফিডেল তৈরি করেছি: jsfiddle.net/F9UTG/1
এহরিন

8
@ জ্যাকফ্রস্ট হ্যাঁ, এটা ঠিক। আপনি বোবা নন, আপনি কেবল শিখছেন :)
আয়নু জি স্টান

3
এই প্রশ্নটি পুরানো, তবে এই উত্তরটি বুঝতে আমার অনেক বেশি সময় লেগেছে ওও, আমি মনে করি পরবর্তী জাভাস্ক্রিপ্ট সংস্করণে গণিতের রেন্ডম প্রসারিত করা এক ধরণের উপকারী হবে
জোনাথন অরতেগা

527
var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;

19
আমি জানি এটি একটি পুরানো উত্তর, তবে ব্যবহার (Math.random() * (maximum - minimum + 1) ) << 0করা আরও দ্রুত।
ইসমাইল মিগুয়েল

11
@IsmaelMiguel বাইনারি অপারেটর ব্যবহার করে ( x << 0, x | 0, ~~x) এর পরিবর্তে Math.floor()ধর্মান্তরিত xতুলনায় অনেক ছোট পরিসর দুই সম্পূরক মধ্যে Number.MAX_SAFE_INTEGER(2³²⁻¹ বনাম 2⁵³), এইভাবে আপনি সতর্কতার সাথে এটি ব্যবহার করতে হবে!
le_m

@ ইসমাইল মিগুয়েল ইয়ো আমি আপনার পদ্ধতিটি এখনই কনসোলে চেষ্টা করেছি এবং এলোমেলোভাবে একটি নেতিবাচক মান পেয়েছি! ম্যাথআর্যান্ডরেঞ্জ = (সর্বনিম্ন, সর্বাধিক) => (ম্যাথআর্যান্ডম () * (সর্বাধিক - সর্বনিম্ন + 1)) << 0 ম্যাথ.র্যান্ডরেঞ্জ (2,657348096152) -1407373159
নীলজয়কে

@ ব্লুজায়াকে কারণ 657348096152 (1001100100001100111111111111000010011000 বাইনারি) এর 40 টি বিট রয়েছে, বিটওয়াইজ গাণিতিক 32 টি বিট ব্যবহার করে। আপনি যদি 657348096152|0218099864 (বাইনারি 1100111111111111000010011000) পান তবে।
ইসমাইল মিগুয়েল

1
এটি একটি স্মার্ট উত্তর। অভ্যন্তরীণভাবে পরিসীমা তৈরি করা [মিনিট, সর্বাধিক + 1) আসলে [মিনিট, সর্বোচ্চ] উভয়ই অন্তর্ভুক্ত হওয়ার কাঙ্ক্ষিত ফলাফল অর্জন করে। ধন্যবাদ! :)
ম্লাদেন বি

134

Math.random ()

সর্বনিম্ন ( অন্তর্ভুক্ত ) এবং সর্বাধিক ( অন্তর্ভুক্ত ) এর মধ্যে একটি পূর্ণসংখ্যার এলোমেলো নম্বর প্রদান করে :

function randomInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

অথবা সর্বনিম্ন অন্তর্ভুক্ত ( অন্তর্ভুক্ত ) এবং সর্বোচ্চ ( অন্তর্ভুক্ত নয় ) এর মধ্যে যে কোনও এলোমেলো সংখ্যা :

function randomNumber(min, max) {
  return Math.random() * (max - min) + min;
}

দরকারী উদাহরণ (পূর্ণসংখ্যা):

// 0 -> 10
Math.floor(Math.random() * 11);

// 1 -> 10
Math.floor(Math.random() * 10) + 1;

// 5 -> 20
Math.floor(Math.random() * 16) + 5;

// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;

** এবং স্মরণ করিয়ে দেওয়া সর্বদা সুন্দর (মজিলা):

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


56
function getRandomizer(bottom, top) {
    return function() {
        return Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom;
    }
}

ব্যবহার:

var rollDie = getRandomizer( 1, 6 );

var results = ""
for ( var i = 0; i<1000; i++ ) {
    results += rollDie() + " ";    //make a string filled with 1000 random numbers in the range 1-6.
}

ভাঙ্গন:

আমরা একটি ফাংশন (ফাংশনাল প্রোগ্রামিং থেকে orrowণ নেওয়া) ফিরিয়ে দিচ্ছি যা যখন ডাকা হয় তখন মান bottomএবং সমেতের মধ্যে একটি এলোমেলো পূর্ণসংখ্যা ফিরে আসবে top। আমরা 'অন্তর্ভুক্তি' বলি কারণ আমরা ফিরে আসা যায় এমন সংখ্যার সীমাতে নীচ এবং উপরে উভয়কে অন্তর্ভুক্ত করতে চাই। এইভাবে, getRandomizer( 1, 6 )1, 2, 3, 4, 5 বা 6 এর মধ্যে ফিরে আসবে।

(নীচের অংশটি কম নম্বর, শীর্ষটি বৃহত্তর সংখ্যা)

Math.random() * ( 1 + top - bottom )

Math.random()0 এবং 1 এর মধ্যে একটি র্যান্ডম ডবল ফেরৎ, এবং আমরা সংখ্যাবৃদ্ধি এটা এক প্লাস মধ্যে পার্থক্য দ্বারা যদি topএবং bottomআমরা মধ্যে একটি ডবল কোথাও পাবেন 0এবং 1+b-a

Math.floor( Math.random() * ( 1 + top - bottom ) )

Math.floorসংখ্যাটি নিকটতম পূর্ণসংখ্যার দিকে গোল করে। সুতরাং আমাদের এখন 0এবং এর মধ্যে সমস্ত পূর্ণসংখ্যা রয়েছে top-bottom। 1 টি বিভ্রান্তিকর দেখাচ্ছে তবে এটি সেখানে থাকা দরকার কারণ আমরা সর্বদা গোল হয়ে থাকি, সুতরাং শীর্ষস্থানটি এটিকে ছাড়া কখনই পৌঁছানো যায় না। আমরা যে এলোমেলো দশমিক উত্পন্ন করি তার পরিসীমা থাকা 0দরকার (1+top-bottom)যাতে আমরা বৃত্তাকারটি পেতে পারি এবং এর সীমাটি 0পেতে পারিtop-bottom

Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom

পূর্ববর্তী উদাহরণে কোড সীমার মধ্যে আমাদের একটি পূর্ণসংখ্যা দিলেন 0এবং top-bottom, তাই সব আমরা এখন যা করতে হবে যোগ bottomযে ফলাফল সীমার মধ্যে একটি পূর্ণসংখ্যা পেতে bottomএবং topসমেত। : ডি


দ্রষ্টব্য: আপনি যদি অ-পূর্ণসংখ্যার মান বা বৃহত্তর সংখ্যায় প্রথম পাস করেন তবে আপনি অনাকাঙ্ক্ষিত আচরণ পাবেন, তবে কেউ যদি এটির আবেদন না করে আমি মূল প্রশ্নের উদ্দেশ্য থেকে দূরে হিসাবে তর্ক তদন্ত কোডটি প্রকাশ করতে যাচ্ছি না ।


1
আমি বুঝতে পারি এটি প্রায় 2½ বছর পরে, কিন্তু 1 এবং 6 এর ইনপুট দিয়ে আপনার ফাংশনটি 1,2,3,4 এবং 5 এর মান দেয়, তবে কখনই 6 নয়, যদি এটি "অন্তর্ভুক্ত" হত।
কিছু

9
@ কিছু, এটি আরও খারাপ হতে পারে, আমি 2½ বছর + 1 দিন পরে ^^
ajax333221

+1, আমি আপনার কোড পরীক্ষা করেছি, এটি একটি সঠিক মান তৈরি করে বলে মনে হচ্ছে। কোডে অনেক বার পুনরাবৃত্তি হতে পারে এমন স্থির পরিস্থিতিগুলি পরিচালনা করতে সৃজনশীল কাঠামো।
ক্রিস

এটির জন্য কোনও ফাংশনের মধ্যে আপনার কেন একটি ফাংশন রয়েছে?
আল্ফ.দেব

1
@ আল্ফ.ডেভ যুক্তি থেকে র্যান্ডম সংখ্যা জেনারেটর ব্যবহার করে এমন যুক্তিকে ডিকুয়াল করা যা কোনও র্যান্ডম সংখ্যার বিতরণটি ঠিক কীভাবে ব্যবহার করতে হবে তা স্থির করে। যখন কোডটি এলোমেলো নম্বর জেনারেটর ব্যবহার করে এটি এটিকে প্যারামিটার হিসাবে গ্রহণ করে (0 টি আর্গুমেন্ট ফাংশন যা সর্বদা একটি নতুন এলোমেলো নম্বর ফিরিয়ে দেয়) এটি যেকোন ধরণের র্যান্ডম নম্বর জেনারেটরের সাথে কাজ করতে পারে।
গর্ডন গুস্তাফসন

31
function randomRange(min, max) {
  return ~~(Math.random() * (max - min + 1)) + min
}

আপনি যদি ব্যবহার করতে পারেন অ্যান্ডস্কোর.জেএস ব্যবহার করছেন তবে বিকল্প

_.random(min, max)

1
ইনসকোর আসলে একটি _.uniqueId()ফাংশন সরবরাহ করে যা আপনি ক্লায়েন্টের সাইড মডেলগুলির জন্য কল করতে পারেন।
obfk

বাইনারি অপারেটর (ব্যবহার x << 0, x | 0, ~~x) এর পরিবর্তে Math.floor()ধর্মান্তরিত xতুলনায় অনেক ছোট পরিসর দুই সম্পূরক মধ্যে Number.MAX_SAFE_INTEGER(2³²⁻¹ বনাম 2⁵³), এইভাবে আপনি সতর্কতার সাথে এটি ব্যবহার করতে হবে!
le_m

30

1 এবং 10 এর মধ্যে একটি এলোমেলো নম্বর ফিরিয়ে দিন:

Math.floor((Math.random()*10) + 1); 

1 এবং 100 এর মধ্যে একটি এলোমেলো নম্বর ফিরিয়ে দিন:

Math.floor((Math.random()*100) + 1)

আপনার "মধ্যে" অন্তর্ভুক্তি বা একচেটিয়া? অর্থাত্ এটি কি [1,10], [1,10], (1,10], বা (1,10)?
ইভানড্রিক্স

1
এটি আংশিক অন্তর্ভুক্ত: [1, *)
ইভান জেড

ফাংশন শেষে + 1 এর কী দরকার? আমার ধারণা এটি পুরোপুরি কাজ করে।
শচি 13

18

আপনার যদি 0 এবং সর্বোচ্চের মধ্যে চলক প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন:

Math.floor(Math.random() *  max);

সর্বাধিক অন্তর্ভুক্ত বা একচেটিয়া>?
বৃক্ষ

2
ম্যাথ.ফ্লুর সর্বাধিক ব্যবহার করে ট্রি টি একচেটিয়া। আপনি যদি সর্বোচ্চকে অন্তর্ভুক্ত হতে চান তবে আপনি ম্যাথ.াউন্ড ব্যবহার করতে পারেন।
লুক

14

অন্যান্য উত্তর পুরোপুরি যুক্তিসঙ্গত পরামিতি হিসাব না 0এবং 1। এর পরিবর্তে আপনি ব্যবহার করা উচিত round পরিবর্তে এর ceilবা floor:

function randomNumber(minimum, maximum){
    return Math.round( Math.random() * (maximum - minimum) + minimum);
}

console.log(randomNumber(0,1));  # 0 1 1 0 1 0
console.log(randomNumber(5,6));  # 5 6 6 5 5 6
console.log(randomNumber(3,-1)); # 1 3 1 -1 -1 -1

1
আপনার উত্তরটি সত্য তবে আমার উদাহরণটি ভুল বলে আমি মনে করি .. console.log(randomNumber(5,6)); # 9 6 6 5 7 79 এবং 7 টি কি 5 এবং 6 এর মধ্যে আসে? ...... আপনার এটি সংশোধন করা উচিত বা ব্যাখ্যা করা উচিত ..
শচীন

12

জাভাস্ক্রিপ্টে এলোমেলো ক্লাসের এমএস ডটনেট বাস্তবায়ন-

var Random = (function () {
function Random(Seed) {
    if (!Seed) {
        Seed = this.milliseconds();
    }
    this.SeedArray = [];
    for (var i = 0; i < 56; i++)
        this.SeedArray.push(0);
    var num = (Seed == -2147483648) ? 2147483647 : Math.abs(Seed);
    var num2 = 161803398 - num;
    this.SeedArray[55] = num2;
    var num3 = 1;
    for (var i_1 = 1; i_1 < 55; i_1++) {
        var num4 = 21 * i_1 % 55;
        this.SeedArray[num4] = num3;
        num3 = num2 - num3;
        if (num3 < 0) {
            num3 += 2147483647;
        }
        num2 = this.SeedArray[num4];
    }
    for (var j = 1; j < 5; j++) {
        for (var k = 1; k < 56; k++) {
            this.SeedArray[k] -= this.SeedArray[1 + (k + 30) % 55];
            if (this.SeedArray[k] < 0) {
                this.SeedArray[k] += 2147483647;
            }
        }
    }
    this.inext = 0;
    this.inextp = 21;
    Seed = 1;
}
Random.prototype.milliseconds = function () {
    var str = new Date().valueOf().toString();
    return parseInt(str.substr(str.length - 6));
};
Random.prototype.InternalSample = function () {
    var num = this.inext;
    var num2 = this.inextp;
    if (++num >= 56) {
        num = 1;
    }
    if (++num2 >= 56) {
        num2 = 1;
    }
    var num3 = this.SeedArray[num] - this.SeedArray[num2];
    if (num3 == 2147483647) {
        num3--;
    }
    if (num3 < 0) {
        num3 += 2147483647;
    }
    this.SeedArray[num] = num3;
    this.inext = num;
    this.inextp = num2;
    return num3;
};
Random.prototype.Sample = function () {
    return this.InternalSample() * 4.6566128752457969E-10;
};
Random.prototype.GetSampleForLargeRange = function () {
    var num = this.InternalSample();
    var flag = this.InternalSample() % 2 == 0;
    if (flag) {
        num = -num;
    }
    var num2 = num;
    num2 += 2147483646.0;
    return num2 / 4294967293.0;
};
Random.prototype.Next = function (minValue, maxValue) {
    if (!minValue && !maxValue)
        return this.InternalSample();
    var num = maxValue - minValue;
    if (num <= 2147483647) {
        return parseInt((this.Sample() * num + minValue).toFixed(0));
    }
    return this.GetSampleForLargeRange() * num + minValue;
};
Random.prototype.NextDouble = function () {
    return this.Sample();
};
Random.prototype.NextBytes = function (buffer) {
    for (var i = 0; i < buffer.length; i++) {
        buffer[i] = this.InternalSample() % 256;
    }
};
return Random;
}());

ব্যবহার করুন:

        var r = new Random();
        var nextInt = r.Next(1, 100); //returns an integer between range
        var nextDbl = r.NextDouble(); //returns a random decimal

এমএস ডটনেট র‌্যান্ডম ক্লাসটি এমএস-আরএসএল লাইসেন্সের অধীনে রয়েছে , যার অর্থ এটি কপিরাইটযুক্ত। সুতরাং এই ডাইরিভেটেড কোডটি ব্যবহার করার সময় সতর্ক থাকুন, কারণ এটি কপিরাইট-লঙ্ঘনের ক্ষেত্রে ভিত্তি তৈরি করতে পারে cases
JohannesB


10

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

সুতরাং এই ধরণের লোকের জন্য, আমার পরামর্শটি এখানে:

ব্যবহার করে একটি এলোমেলো সংখ্যা তৈরি করুন Math.random()this (এটি বলুন n)

Now for [0,10) ==>  n*10 (i.e. one digit) and for[10,100) ==> n*100 (i.e. two digits) and so on. Here squire bracket indicates that boundary is inclusive and round bracket indicates boundary is exclusive.
Then remove the rest after the decimal point. (i.e. get floor) - using Math.floor(), this can be done.

যদি আপনি কীভাবে এলোমেলো নম্বর বাছাই করতে র্যান্ডম নম্বর টেবিলটি পড়তে জানেন তবে আপনি জানেন যে উপরের প্রক্রিয়াটি (1, 10, 100 এবং আরও অনেকগুলি দ্বারা গুণ করা) আমার শুরুতে উল্লিখিত একটিটিকে লঙ্ঘন করে না Because (কারণ এটি কেবলমাত্র পরিবর্তন করে দশমিক বিন্দুর স্থান।)

নিম্নলিখিত উদাহরণ অধ্যয়ন করুন এবং এটি আপনার প্রয়োজন বিকাশ।

আপনার যদি একটি নমুনা প্রয়োজন [0,9] তবে n * 10 এর তল আপনার উত্তর এবং যদি [0,99] প্রয়োজন হয় তবে এন * 100 এর তল আপনার উত্তর এবং তাই on

এখন আপনার ভূমিকা প্রবেশ করতে দিন:

আপনি নির্দিষ্ট ব্যাপ্তির মধ্যে নম্বর জিজ্ঞাসা করেছেন। (এক্ষেত্রে আপনি সেই পরিসরের মধ্যে পক্ষপাতদুষ্ট। - [১,6] থেকে একটি ডাই রোল লিখে একটি সংখ্যা নিলে আপনি পক্ষপাতদুষ্ট হন [১,6] তবে তবুও এটি এলোমেলোভাবে হয় এবং যদি কেবল মরা পক্ষপাতহীন হয় তবে ।)

সুতরাং আপনার পরিসীমা বিবেচনা করুন ==> [24 78, ২77] পরিসরের উপাদানগুলির সংখ্যা = 247 - 78 + 1 = 170; (যেহেতু উভয় সীমানা অন্তর্ভুক্ত)।

/*Mthod 1:*/
    var i = 78, j = 247, k = 170, a = [], b = [], c, d, e, f, l = 0;
    for(; i <= j; i++){ a.push(i); }
    while(l < 170){
        c = Math.random()*100; c = Math.floor(c);
        d = Math.random()*100; d = Math.floor(d);
        b.push(a[c]); e = c + d;
        if((b.length != k) && (e < k)){  b.push(a[e]); }
        l = b.length;
    }
    console.log('Method 1:');
    console.log(b);
/*Method 2:*/

    var a, b, c, d = [], l = 0;
    while(l < 170){
        a = Math.random()*100; a = Math.floor(a);
        b = Math.random()*100; b = Math.floor(b);
        c = a + b;
        if(c <= 247 || c >= 78){ d.push(c); }else{ d.push(a); }
        l = d.length;
    }
    console.log('Method 2:');
    console.log(d);

দ্রষ্টব্য: প্রথম এক পদ্ধতিতে, আমি প্রথমে একটি অ্যারে তৈরি করেছি যার মধ্যে আপনার প্রয়োজনীয় সংখ্যাগুলি রয়েছে এবং তারপরে এলোমেলোভাবে এগুলিকে অন্য অ্যারেতে রেখেছি। দ্বিতীয় পদ্ধতিতে, এলোমেলোভাবে সংখ্যা উত্পন্ন করুন এবং আপনার প্রয়োজনীয় পরিসরটিতে এটি পরীক্ষা করুন। তারপরে এটি একটি অ্যারেতে রাখুন। এখানে আমি দুটি এলোমেলো সংখ্যা উত্পন্ন করেছিলাম এবং তাদের মোট ব্যবহার করে ব্যর্থতার হার হ্রাস করে একটি কার্যকর নম্বর প্রাপ্তির মাধ্যমে প্রোগ্রামের গতি সর্বাধিক করতে। তবে উত্পন্ন সংখ্যা যুক্ত করা কিছুটা পক্ষপাতিত্বও দেবে। সুতরাং আমি একটি নির্দিষ্ট পরিসরের মধ্যে এলোমেলো সংখ্যা উত্পন্ন করার জন্য আমার প্রথম পদ্ধতির সুপারিশ করব।

উভয় পদ্ধতিতে, আপনার কনসোল ফলাফলটি প্রদর্শন করবে ((কনসোল খোলার জন্য Chrome এ f12 টিপুন)


3
"এলোমেলো" এর অর্থ অবশ্যই "সমানভাবে বিতরণ করা" নয়। "পক্ষপাতদুষ্ট" "নন-এলোমেলো" বোঝায় না। সম্ভাব্যতা বিতরণ থেকে এলোমেলো অর্থ।
সিজিজি

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

@ জেফওয়ালকারকোডেঞ্জার আমি মনে করি তার অর্থ হ'ল "স্বাভাবিক" অ্যালগরিদমের সাথে [অর্থাত্ Math.floor(Math.random() * (6 - 1 + 1) + 1)] 1 এবং 6 সংখ্যাটি অগত্যা 2, 3, 4 এবং 5 এর চেয়ে কম গুণিত হবে However তবে, পার্থক্যটি মূলত তুচ্ছ।
ওল্ডবয়

10

একটি ব্যাপ্তির সাথে এলোমেলো পূর্ণসংখ্যার জন্য চেষ্টা করুন:

function random(minimum, maximum) {
  var bool = true;

  while (bool) {
    var number = (Math.floor(Math.random() * maximum + 1) + minimum);
    if (number > 20) {
      bool = true;
    } else {
      bool = false;
    }
  }

  return number;
}

8
function getRandomInt(lower, upper)
{
    //to create an even sample distribution
    return Math.floor(lower + (Math.random() * (upper - lower + 1)));

    //to produce an uneven sample distribution
    //return Math.round(lower + (Math.random() * (upper - lower)));

    //to exclude the max value from the possible values
    //return Math.floor(lower + (Math.random() * (upper - lower)));
}

এই ফাংশনটি এবং এই ফাংশনের বিভিন্নতা পরীক্ষা করতে নীচের HTML / জাভাস্ক্রিপ্টটিকে একটি ফাইলে সংরক্ষণ করুন এবং একটি ব্রাউজার দিয়ে খুলুন with কোডটি দশ লক্ষ ফাংশন কল বিতরণ দেখিয়ে একটি গ্রাফ তৈরি করবে । কোডটি প্রান্তের কেসগুলিও রেকর্ড করবে, সুতরাং যদি ফাংশনটি সর্বাধিকের চেয়ে বেশি বা কমপক্ষে তার চেয়ে কম মান উৎপন্ন করে, আপনি.will.know.about.it।

<html>
    <head>
        <script type="text/javascript">
        function getRandomInt(lower, upper)
        {
            //to create an even sample distribution
            return Math.floor(lower + (Math.random() * (upper - lower + 1)));

            //to produce an uneven sample distribution
            //return Math.round(lower + (Math.random() * (upper - lower)));

            //to exclude the max value from the possible values
            //return Math.floor(lower + (Math.random() * (upper - lower)));
        }

        var min = -5;
        var max = 5;

        var array = new Array();

        for(var i = 0; i <= (max - min) + 2; i++) {
          array.push(0);
        }

        for(var i = 0; i < 1000000; i++) {
            var random = getRandomInt(min, max);
            array[random - min + 1]++;
        }

        var maxSample = 0;
        for(var i = 0; i < max - min; i++) {
            maxSample = Math.max(maxSample, array[i]);
        }

        //create a bar graph to show the sample distribution
        var maxHeight = 500;
        for(var i = 0; i <= (max - min) + 2; i++) {
            var sampleHeight = (array[i]/maxSample) * maxHeight;

            document.write('<span style="display:inline-block;color:'+(sampleHeight == 0 ? 'black' : 'white')+';background-color:black;height:'+sampleHeight+'px">&nbsp;[' + (i + min - 1) + ']:&nbsp;'+array[i]+'</span>&nbsp;&nbsp;');
        }
        document.write('<hr/>');
        </script>
    </head>
    <body>

    </body>
</html>

7

1 থেকে 6 এর মধ্যে একটি এলোমেলো নম্বর পেতে প্রথমে করুন:

    0.5 + (Math.random() * ((6 - 1) + 1))

এটি একটি এলোমেলো সংখ্যাটি 6 দ্বারা গুণ করে এবং তারপরে এটিতে 0.5 টি যোগ করে। এর পরে নম্বরটি ইতিবাচক পূর্ণসংখ্যায় করে:

    Math.round(0.5 + (Math.random() * ((6 - 1) + 1))

এই সংখ্যাটি নিকটতম পুরো সংখ্যায় গোল করে।

বা আরও বোধগম্য করতে এটি করুন:

    var value = 0.5 + (Math.random() * ((6 - 1) + 1))
    var roll = Math.round(value);
    return roll;

সাধারণত ভেরিয়েবল ব্যবহার করে এটি করার কোডটি হ'ল:

    var value = (Min - 0.5) + (Math.random() * ((Max - Min) + 1))
    var roll = Math.round(value);
    return roll;

সর্বনিম্ন মান থেকে 0.5 কেড়ে নেওয়ার কারণ হ'ল একমাত্র ন্যূনতম মান ব্যবহার করা আপনাকে এমন একটি পূর্ণসংখ্যা পেতে দেয় যা আপনার সর্বাধিক মানের চেয়ে আরও বেশি। ন্যূনতম মান থেকে ০.০ কেড়ে নিয়ে আপনি মূলত সর্বোচ্চ মানটিকে বৃত্তাকার থেকে আটকাচ্ছেন।

আশা করি এইটি কাজ করবে.


আপনি যদি 0 বাদ দিচ্ছেন তবে তা বিবেচনা করুন তবে 0 থেকে 0.5 পর্যন্ত "রাউন্ড ডাউন" রেঞ্জের দরকার নেই।
ILMostro_7

7

নিম্নলিখিত কোড ব্যবহার করে আপনি প্রদত্ত পরিসরে পুনরাবৃত্তি না করে এলোমেলো সংখ্যার অ্যারে তৈরি করতে পারবেন।

function genRandomNumber(how_many_number,min,max) {

            // parameters
            // how_many_number : how many numbers you want to generate. For example it is 5.
            // min(inclusive) : minimum/low value of a range. it must be any positive integer but less than max. i.e 4
            // max(inclusive) : maximun value of a range. it must be any positive integer. i.e 50
            // return type: array

            var random_number = [];
            for (var i = 0; i < how_many_number; i++) {
                var gen_num = parseInt((Math.random() * (max-min+1)) + min);
                do {
                    var is_exist = random_number.indexOf(gen_num);
                    if (is_exist >= 0) {
                        gen_num = parseInt((Math.random() * (max-min+1)) + min);
                    }
                    else {
                        random_number.push(gen_num);
                        is_exist = -2;
                    }
                }
                while (is_exist > -1);
            }
            document.getElementById('box').innerHTML = random_number;
        }

7

আমি জানি এই প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছে তবে আমার উত্তরটি কাউকে সহায়তা করতে পারে।

আমি ডাব্লু 3 স্কুলগুলিতে এই সহজ পদ্ধতিটি পেয়েছি:

Math.floor((Math.random() * max) + min);

আশা করি এটি কারও সাহায্য করবে।


1
ম্যাথ.ফ্লুর ((ম্যাথ.র্যান্ডম () * 1) + 0); সর্বদা 0
ম্যাডপপ্রোপগুলি 29:17

1
@ এমডপ্রপস কারণ সর্বাধিক সংখ্যা একচেটিয়া। 0 বা 1 পেতে, আপনার সর্বোচ্চ সংখ্যা হিসাবে 2 সেট করা উচিত।
নটক্র্যাকার

1
বা আপনি যে ফাংশনটিতে এই পদ্ধতিটি কল করছেন তার মধ্যে কেবলমাত্র 1 + যোগ করুন
পিট্রো কোয়েলহো

6

সর্বনিম্ন এবং সর্বোচ্চের মধ্যে এলোমেলো পুরো সংখ্যা:

function randomRange(l,h){
  var range = (h-l);
  var random = Math.floor(Math.random()*range);
  if (random === 0){random+=1;}
  return l+random;
}

সর্বাধিক মার্জিত সমাধান নয় .. তবে দ্রুত কিছু।


5

আমি এলোমেলো সংখ্যা উত্পন্ন করতে যা ব্যবহার করি তা এখানে।

function random(high,low) {
    high++;
    return Math.floor((Math.random())*(high-low))+low;
}

আমরা এক্সিকিউট করি high++কারণ Math.random()0, (সমেত) এবং 1 (একচেটিয়া) এর মধ্যে একটি এলোমেলো সংখ্যা তৈরি করে, যার অর্থ একটি বাদ পড়েছে, তার অর্থ কোনও গণিতের সম্পাদন করার আগে আমাদের অবশ্যই উচ্চ বৃদ্ধি করতে হবে। তারপরে আমরা উচ্চ থেকে নিম্ন বিয়োগ করি, আমাদের তৈরি করতে সর্বাধিক সংখ্যা প্রদান করি - নিম্ন, তারপরে + কম, উচ্চকে স্বাভাবিক অবস্থায় ফিরিয়ে আনা এবং সর্বনিম্ন সংখ্যাটি সর্বনিম্ন নিম্নে পরিণত করি। তারপরে আমরা ফলাফলটি ফিরে পাই

random(7,3) ফিরে আসতে পারে 3,4,5,6, or 7


2
যেমনটি highকেবল একবার ব্যবহৃত হয়, আপনি high-low+1পৃথক বর্ধিত বিবৃতি না দিয়ে ব্যবহার করতে পারেন । এছাড়াও, বেশিরভাগ ব্যবহারকারীরা lowপ্যারামিটারটি আগে আসবে বলে আশা করবে ।
ক্রিস ওয়ালশ

4
    <!DOCTYPE html>
<html>
    <head>
            <meta charset="utf-8" />
    </head>
    <body>
        <script>
            /*

                assuming that window.crypto.getRandomValues is available
                the real range would be fron 0 to 1,998 instead of 0 to 2,000
                See javascript documentation for explanation
                https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues
            */
            var array = new Uint8Array(2);
            window.crypto.getRandomValues(array);
            console.log(array[0] + array[1]);

        </script>
    </body>
</html>

Uint8Array 3 টি সংখ্যা পর্যন্ত একটি সংখ্যায় পূর্ণ অ্যারে তৈরি করুন যা সর্বোচ্চ 999 হবে be এই কোডটি খুব সংক্ষিপ্ত।


4

এখানে জাভাস্ক্রিপ্ট ফাংশনের একটি উদাহরণ যা ম্যাথ.র্যান্ডম () ব্যবহার না করে কোনও নির্দিষ্ট দৈর্ঘ্যের এলোমেলো সংখ্যা তৈরি করতে পারে :

    function genRandom(length)
    {
     const t1 = new Date().getMilliseconds();
     var min = "1",max = "9";
     var result;
     var numLength = length;
     if (numLength != 0)
     {
        for (var i = 1; i < numLength; i++)
        {
           min = min.toString() + "0";
           max = max.toString() + "9";
        }
     } 
     else
     {
        min = 0;
        max = 0;
        return; 
     }

      for (var i = min; i <= max; i++)
      {
           //Empty Loop
      }

      const t2 = new Date().getMilliseconds();
      console.log(t2);
      result = ((max - min)*t1)/t2;
      console.log(result);
      return result;
    }

t1 / t2 সর্বদা 1. এর খুব কাছাকাছি থাকে এবং তাই ফাংশনটি পুনরাবৃত্তভাবে বলা হয়ে থাকে তখন আপনার ফাংশন একই নম্বরটি ফেরত দেয় .. jsbin.com/xogufacera/edit?js,console
সুনীল বিএন

jsbin url চেক করুন .. আপনি নিজেই আউটপুটটি দেখতে পাবেন
সুনীল বিএন

দৈর্ঘ্য 4-10-এর মধ্যে থাকলে এটি দুর্দান্ত কাজ করে (যেমনটি আমি আমার মেশিনে পরীক্ষা করেছি), কারণ টি 1 এবং টি 2 এর ধ্রুবকের মান যথাযথ দূরত্ব হওয়া উচিত।
নিলেশ পাওয়ার

3

এটি একটি পরিসরে একটি এলোমেলো সংখ্যার প্রতি আমার গ্রহণ, যেমনটি আমি বেজায় বেজ থেকে বেঁধে একটি সীমার মধ্যে একটি র্যান্ডম নম্বর পেতে চেয়েছিলাম। উদাহরণস্বরূপ বেস = 10, সূচক = 2, 0 থেকে 100 পর্যন্ত আদর্শ, এবং আরও অনেকগুলি এলোমেলো সংখ্যা দেয়।

যদি এটি এটি ব্যবহার করতে সহায়তা করে তবে এটি এখানে:

// get random number within provided base + exponent
// by Goran Biljetina --> 2012

function isEmpty(value){
    return (typeof value === "undefined" || value === null);
}
var numSeq = new Array();
function add(num,seq){
    var toAdd = new Object();
     toAdd.num = num;
     toAdd.seq = seq;
     numSeq[numSeq.length] = toAdd;
}
function fillNumSeq (num,seq){
    var n;
    for(i=0;i<=seq;i++){
        n = Math.pow(num,i);
        add(n,i);
    }
}
function getRandNum(base,exp){
    if (isEmpty(base)){
        console.log("Specify value for base parameter");
    }
    if (isEmpty(exp)){
        console.log("Specify value for exponent parameter");
    }
    fillNumSeq(base,exp);
    var emax;
    var eseq;
    var nseed;
    var nspan;
    emax = (numSeq.length);
    eseq = Math.floor(Math.random()*emax)+1;
    nseed = numSeq[eseq].num;
    nspan = Math.floor((Math.random())*(Math.random()*nseed))+1;
    return Math.floor(Math.random()*nspan)+1;
}

console.log(getRandNum(10,20),numSeq);
//testing:
//getRandNum(-10,20);
//console.log(getRandNum(-10,20),numSeq);
//console.log(numSeq);

3

Math.random() অনেক উদ্দেশ্যে দ্রুত এবং উপযুক্ত, তবে আপনার যদি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত মানগুলি (এটি সুরক্ষিত নয়) প্রয়োজন হয় তবে এটি উপযুক্ত নয় বা যদি আপনার সম্পূর্ণ ইউনিফর্ম নিরপেক্ষ বিতরণ থেকে পূর্ণসংখ্যার প্রয়োজন হয় (অন্যের উত্তরগুলিতে ব্যবহৃত গুণগুলি কিছু নির্দিষ্ট ক্ষেত্রে আরও কিছু বার উত্পাদন করে অন্যদের তুলনায়).

যেমন ক্ষেত্রে, আমরা ব্যবহার করতে পারেন crypto.getRandomValues() পূর্ণসংখ্যার উত্পাদন করতে , এবং যে উত্পন্ন মানগুলি আমরা লক্ষ্য সীমার মধ্যে অভিন্ন মানচিত্র করতে পারি না তা প্রত্যাখ্যান করতে পারি। এটি ধীর হবে তবে আপনি যদি প্রচুর পরিমাণে মান উৎপন্ন না করেন তবে তা তাত্পর্যপূর্ণ হওয়া উচিত না।

পক্ষপাতদুষ্ট বিতরণের উদ্বেগকে স্পষ্ট করার জন্য, আমরা কেসটি বিবেচনা করি যেখানে আমরা 1 থেকে 5 এর মধ্যে একটি মান তৈরি করতে চাই তবে আমাদের কাছে একটি এলোমেলো সংখ্যা জেনারেটর রয়েছে যা 1 থেকে 16 এর মধ্যে মান তৈরি করে (একটি 4-বিট মান)। আমরা প্রতিটি আউটপুট মানকে একই সংখ্যক উত্পন্ন মানগুলি ম্যাপিং করতে চাই, তবে ১ 16 টি সমানভাবে ৫ দ্বারা বিভাজন করে না: এটি ১ এর অবশিষ্টাংশ ছেড়ে যায়, সুতরাং আমাদের সম্ভাব্য উত্পন্ন মানগুলির 1 টি প্রত্যাখ্যান করতে হবে, এবং কেবলমাত্র যখন আমরা পেয়ে যাব তখনই চালিয়ে যেতে হবে 15 টিরও কম কম মানগুলির মধ্যে একটি যা আমাদের লক্ষ্য সীমার মধ্যে সমানভাবে ম্যাপ করা যায়। আমাদের আচরণটি এই সিডোকোডের মতো দেখতে পারে:

Generate a 4-bit integer in the range 1-16.
If we generated  1,  6, or 11 then output 1.
If we generated  2,  7, or 12 then output 2.
If we generated  3,  8, or 13 then output 3.
If we generated  4,  9, or 14 then output 4.
If we generated  5, 10, or 15 then output 5.
If we generated 16 then reject it and try again.

নিম্নলিখিত কোডটি অনুরূপ যুক্তি ব্যবহার করে তবে পরিবর্তে একটি 32-বিট পূর্ণসংখ্যার উত্পাদন করে, কারণ এটি জাভাস্ক্রিপ্টের স্ট্যান্ডার্ড numberধরণের দ্বারা প্রতিনিধিত্ব করা যায় এমন বৃহত্তম সাধারণ পূর্ণসংখ্যার আকার । ( BigIntআপনার যদি আরও বৃহত্তর পরিসরের প্রয়োজন হয় তবে এটি ব্যবহারের জন্য এটি সংশোধন করা যেতে পারে the) নির্বাচিত পরিসরটি নির্বিশেষে, উত্পন্ন মানগুলির ভগ্নাংশ সর্বদা ০.৫ এর কম হবে, সুতরাং প্রত্যাশার প্রত্যাশিত সংখ্যা সর্বদা ১.০ এর কম হবে এবং সাধারণত 0.0 এর কাছাকাছি; চিরকাল এ জন্য আপনার মাথা ঘামানোর দরকার নেই।

const randomInteger = (min, max) => {
  const range = max - min;
  const maxGeneratedValue = 0xFFFFFFFF;
  const possibleResultValues = range + 1;
  const possibleGeneratedValues = maxGeneratedValue + 1;
  const remainder = possibleGeneratedValues % possibleResultValues;
  const maxUnbiased = maxGeneratedValue - remainder;

  if (!Number.isInteger(min) || !Number.isInteger(max) ||
       max > Number.MAX_SAFE_INTEGER || min < Number.MIN_SAFE_INTEGER) {
    throw new Error('Arguments must be safe integers.');
  } else if (range > maxGeneratedValue) {
    throw new Error(`Range of ${range} (from ${min} to ${max}) > ${maxGeneratedValue}.`);
  } else if (max < min) {
    throw new Error(`max (${max}) must be >= min (${min}).`);
  } else if (min === max) {
    return min;
  } 

  let generated;
  do {
    generated = crypto.getRandomValues(new Uint32Array(1))[0];
  } while (generated > maxUnbiased);

  return min + (generated % possibleResultValues);
};

console.log(randomInteger(-8, 8));          // -2
console.log(randomInteger(0, 0));           // 0
console.log(randomInteger(0, 0xFFFFFFFF));  // 944450079
console.log(randomInteger(-1, 0xFFFFFFFF));
// Error: Range of 4294967296 covering -1 to 4294967295 is > 4294967295.
console.log(new Array(12).fill().map(n => randomInteger(8, 12)));
// [11, 8, 8, 11, 10, 8, 8, 12, 12, 12, 9, 9]


3

রাগনে ক্রিপ্টো-শক্তিশালী র্যান্ডম পূর্ণসংখ্যার নম্বর পেতে [x, y] চেষ্টা করুন

let cr= (x,y)=>x+(y-x+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0

console.log(cr(4,8))


4
এই এক আকর্ষণীয়
আকিন হাওয়ান

1

আপনি এই কোড স্নিপেট করতে পারেন,

let randomNumber = function(first,second){
let number = Math.floor(Math.random()*Math.floor(second));
while(number<first){

    number = Math.floor(Math.random()*Math.floor(second));
}
return number;
}

1
এখানে একটি অপ্রয়োজনীয় সদৃশ লাইন রয়েছে। এর do - whileপরিবর্তে কেবল ব্যবহার করুনwhile
জাভি মারজান

1

আয়নু জি স্টান একটি দুর্দান্ত উত্তর লিখেছিলেন তবে তা বুঝতে আমার পক্ষে কিছুটা জটিল ছিল। সুতরাং, আমি https://teamtreehouse.com/commune/mathfloor-mathrandom-max-min-1-min-explanation এ একই ধারণার আরও সহজ ব্যাখ্যা পেয়েছি জেসন অ্যানেলোর দ্বারা ।

দ্রষ্টব্য: জেসনের ব্যাখ্যা পড়ার আগে আপনার জেনে রাখা উচিত কেবলমাত্র গুরুত্বপূর্ণ বিষয়টি হ'ল "কাটা কাটা" সংজ্ঞা। বর্ণনার সময় তিনি সেই শব্দটি ব্যবহার করেন Math.floor()। অক্সফোর্ড অভিধান "ট্র্যাঙ্কেট" সংজ্ঞায়িত করেছেন:

শীর্ষ বা প্রান্তটি কেটে ছোট করে (কিছু)।


0

এটি 20 ডিজিটের ইউনিক্যু এলোমেলো নম্বর পর্যন্ত উত্পাদন পরিচালনা করতে পারে

জাতীয়

var generatedNumbers = [];

function generateRandomNumber(precision) { // precision --> number precision in integer 
    if (precision <= 20) {
        var randomNum = Math.round(Math.random().toFixed(precision) * Math.pow(10, precision));
        if (generatedNumbers.indexOf(randomNum) > -1) {
            if (generatedNumbers.length == Math.pow(10, precision))
                return "Generated all values with this precision";
                return generateRandomNumber(precision);
        } else {
            generatedNumbers.push(randomNum);
            return randomNum;
        }
    } else
       return "Number Precision shoould not exceed 20";
}
generateRandomNumber(1);

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

JsFiddle


আমি এটিকে উত্সাহিত করছি ঠিক কারণেই।
টেলর অ্যাকলে

1
এই উত্তরটি প্রশ্নের উত্তর দেয় না।
রোমেনভ্যালেরি

0

/ * এমন একটি ফাংশন লিখুন randUpToযা একটি সংখ্যা গ্রহণ করে এবং 0 এবং সেই সংখ্যার মধ্যে একটি এলোমেলো পুরো সংখ্যাটি দেয়? * /

var randUpTo = function(num) {
    return Math.floor(Math.random() * (num - 1) + 0);
};

/ * এমন একটি ফাংশন লিখুন randBetweenযা একটি পরিসীমা প্রতিনিধিত্ব করে এমন দুটি সংখ্যা গ্রহণ করে এবং এই দুটি সংখ্যার মধ্যে একটি এলোমেলো পুরো সংখ্যা প্রদান করে। * /

var randBetween = function (min, max) {
    return Math.floor(Math.random() * (max - min - 1)) + min;
};

/ * এমন একটি ফাংশন লিখুন randFromTillযা একটি পরিসীমা প্রতিনিধিত্ব করে এমন দুটি সংখ্যা গ্রহণ করে এবং মিনিট (অন্তর্ভুক্ত) এবং সর্বোচ্চ (একচেটিয়া) এর মধ্যে একটি এলোমেলো সংখ্যা প্রদান করে। * /

var randFromTill = function (min, max) {
    return Math.random() * (max - min) + min;
};

/ * এমন একটি ফাংশন লিখুন randFromToযা একটি পরিসীমা প্রতিনিধিত্ব করে এমন দুটি সংখ্যা গ্রহণ করে এবং ন্যূনতম (অন্তর্ভুক্ত) এবং সর্বাধিক (অন্তর্ভুক্ত) এর মধ্যে একটি এলোমেলো পূর্ণসংখ্যা ফেরত দেয় * /

var randFromTo = function (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
};

1
সুন্দর, আপনি কি খেয়াল করতে পারেন যে র্যান্ডবেটউইন (এক্সক্লুসিভ) (একচেটিয়া)?
pfdint

0

আমি এই ফাংশনটি তৈরি করেছি যা নূন্যতম, সর্বাধিক, বাদ দেওয়া (বাদ দেওয়ার জন্য অন্তরের একটি তালিকা) এবং বীজ (যদি আপনি বীজযুক্ত এলোমেলো জেনারেটর চান) account

get_random_int = function(args={})
{
    let def_args =
    {
        min: 0,
        max: 1,
        exclude: false,
        seed: Math.random
    }

    args = Object.assign(def_args, args)

    let num = Math.floor(args.seed() * (args.max - args.min + 1) + args.min)

    if(args.exclude)
    {
        let diff = args.max - args.min
        let n = num

        for(let i=0; i<diff*2; i++)
        {
            if(args.exclude.includes(n))
            {
                if(n + 1 <= args.max)
                {
                    n += 1
                }

                else
                {
                    n = args.min
                }
            }

            else
            {
                num = n
                break
            }
        }
    }

    return num
}

এটি এর মতো ব্যবহার করা যেতে পারে:

let n = get_random_int
(
    {
        min: 0,
        max: some_list.length - 1,
        exclude: [3, 6, 5],
        seed: my_seed_function
    }
)

বা আরও সহজভাবে:

let n = get_random_int
(
    {
        min: 0,
        max: some_list.length - 1
    }
)

তারপরে আপনি এটি করতে পারেন:

let item = some_list[n]

সংক্ষিপ্তসার: https://gist.github.com/madplines/757deb000bdec25776d5036dae58ee6e


0
  • এলোমেলো (সর্বনিম্ন, সর্বোচ্চ) কমপক্ষে (অন্তর্ভুক্ত) এবং সর্বোচ্চ (একচেটিয়া) এর মধ্যে একটি এলোমেলো সংখ্যা তৈরি করে
  • ম্যাথ.ফ্লুর একটি সংখ্যাকে প্রায় নিকটতম পূর্ণসংখ্যার দিকে নিয়ে যায়

    function generateRandomInteger (min, max) { 
        return Math.floor(random(min,max)) 
    }`

সুতরাং 4 এবং 8 সমেতের মধ্যে একটি এলোমেলো পূর্ণসংখ্যার উত্পাদন করতে নিম্নলিখিত যুক্তি দিয়ে উপরের ফাংশনটি কল করুন:

generateRandomInteger (4,9)

0

0 এবং n এর মধ্যে এলোমেলো সংখ্যা তৈরি করার আমার পদ্ধতি, যেখানে এন <= 10 (এন বাদ)

Math.floor((Math.random() * 10) % n)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.