টাইম-বেসিস ব্যতীত এলোমেলো [বন্ধ]


9

কম্পিউটারগুলি কোথাও ভিত্তি ছাড়াই এলোমেলো সংখ্যা তৈরি করে না, সম্ভবত সম্ভবত সময়টি এলোমেলোতার সর্বজনীন ভিত্তি।

আমি চাই আপনি একটি কোড তৈরি করুন যা এই নিয়মগুলির সাথে এলোমেলো সংখ্যা তৈরি করে:

  • প্রোগ্রামের যে কোনও সময়ে সময়কে ভিত্তি হিসাবে অনুমোদিত হতে দেওয়া হয় না।
  • পূর্বনির্ধারিত এলোমেলো / সিউডো-র্যান্ডম ফাংশন অনুমোদিত নয়।
  • উত্পন্ন নম্বরগুলি যে কোনও সীমার মধ্যে থাকতে পারে। ভাল কমপক্ষে দুটি পৃথক পূর্ণসংখ্যা: ডি
  • সংখ্যা প্রতিধ্বনিত হয়।

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

2
একটি কোড-গল্ফ হওয়া উচিত ...
মুকুল কুমার

আমি জনপ্রিয়তা-প্রশ্ন হিসাবে এই প্রশ্নটি শুরু করেছি, কোড-গল্ফ এর জন্য আরও ভাল ফিট হবে কি?
দাদান

@ ড্যানিয়েল হ্যাঁ তবে এই প্রশ্নটি জনপ্রিয়তা-প্রশ্ন হতে দিন এবং কোড গল্ফের সাথে একটি নতুন প্রশ্ন পোস্ট করুন নতুন নিয়ম (এলোমেলো প্রজন্মের সাথে) যা মজা পাবে
মুকুল কুমার

1
বীজ হিসাবে ইন্টারনেট ব্যবহার করে প্রতারণার মতো মনে হচ্ছে তাই না?
ডিন ম্যাকগ্রিগোর

উত্তর:


6

জাভাস্ক্রিপ্ট

ঐটা মজা ছিল!

arr = []
index = 0

function init(seed) {
    index = 0
    arr[0] = seed
    for (var i = 1; i < 624; i ++) {
        arr[i] = (1812433253 * (arr[i-1] ^ (arr[i-1] >>> 30)) + i) | 0
    }
 }

function getNumber() {
    if (index == 0) generateNumbers()

    var y = arr[index]
    y ^= (y >>> 11)
    y ^= ((y << 7) & 2636928640)
    y ^= ((y << 15) & 4022730752)
    y ^= (y >>> 18)

    index = (index + 1) % 624
    return y
}

function generateNumbers() {
    for (var i = 0; i < 624; i ++) {
        var y = (arr[i] & 0x80000000) + (arr[(i+1) % 624] & 0x7fffffff)
        arr[i] = arr[(i + 397) % 624] ^ (y >>> 1)
        if (y % 2 != 0) arr[i] ^= 2567483615
    }
}

// let's get our seed now from the SE API
var x = new XMLHttpRequest()
x.open('GET', 'http://api.stackexchange.com/2.2/answers?pagesize=10&order=desc&sort=activity&site=stackoverflow&filter=!Sri2UzKb5mTfr.XgjE', false)
x.send(null)
// we've got the answer data, now just add up all the numbers.
// only 4 digits at a time to prevent too big of a number.
var seed = 0
var numbers = x.responseText.match(/\d{0,4}/g)
for (var i = 0; i < numbers.length; i++) seed += +numbers[i]

init(seed)
for (var i = 0; i < 10; i++) console.log(getNumber())

আমি জেএসে মের্সেন টুইস্টার লিখেছিলাম। তারপরে, আমি বুঝতে পারি আমাকে কোথাও থেকে একটি বীজ পেতে হবে।

সুতরাং, আমি স্থির করেছিলাম আমি এটি স্ট্যাক এক্সচেঞ্জ এপিআই থেকে পাব! (আমি localStorageএকটি কাউন্টার ব্যবহার করতে এবং বৃদ্ধি করতে পারি , তবে এটি কোনও মজাদার নয়)) সুতরাং, আমি সর্বাধিক সক্রিয় 10 টি উত্তর পেয়েছি এবং তারপরে আমি প্রতিক্রিয়াটিতে প্রতি 4 বা কম টানা অঙ্ক নিয়েছি এবং সেগুলি যুক্ত করেছি।

