Js véletlenszám generátor. Véletlenszerűen kezelt JavaScriptben. Hatványozás

Technikailag a "véletlenszám-generátor" kifejezés értelmetlen, mivel maguk a számok nem véletlenszerűek. Például a 100 véletlen szám? Mi van a 25-tel? Ez a kifejezés valójában azt jelenti, hogy véletlenszerűen megjelenő számsorozatot hoz létre. Ez egy nehezebb kérdést vet fel: mi az a véletlen számsorozat? Az egyetlen helyes válasz: a véletlen számok sorozata olyan sorozat, amelyben minden elem nem kapcsolódik egymáshoz. Ez a meghatározás ahhoz a paradoxonhoz vezet, hogy bármely sorozat lehet véletlenszerű vagy nem véletlenszerű, attól függően, hogy a sorozatot hogyan kapjuk meg. Például a következő számsor
1 2 3 4 5 6 7 8 9 0
a billentyűzet felső sorának sorrendben történő beírásával kaptuk meg, így a sorozat nem tekinthető véletlenszerűen generáltnak. De mi van akkor, ha ugyanazt a sorozatot kapod, amikor kiveszed a számozott teniszlabdákat a hordóból. Ebben az esetben ez már egy véletlenszerűen generált sorozat. Ez a példa azt mutatja, hogy egy sorozat véletlenszerűsége attól függ, hogy hogyan kaptuk meg, nem önmagától.

Ne feledje, hogy a számítógép által generált számsorozat determinisztikus: az első kivételével minden szám az előtte lévő számoktól függ. Technikailag ez azt jelenti, hogy számítógéppel csak kvázi véletlenszerű számsorozat állítható elő, pl. valójában nem véletlenszerűek. Ez azonban a legtöbb feladathoz elegendő, és az egyszerűség kedvéért az ilyen sorozatokat véletlenszerűnek nevezzük. Egy nagyon érdekes módszert fejlesztett ki Neumann János; gyakran négyzetgyöknek nevezik. Ennél a módszernél az előző véletlenszámot négyzetre emeljük, majd az eredményből kivonjuk a középső számjegyeket. Például, ha háromjegyű számokat hoz létre, és az előző szám 121 volt, akkor az eredmény négyzetesítésével 14641 lesz az eredmény. A középső három számjegy négyzetesítésével a következő véletlenszám 464 lesz. Ennek a módszernek az a hátránya, hogy van egy nagyon rövid ismétlési periódus, amelyet ciklusnak neveznek. Emiatt ezt a módszert ma nem használják. Modern módszerek A véletlen számok generálása sokkal nehezebb.

Véletlen számok PHP-ben

A PHP két függvénycsoporttal rendelkezik a véletlen számokkal való munkavégzéshez. Pusztán külsőleg az mt_ előtag alapján különböztethetők meg az egyik csoport összes funkciójához.

Elavult funkciók
rand függvény Egy nulla és a RAND_MAX értéke közötti egész számot ad vissza (ez 32767). Két opcionális egész paramétere lehet – ha meg vannak adva, véletlenszám generálódik az első paramétertől a másodikig.

Echo rand(); echo rand(1100); // Adj ki egy véletlen számot 1-től 100-ig

Funkció srand. Megadja a randfüggvény által előállított véletlen számok sorozatát. Teljes paraméterrel rendelkezik - mikor különböző jelentések Ezzel a paraméterrel a rand különböző számsorozatokat állít elő. A srand függvényt csak egyszer kell meghívni a rand függvény összes hívása előtt. Használati példa:

Srand(1288); // Inicializálja a véletlenszám generátort for($i=0; $i elemek száma a tartományban = 247 - 78 + 1 = 170; (Mivel mindkét határ

/*1. módszer:*/ 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

/*1. módszer:*/ 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 = igaz; ) else ( bool = hamis; ) ) visszatérési szám; )

A következő kód segítségével egy adott tartományon belül ismétlés nélkül generálhat véletlenszerű számokból álló tömböt.

Függvény genRandomNumber(hány_szám,min,max) ( // paraméterek // hány_szám: hány számot szeretne generálni. Például 5. // min(beleértve) : egy tartomány minimális/alacsony értéke. Bármelyiknek kell lennie pozitív egész szám, de kisebb, mint a max. 4 // max.

= 0) ( gen_num = parseInt((Math.random() * (max-perc+1)) + min); ) else ( random_number.push(gen_num); is_exist = -2; ) ) while (van_exist > -1 );

) document.getElementById("doboz").innerHTML = véletlen_szám;

)

Ha véletlen számot szeretne kapni, mondjuk 1 és 6 között, először tegye a következőket:

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

visszatekercs;

Általában ennek a változókat használó kódja a következő:

Változó érték = (Min - 0,5) + (Math.random() * ((Max - Min) + 1)) var roll = Math.round(érték);

visszatekercs;

A minimális értékből 0,5-öt azért kell levonni, mert csak a minimális érték használatával olyan egész számot kaphat, amely nagyobb, mint a maximális érték. A 0,5-ös minimális értékből való eltávolításával lényegében megakadályozza a maximális érték kerekítését.

