Js generator slučajnih brojeva. Upravlja se nasumično u JavaScriptu. Eksponencijacija

Tehnički, termin "generator slučajnih brojeva" je besmislica, jer sami brojevi nisu slučajni. Na primjer, da li je 100 slučajan broj? Šta je sa 25? Ono što ovaj izraz zapravo znači je da stvara niz brojeva koji se pojavljuju nasumično. Ovo postavlja teže pitanje: šta je niz slučajnih brojeva? Jedini tačan odgovor: niz slučajnih brojeva je niz u kojem svi elementi nisu povezani. Ova definicija dovodi do paradoksa da bilo koji niz može biti slučajan ili neslučajan, ovisno o tome kako se niz dobije. Na primjer, sljedeći niz brojeva
1 2 3 4 5 6 7 8 9 0
je dobijeno upisivanjem gornjeg reda tastature u redoslijedu, tako da se sekvenca ne može smatrati nasumično generiranom. Ali šta ako dobijete isti niz kada izvadite numerisane teniske loptice iz bureta. U ovom slučaju, to je već nasumično generirana sekvenca. Ovaj primjer pokazuje da slučajnost niza zavisi od toga kako je dobijena, a ne od samog sebe.

Zapamtite da je kompjuterski generisan niz brojeva deterministički: svaki broj osim prvog zavisi od brojeva ispred njega. Tehnički, to znači da samo kvazi-slučajni niz brojeva može generisati kompjuter, tj. u stvari, oni nisu zaista nasumični. Međutim, ovo je dovoljno za većinu zadataka i zbog jednostavnosti takve sekvence ćemo nazvati slučajnim. Jednu vrlo zanimljivu metodu razvio je John von Neumann; često se naziva srednji kvadrat. U ovoj metodi, prethodni slučajni broj se kvadrira, a zatim se iz rezultata izdvajaju srednje cifre. Na primjer, ako kreirate brojeve sa tri cifre, a prethodni broj je bio 121, onda kvadriranje daje rezultat 14641. Izoliranjem srednje tri cifre dobije se sljedeći slučajni broj 464. Nedostatak ove metode je što ima vrlo kratak period ponavljanja, nazvan ciklus. Iz ovog razloga ovu metodu danas se ne koristi. Savremene metode Generisanje slučajnih brojeva je mnogo teže.

Slučajni brojevi u PHP-u

PHP ima dvije grupe funkcija za rad sa slučajnim brojevima. Čisto eksterno, mogu se razlikovati po mt_ prefiksu za sve funkcije jedne od grupa.

Zastarjele funkcije
rand funkcija Vraća cijeli broj između nule i vrijednosti RAND_MAX (koja je 32767). Može imati dva opciona cjelobrojna parametra - ako su specificirani, generira se nasumični broj od prvog do drugog parametra.

Echo rand(); echo rand(1,100); // Dajte nasumični broj od 1 do 100

Funkcija srand. Određuje niz slučajnih brojeva koje proizvodi rand funkcija. Ima cijeli parametar - kada različita značenja Sa ovim parametrom, rand će proizvesti različite nizove brojeva. Funkciju srand treba pozvati samo jednom prije svih poziva funkcije rand. Primjer upotrebe:

Srand(1288); // Inicijaliziraj generator slučajnih brojeva za($i=0; $i broj elemenata u rasponu = 247 - 78 + 1 = 170; (Budući da obje granice uključuju

/*Mthod 1:*/ var i = 78, j = 247, k = 170, a = , b = , c, d, e, f, l = 0;< 0) { num3 += 2147483647; } this.SeedArray = 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 количество элементов диапазона = 247 - 78 + 1 = 170; (так как обе границы включены.

for(; i = 56) ( num = 1; ) if (++num2 >= 56) ( num2 = 1; ) var num3 = this.SeedArray - this.SeedArray;

if (num3 == 2147483647) (num3--; ) if (num3

/*Mthod 1:*/ var i = 78, j = 247, k = 170, a = , b = , c, d, e, f, l = 0;< 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 >for(; i 20) ( bool = istina; ) else ( bool = netačno; ) ) vrati broj; )

Koristeći sljedeći kod, možete generirati niz slučajnih brojeva bez ponavljanja unutar zadanog raspona.

Funkcija genRandomNumber(how_many_number,min,max) ( // parametri // how_many_number: koliko brojeva želite generirati. Na primjer, to je 5. // min(inclusive) : minimalna/niska vrijednost raspona. mora biti bilo koji pozitivan cijeli broj, odnosno manji od max.

= 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;

)

Da biste dobili nasumični broj, recite između 1 i 6, prvo uradite:

Var value = 0,5 + (Math.random() * ((6 - 1) + 1)) var roll = Math.round(value);

povratna rola;

Općenito, kod za ovo korištenjem varijabli je:

Var value = (Min - 0,5) + (Math.random() * ((Max - Min) + 1)) var roll = Math.round(value);

povratna rola;