এই বীজগুলি সর্বদা পৃথক, যেহেতু স্ট্যাক ওভারফ্লো প্রতিনিয়ত আপডেট হয় (এবং আমার কোটা কমতে থাকে!) সংখ্যার মধ্যে উত্তর আইডি, প্রশ্ন আইডি, স্কোর, আপ / ডাউনভেন্ট গণনা, মালিকের প্রতিনিধি / আইডি এবং মোড়কের ডেটা (কোটা এবং এই জাতীয় )। এক দৌড়ে আমি পেয়েছিলাম 256845, তারপরে 270495, এবং তার পরে 256048, ইত্যাদি ...

এই কনসোলে 10 এলোমেলো 32-বিট দুই এর পরিপূরক সংখ্যাগুলি লগ করে। নমুনা আউটপুট:

247701962
-601555287
1363363842
-1184801866
1761791937
-163544156
2021774189
2140443959
1764173996
-1176627822

5

জাভা

import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;

/**
 *
 * @author Quincunx
 */
public class NoTimeRandom extends Random {

    private AtomicLong seed;

    public NoTimeRandom() {
        byte[] ba = (new String[0].toString() + new String[0].toString()
                + new String[0].toString() + new String[0].toString()
                + new String[0].toString() + new String[0].toString()).getBytes();
        int seed1 = 1;
        for (byte b : ba) {
            seed1 += b;
        }

        ba = (new String[0].toString() + new String[0].toString()
                + new String[0].toString() + new String[0].toString()
                + new String[0].toString() + new String[0].toString()).getBytes();
        long seed2 = 1;
        for (byte b : ba) {
            seed2 += b;
        }

        seed = new AtomicLong(seed1 ^ seed2);
    }

    @Override
    protected int next(int bits) {
        long oldseed, newseed;
        AtomicLong seed = this.seed;
        do {
            oldseed = seed.get();
            newseed = (oldseed * 25214903917L + 11) & 281474976710655L;
        } while (!seed.compareAndSet(oldseed, newseed));

        return (int) (newseed >>> (48 - bits));
    }

    public static void main(String[] args) {
        Random r = new NoTimeRandom();

        for (int i = 0; i < 5; i++) {
            System.out.println(r.nextInt());
        }
    }

}