Remélem ez segít.

Véletlenszerű egész szám a legalacsonyabb és a legmagasabb között:

Véletlenszerű függvény Range(l,h)(var range = (h-l); var random = Math.floor(Math.random()*range); if (random === 0)(random+=1;) return l+random; )

Nem a legelegánsabb megoldás.. de valami gyors.

Függvény getRandomInt(lower, felső) ( //egyenletes mintaeloszlás létrehozásához visszatér Math.floor(lower + (Math.random() * (felső - alsó + 1))); //egyenetlen mintaeloszlás létrehozásához // return Math.round(lower + (Math.random() * (felső - alsó))) //a maximális érték kizárásához a lehetséges értékek közül //return Math.floor(lower + (Math.random()); * ( felső - alsó)));< Number.MIN_SAFE_INTEGER) { throw new Error("Arguments must be safe integers."); } else if (range >A funkció és a szolgáltatás változatainak teszteléséhez mentse el az alábbi HTML/JavaScriptet egy fájlba, és nyissa meg egy böngészőben. A kód egy grafikont fog mutatni, amely egymillió függvényhívás eloszlását mutatja. A kód az éles eseteket is rögzíti, tehát ha a függvény a max-nál nagyobb vagy min-nél kisebb értéket produkál, akkor.tudni fogja.about.it.< min) { throw new Error("max (${max}) must be >= min ($(perc)."); ) else if (min === max) ( min. return ); return min + (generált % lehetségesResultValues). 944450079 console.log(randomInteger(-1, 0xFFFFFFFF)); // Hiba: A -1-től 4294967295-ig terjedő 4294967296 tartomány > 4294967295. console.log(n fill(>random(122)). (8, 12)));

Egy „algoritmus” az értékek véletlenszerű kiválasztásához egy tömbből anélkül, hogy megismételné azokat. Pontosabban, a JS képzésem részeként egy klasszikus RPG karaktercsoport generálására használtam (barbár, mágus, tolvaj, lovag, pap), osztályok és nevek ismétlése nélkül.

Az elv rendkívül egyszerű, de hasznos lehet a JS kezdőknek, mint én. Az RPG-vel való kapcsolat pusztán szimbolikus – most aktívan próbálom megváltoztatni a profilomat marketingről IT-re (rájöttem, hogy a lelkem hazudik), és a játékban való gyakorlás sokkal érdekesebb.

1. Sablon létrehozása Mielőtt létrehozna egy karaktercsoportot, be kell állítania egy sablont a generálásukhoz. Tulajdonképpen itt van:

Funkció GamePlayer(n, r, l, p) ( this.nick = n; this.role = r; this.level = l; this.portré = p; )
Valójában ez a függvény karaktereket hoz létre a változókból, amelyeken keresztül meghívásra kerül. Például:

Var player1 = new GamePlayer("Power Ranger","barbár","64","img/barbarian.jpg")
Most a player1 változó egy 64. szintű Power Ranger barbárt tárol egy adott portréval; bármely paraméterét megjeleníthetjük az oldal törzsében a player1.nick, player1.level stb. segítségével.

A GamePlayer értékei (n, r, l, p) felelősek az adatok fogadásáért és a funkcióba való beérkezésének sorrendjéért. Ha a példában felcseréljük n-t és r-t, akkor az erős ranger Barbarian a játékos1-ben marad, ami nem egészen felel meg a feladatnak.

2. Tömbök definiálása Ahhoz, hogy ne magunk hozzunk létre karaktereket, hanem szinte véletlenszerűen generáljuk azokat (a címben ígért módon), szükségünk van tömbökre, amelyekből ugyanezen karakterek paramétereit fogjuk kivenni. Ahogy fentebb már leírtuk, csak 4 paraméterünk van: karakter neve, osztály, szint és portré.

Név tömb:

Var playerNames = ["Rabbit Helpless", "Warm Dreaded Foal", "Desire Kit", "Angel Dusty", "Sweety Frozen", "Silver Heavy Wombat", "Lost Puma", "Vital Panda", "Rolling Sun" , "Steel Runny", "Young Fox", "Needless Ruthless Volunteer", "Chipmunk Cult", "Indigo Puppy"];
Lehetne tovább menni és 2-3 komponensből neveket generálni, de az ilyen fejlesztés algoritmusa nem tartalmaz semmi újat (ugyanaz a véletlenszerűség), és akkor egyszerűen bonyolítaná a tanulási folyamatot.

Tömb az osztályhoz:

Var playerRoles = ["barbár", "mágus", "gazember", "lovag", "pap"];
Minden ugyanolyan nyilvánvaló. Számos karakterlánc, amelyekből kiválasztjuk az oldalon megjelenítendő értékeket.

Tömb szinthez:

Ebben a konkrét példában azt akartam, hogy a párt összes tagja 60 és 70 között legyen. De mivel a feltételek változhatnak, létre kellett hozni egy tömböt 0-tól 80-ig, amelyből aztán kiválasztjuk a kívánt értékeket. Cikkben létrehozva:

Var playerLevels = ; for (i = 0;i