Razlog za oduzimanje 0,5 od minimalne vrijednosti je taj što će korištenje samo minimalne vrijednosti omogućiti da završite s cijelim brojem koji bi bio veći od vaše maksimalne vrijednosti. Uklanjanjem 0,5 od minimalne vrijednosti, u suštini sprječavate zaokruživanje maksimalne vrijednosti.

Nadam se da ovo pomaže.

Slučajni cijeli broj između najnižeg i najvišeg:

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

Nije najelegantnije rješenje.. ali nešto brzo.

Funkcija getRandomInt(lower, upper) ( //za kreiranje ravnomjerne distribucije uzorka vratite Math.floor(lower + (Math.random() * (gornji - donji + 1))); //da biste proizveli neravnomjernu distribuciju uzorka // return Math.round(lower + (Math.random() * (gornji - niži))) //da biste isključili maksimalnu vrijednost iz mogućih vrijednosti //return Math.floor(lower + (Math.random()); * ( gornji - donji)));< Number.MIN_SAFE_INTEGER) { throw new Error("Arguments must be safe integers."); } else if (range >Da biste testirali ovu funkciju i varijacije ove funkcije, sačuvajte donji HTML/JavaScript u datoteku i otvorite je u pretraživaču. Kod će prikazati grafikon koji prikazuje distribuciju milion poziva funkcija. Kod će također zabilježiti rubne slučajeve, tako da ako funkcija proizvede vrijednost veću od max, ili manju od min, vi ćete.znati.o tome.< min) { throw new Error("max (${max}) must be >= min ($(min)."); ) else if (min === max) (vrati min; ) pusti generirano; uradi (generirano = crypto.getRandomValues(new Uint32Array(1)); ) while (generirano > maxUnbiased return min + (generirani % possibleResultValues(randomInteger(-8, 8)) // -2 console. 944450079 console.log(randomInteger(-1, 0xFFFFFFFF) // Greška: Opseg od 4294967296 koji pokriva -1 do 4294967295 je > 4294967295. console.log(new Array(12p)). (8, 12)));

“Algoritam” za nasumično odabiranje vrijednosti iz niza bez njihovog ponavljanja. Konkretnije, kao dio moje JS obuke, koristio sam ga za generiranje klasične RPG grupe likova (varvarin, mag, lopov, vitez, svećenik), bez ponavljanja klasa i imena.

Princip je izuzetno jednostavan, ali može biti koristan za JS početnike poput mene. Veza sa RPG-om je čisto simbolična - sada aktivno pokušavam promijeniti svoj profil iz marketinga u IT (shvatio sam da mi duša leži), a vježbanje u obliku igre je mnogo zanimljivije.

1. Kreirajte predložak Prije generiranja grupe znakova, morate postaviti šablon za njihovo generiranje. Zapravo, evo ga:

Funkcija GamePlayer(n, r, l, p) ( this.nick = n; this.role = r; this.level = l; this.portrait = p; )
Zapravo, ova funkcija će kreirati znakove iz varijabli kroz koje će biti pozvana. na primjer:

Var player1 = novi GamePlayer("Power Ranger","barbarian","64","img/barbarian.jpg")
Sada varijabla player1 pohranjuje varvarina Power Rangera nivoa 64 sa određenim portretom; možemo prikazati bilo koji od njegovih parametara u tijelu stranice koristeći player1.nick, player1.level, itd.

Vrijednosti (n, r, l, p) iz GamePlayera su odgovorne za primanje i uređivanje podataka u funkciji. Ako u primjeru zamijenimo n i r, tada će moćni rendžer Barbarian ostati u player1, što ne odgovara zadatku.

2. Definirajte nizove Da ne bismo sami kreirali znakove, već da bismo ih gotovo nasumično generirali (kao što je obećano u naslovu), potrebni su nam nizovi iz kojih ćemo uzeti parametre istih tih znakova. Kao što je već opisano, imamo samo 4 parametra: ime karaktera, klasu, nivo i portret.

Niz za ime:

Var playerNames = ["Zec bespomoćni", "Toplo užasno ždrebe", "Komplet želja", "Anđeo Dusty", "Sweety Frozen", "Silver Heavy Wombat", "Izgubljena Puma", "Vital Panda", "Rolling Sun" , "Steel Runny", "Young Fox", "Needless nemilosrdni volonter", "Chipmunk Cult", "Indigo Puppy"];
Moglo bi se ići dalje i generirati imena od 2-3 komponente, ali algoritam za takvo poboljšanje ne sadrži ništa novo (isti slučajnost), a onda bi to jednostavno zakomplikovalo proces učenja.

Niz za klasu:

Var playerRoles = ["varvar", "mag", "lopov", "vitez", "sveštenik"];
Sve je isto tako očigledno. Nekoliko nizova, iz kojih ćemo zatim odabrati vrijednosti za prikaz na stranici.

Niz za nivo:

U ovom konkretnom primjeru, želio sam da svi članovi stranke budu između 60. i 70. nivoa. Ali, pošto se uslovi mogu promeniti, bilo je potrebno kreirati niz od nivoa 0 do 80, iz kojeg se zatim biraju tražene vrednosti. Kreirano u petlji:

Var playerLevels = ; za (i = 0; i