যাদু আছে public NoTimeRandom()। স্ট্রিংগুলিতে কাস্ট করা অ্যারেগুলি নতুন প্রোগ্রামারগুলিকে বিভ্রান্ত করতে পারে, কারণ সংখ্যাটি এলোমেলো। নমুনা (জন্য char[]: [C@4a8e91eb)। nextপদ্ধতি থেকে অনুলিপি করা হয়েছে java.util.Random

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

134277366
467041052
-555611140
-1741034686
1420784423

আসুন এই rng এর কার্যকারিতা পরীক্ষা করুন:

ইন আমার উত্তর একটি ঘণ্টা কার্ভ আনুমানিক , ডাটা প্রজন্ম আমি ব্যবহৃত একটি ভালো RNG উপর নির্ভর করে। আরএনজি হিসাবে এটি দিয়ে এটি চালানো যাক। আউটপুট:

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

আমি যেমনটি ভেবেছিলাম. এটি একটি সুন্দর লম্পট আরএনজি।


5

সি

প্রস্থের পতাকাটি (বা আপনার সংকলক যেটি ব্যবহার করে) দিয়ে সংকলন করুন।

#include <stdio.h>
#include <pthread.h>

#define m (unsigned long)2147483647
#define q (unsigned long)127773
#define a (unsigned int)16807
#define r (unsigned int)2836 

static unsigned long seed;
pthread_t t[20];
int lo, hi, done;

void *pseudorandom(void *id)
{
    while(done)
    {
        int test;
        hi = seed/q;
        lo = seed%q;
        test = a * lo - r * hi;
        if (test > 0) seed = test;
        else seed = test + m;
    }
}

main()
{
     int i;
     seed = 54321;
     done = 1;

     for(i = 0; i < 20; i++) 
     {
          pthread_create(&(t[i]), NULL, &pseudorandom, NULL);
     }

     for (i = 0; i < 10; i++) 
     {
          printf("%lu\n", seed);
     }

     done = 0;
}

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

মোটামুটি ভালভাবে কাজ করার জন্য মনে হচ্ছে, এখানে একটানা কয়েকটা রান রয়েছে:

comintern ~ $ ./a.out
821551271
198866223
670412515
4292256
561301260
1256197345
959764614
874838892
1375885882
1788849800
comintern ~ $ ./a.out
2067099631
953349057
1736873858
267798474
941322622
564797842
157852857
1263164394
399068484
2077423336

সম্পাদনা: এটিকে আরও একটু চিন্তাভাবনা করেছেন এবং বুঝতে পেরেছেন যে এটি সময়ভিত্তিক নয়। এমনকি পুরোপুরি ডিটারমিনিস্টিক শিডিয়ুলার সহ, এনট্রপিটি সময় স্লাইস থেকে আসে না - এটি সিস্টেমে চলমান সমস্ত প্রক্রিয়া লোড করে আসে।

সম্পাদনা 2 @ কুইকুনস থেকে একটি বেল বক্ররেখা পোস্ট করার পরে কিছুটা অনুপ্রেরণা নেওয়ার পরে, আমি 12MB এলোমেলো একটি ফাইলের মধ্যে ফেলে দিলাম এবং এটি ক্যাসারেটে আপলোড করেছি । এটি সমস্ত ডেইহার্ড পরীক্ষায় ব্যর্থ হয়েছিল, তবে ইএনটি পরীক্ষায় 8 টির মধ্যে একটি শ্রদ্ধেয় 7.999573 এ আটকিয়েছে (কেবলমাত্র সম্ভাব্য প্রতিরোধক )। কৌতূহলজনকভাবে, থ্রেডের গণনা দ্বিগুণ করা এটি আরও খারাপ করেছে।


4

সি

এটি ব্যবহার করে https://stackoverflow.com/questions থেকে বীজ নিয়ে 0-255 পরিসরে একটি এলোমেলো সংখ্যা তৈরি করে wget

#include <stdio.h>
main()
{
    FILE *file;
    unsigned char c,x;
    system("wget -O - https://stackoverflow.com/questions > quest.html");
    file = fopen ("quest.html", "r");
    while(c=fgetc(file) != EOF) x+=c;
    fclose(file);
    printf("%d",x);
}

নমুনা রান:

C:\Users\izabera>random
--2014-03-02 16:15:28--  https://stackoverflow.com/questions
Resolving stackoverflow.com... 198.252.206.140
Connecting to stackoverflow.com|198.252.206.140|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 85775 (84K) [text/html]
Saving to: `STDOUT'

100%[======================================>] 85,775      40.3K/s   in 2.1s

2014-03-02 16:15:31 (40.3 KB/s) - `-' saved [85775/85775]

15 /* <=================== THIS IS THE RANDOM NUMBER */
C:\Users\izabera>random
--2014-03-02 16:15:36--  https://stackoverflow.com/questions
Resolving stackoverflow.com... 198.252.206.140
Connecting to stackoverflow.com|198.252.206.140|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 85836 (84K) [text/html]
Saving to: `STDOUT'

100%[======================================>] 85,836      50.0K/s   in 1.7s

2014-03-02 16:15:38 (50.0 KB/s) - `-' saved [85836/85836]

76
C:\Users\izabera>random
--2014-03-02 16:15:56--  https://stackoverflow.com/questions
Resolving stackoverflow.com... 198.252.206.140
Connecting to stackoverflow.com|198.252.206.140|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 85244 (83K) [text/html]
Saving to: `STDOUT'

100%[======================================>] 85,244      36.0K/s   in 2.3s

2014-03-02 16:15:59 (36.0 KB/s) - `-' saved [85244/85244]

144

2

সি ++

#include<iostream>
int main()
{
    int *ptr=new int,i=0;
    for(;i<5;i++)
    {
        std::cout<<*(ptr+i)<<'\n';
    }
    return 0;
}  

আউটপুট

যে কোনও 5 টি এলোমেলো সংখ্যা

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

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

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


1
1 ম, 2 য় এবং 5 তমটি খুব ঘনিষ্ঠ, একই ধাঁচের সমস্ত 3 উদাহরণে পুনরাবৃত্তি। এলোমেলো সংখ্যা জেনারেটর থেকে ঠিক প্রত্যাশিত আউটপুট নয়।
ইজাবেরের

@ আইজবেরা যখন এলোমেলো সংখ্যা উত্পন্ন করার পয়েন্টারগুলির কথা আসে ... সমস্ত কিছু আপনার কম্পিউটারের উপর নির্ভর করে (র‌্যাম এবং প্রসেসর) সম্ভবত 'পিটিআর' তে 'নতুন ইন্ট' দ্বারা খাওয়ানো ঠিকানাটি বর্তমানে ব্যবহৃত হচ্ছে! আপনি এই কোডটি চালানোর চেষ্টা করেছেন?
মুকুল কুমার

আমাকে কিছুটা পরিবর্তন যোগ করতে দাও
মুকুল কুমার

আমি এখন এটি চেষ্টা করেছিলাম, আমার মেশিনে দেখে মনে হচ্ছে আমি সবসময় এমন জিনিস পাই 11230576, 0, 11206992, 0, 2053725299যা এখনও আমার কাছে এলোমেলো মনে হয় না।
ইজবাবের


2

Perl

ইন্টারনেটে বীজ পাওয়ার সাথে এই সমস্ত আবর্জনা কী? আমাকে প্রতারণার মতো শোনায় ;-) আমি তার পরিবর্তে আমার বীজকে একটি ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন দিতে পছন্দ করি, এবং 0 থেকে 2 ^ 160-1 অবধি এভাবে আউটপুট দিতে পারি:

use Digest::SHA1 qw(sha1);
use bigint;
sub r {
  $_ = \3;
  /^.*x([0-9a-f]+).$/;
  hex((unpack "H*", sha1 "some_salt".$1.$$)[0])
}
print join " ", r'

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

আপনি যদি পরের কম্পিউটারে ছেলের চেয়ে আলাদা আউটপুট পেতে চান তবে আপনার পছন্দসই স্ট্রিং হিসাবে "সামার_সাল্ট" সামঞ্জস্য করুন। অথবা আপনি যদি সংক্ষিপ্তবাদী হন তবে একেবারে ছেড়ে দিন =)


আমি অনুমান করতে পারি যে একটি স্ট্যান্ডার্ড লাইব্রেরিতে এর নামের কোনও ক্রিপ্টোগ্রাফিক ফাংশন অভ্যন্তরীণভাবে একটি ক্রিপ্টোগ্রাফিক সুরক্ষিত আরএনজি ব্যবহার করে।
duci9y

আমি এ ব্যাপারে নিশ্চিত নই. ডাইজেস্ট :: এমডি 5 / ডাইজেস্ট :: এসএএএ 1 সম্পূর্ণ নির্মূল, পুনরাবৃত্তিযোগ্য আউটপুট উত্পাদন করে, তবে এর জন্য এলোমেলো সংখ্যার কী দরকার?
skibrianski

দুঃখিত! আমি কেবল আপনার উত্তরের দিকে উড়ে এসেছিলাম এবং ভেবেছিলাম যে আপনি হজমের পরিবর্তে একটি কী তৈরি করছেন rating
duci9y

2

জাভা

আমার সমাধান ক্লাসের আপত্তিজনক hashCode()পদ্ধতি Object

class G22640 {
    static class Rand {
        public int nextInt() {
            return new Object().hashCode();
        }
    }

    public static void main(String args[]) {
        Rand r = new Rand();
        for (int i = 0; i < 10; i++) {
            System.out.println(r.nextInt());
        }
    }
}

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

31859448
22101035
11593610
4580332
25736626
32157998
3804398
32440180
19905449
2772678

অন্যান্য উত্তরের সমাধানের এলোমেলোতা প্রদর্শন করে অনুপ্রাণিত হয়ে আমি আমার সমাধানটি পরিবর্তিত intদ্বারা মধ্যবর্তী 16 বিটগুলি ফেরত দিতে পরিবর্তন করেছি Object.hashCode()

import java.io.*;

class G22640 {
    static class Rand {
        public short nextShort() {
            return (short) ((new Object().hashCode() >> 8) & 0xFFFF);
        }
    }

    public static void main(String args[]) throws IOException {
        Rand r = new Rand();

        for (int i = 0; i < 10; i++) {
            System.out.println(r.nextShort());
        }

        // generateToFile("random_22640.txt");
    }

    private static void generateToFile(String fileName) throws IOException {
        Rand r = new Rand();
        BufferedOutputStream o = new BufferedOutputStream(new FileOutputStream(fileName));

        for (int i = 0; i < 10000000; i++) {
            int a = r.nextShort();
            for (int j = 0; j < 2; j++) {
                o.write(a & 0xFF);
                a >>= 8;
            }
        }

        o.flush();
        o.close();
    }
}

আমি একটি 19 এমবি ফাইল তৈরি করেছি (10 7 এর সমন্বয়ে short) এবং এটি স্যাকের্টে জমা দিন । এখানে ফলাফলের স্ক্রিনশটটি দেওয়া হয়েছে (এটি দেখতে সুন্দর দেখায় সম্পাদনা করা হয়েছে, তবে সংখ্যাটি যেমন রয়েছে তেমনই রেখে দেওয়া হয়েছে):

ফলাফল

ফলাফলটি দেখে আমি অবাক হয়েছিলাম, যেহেতু এটি এন্ট্রপি পরীক্ষায় 7.999991 এবং এটি 7 ডিহার্ড পরীক্ষায় পাস করেছে (?)


2

জাভাস্ক্রিপ্ট
ব্যবহারকারীর মাউস পদক্ষেপের সাথে এলোমেলোভাবে উত্পাদন

var ranArr=[];
var random=0;
var first=second=0;
function generateR(event) {
ranArr.push(parseFloat(event.clientX+document.body.scrollLeft))
ranArr.push(parseFloat(event.clientY+document.body.scrollTop));
var len=ranArr.length;

for(var i=0;i<len;i++) {
    if(i<len/2) {

    first+=ranArr[i];
    } else {
    second += ranArr[i];
    }
}
third = second/first;
third = third+"";
console.log(third.substr(5));
}
document.onmousemove=function(event){generateR(event)};

সর্বশেষ পাঁচটি অনুলিপি করা তথ্য:
9637090187003
7828470680762
6045869361238
4220720695015
2422653391073


1

বাশ, ব্যাপ্তি: 0 থেকে 1 এর মধ্যে অন্তর্নির্মিত

echo -n & echo "$! % 2" | bc

সুতরাং আপনি বলতে চান এটি কেবল 0 বা 1 বাছাই করে?

হাঁ। "উত্পন্ন সংখ্যাগুলি যে কোনও পরিসরের মধ্যে থাকতে পারে তা পূরণ করা উচিত Well কমপক্ষে কমপক্ষে দুটি পৃথক পূর্ণসংখ্যা: ডি", তাই না?
কেবা

আমারও তাই ধারণা. আপনি কি মনে করেন আপনি এটি আরও বড় পরিসরে প্রসারিত করতে পারেন?

শুধু echo -n & echo $!করবে, তবে খুব খারাপ আরএনজি হবে। আপনি অন্য যে কোনও সংখ্যার সাথে 2ও পরিবর্তন করতে পারেন তবে সংখ্যাটি যত বড় হবে ততই খারাপ "র্যান্ডমনেস" পায়।
কেবা

আমি দেখি. ব্যাখ্যার জন্য ধন্যবাদ.

1

চুনি

দুর্ভাগ্যক্রমে ম্যাক। আমরা soxমাইক্রোফোন থেকে বাইটগুলি টানতে ব্যবহার করি (স্ট্রিং হিসাবে, আহেম হিসাবে ...) শেষের দিকে স্ট্যাটাস শিরোনাম পেতে এটি বিপরীত করুন (* কাশি *), এটি কেটে ফেলুন, শিরোনামটি কেটে ফেলুন, খণ্ডগুলির MD5 নিন , হ্যাশ থেকে অ-সংখ্যার চরগুলি খনন করুন, অবশিষ্ট লার্জি পূর্ণসংখ্যা একসাথে যুক্ত 0.করুন, সামনের দিকে একটি লাঠি রেখে একটি ফ্লোটে রূপান্তর করুন, সম্পন্ন করুন done

ব্যবধানে বিভিন্ন দৈর্ঘ্যের বিভিন্ন ফ্লোট তৈরি করে 0..1

require 'open3'
require 'digest'

class InsecureRandom
  def self.random_number
    n = self.get_bytes
    .map! { |r| Digest::MD5.hexdigest(r) }
    .map! { |r| r.gsub(/[a-z]/, '') }
    .map!(&:to_i)
    .reduce(0,:+)

    "0.#{n}".to_f
  end

  private
  def self.get_bytes
    Open3.popen3('sox -d -q -e unsigned-integer -p') do |_, stdout, _|
      stdout.read(20000).reverse.split('\\').to_a.take(20)
    end
  end
end

randomish = Array.new(20) { InsecureRandom.random_number }
puts randomish
# >> 0.2333530765409607
# >> 0.17754047429753905
# >> 0.936039801228352
# >> 0.2781141892158962
# >> 0.6243140263525706
# >> 0.1583419168189452
# >> 0.2173713056635174
# >> 0.930577106355
# >> 0.11215268787922089
# >> 0.13292311877287152
# >> 0.14791818448435443
# >> 0.4864648362730452
# >> 0.5133193113765809
# >> 0.3076637743531015
# >> 0.16060112015793476
# >> 0.7294970251624926
# >> 0.18945368886946876
# >> 0.9970215825154781
# >> 0.13775531752383308
# >> 0.5794383903900283

1

সি

প্রক্রিয়া আইডি ব্যবহার করে এলোমেলোভাবে উত্পাদন করা হচ্ছে।

#include <unistd.h>
#include <stdio.h>

int     main(void)
{
    int out;
    out *= out *= out = getpid();
    printf("%d\n", out % 1024);
    return (0);
}

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

-767
0
769
-1008
337
-768
369
-752
-415
0
-863
784
-463
256
657


0

পাইথন

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

   import urllib.request

def getrand():
    req = urllib.request.Request("http://chat.stackoverflow.com/")
    response = urllib.request.urlopen(req)
    the_page = str(response.read())

    x = 1
    for char in the_page:
        x = (3*x + ord(char) + 1)%2**32

    print(x)

5 ট্রায়াল:

3258789746
1899058937
3811869909
274739242
1292809118

সত্যিকারের এলোমেলো নয় তবে এরপরে আবার কোনওটি নয়।


আমি মনে করি 2 নীতি 2 url এর মতো মঞ্জুরি দেয় নাwhatever.com/random
ইঞ্চিতে

@ আইজাবের 2 টি উত্তর কি এটি ব্যবহার করেছেন?
Qwr

না, আপনি স্পষ্টভাবে এলোমেলোভাবে উত্পন্ন সামগ্রী ব্যবহার করছেন। অন্যান্য উত্তরগুলি কেবল একটি বীজ পেতে কিছু অ-র্যান্ডম ওয়েবপৃষ্ঠায় অ্যাক্সেস করে তারপরে একটি এলোমেলো সংখ্যা মুদ্রণ করে।
ইজবাবের

@ আইজাবেরা আমি আমার এলোমেলো উত্স পরিবর্তন করেছি। আপনি এখন এটি সম্পর্কে কি মনে করেন?
Qwr

এখন ঠিক আছে: ডি
ইজাবেরে

0

Perl

আমি অনেকগুলি উত্তর দেখেছি যা HTTP অনুরোধ করেছে, যা আমার কাছে অপব্যয় বলে মনে হচ্ছে কারণ প্রচ্ছদের নীচে তারে প্রায় এলোমেলো সংখ্যা পাস হচ্ছে passed সুতরাং আমি নীচের স্তরে একটি সোয়াইপ করার জন্য কিছু কোড লেখার সিদ্ধান্ত নিয়েছি:

use IO::Socket::INET;
print ((sockaddr_in(getsockname(IO::Socket::INET->new(
    PeerAddr => "google.com", PeerPort => 80, Proto => "tcp"
))))[0]);

তাত্ত্বিকভাবে 0..65535 সীমাতে এলোমেলো বন্দর দেয়। অনুশীলনে, এমন অনেকগুলি বন্দর রয়েছে যা আপনি কখনই দেখতে পাবেন না, তাই বিতরণটি নিখুঁত। তবে এটি হ'ল, পোর্ট খোলা আছে এমন কোনও দূরবর্তী হোস্টের কাছ থেকে কিছু এনট্রপি পেতে আপনি ন্যূনতম পরিমাণ কাজ করতে পারেন।

পিএস - ত্রুটি পরিচালনা করা পাঠকের কাছে অনুশীলন হিসাবে ছেড়ে গেছে ;-)


0

সি

// alternating two pure-RNG inspired by http://xkcd.com/221/
int getRandomNumber()
{
   static int dice_roll = 0;
   dice_roll++;
   if ((dice_roll % 2) == 1)
   {
      return 4;
   } 
   else
   {
      return 5;
   } 
}

int main(int argc, char **argv)
{
    printf("%d\n%d\n", getRandomNumber(), getRandomNumber())
    return 0;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.