Autor Zpráva
robbie
Profil *
Naznačí nekdo prosím, jak v javascriptu udelat např generátor tří čísel od 0-100. Zajímá me jak to udelat, aniž by se žádné číslo neopakovalo. Děkuji moc nebo za poslaný odkaz, kde se to řešilo. Děkuji
Joker
Profil
robbie:
Udělal bych si celou tu číselnou řadu jako pole, tj. nějak var rada = []; for (var i = od; i <= do; i++) rada.push(i);
A potom stačí (kolik čísel chci)-krát opakovat:
Najdu si náhodné číslo od 0 do (rada.length - 1). To číslo je index v poli rada a hodnota z pole je požadované náhodné číslo. A zároveň ten vybraný prvek odstraním z pole. Tady se šikne metoda Array.splice, která umí odstranit prvek z pole a zároveň ho vrátit- tj. vše potřebné v jedné metodě.

Doplnění, kdyby se to dělalo tak obecně jak jsem naznačil a velikost řady a počet náhodných čísel byly nastavitelné, nebude to samozřejmě fungovat ve chvíli, kdy počet vybíraných čísel bude větší, než rozsah řady.
Radek9
Profil
Joker:
Opravdu myslíš, že je dobrý nápad generovat celočíselnou řadu jako pole? Co kdyby potom někdo chtěl generovat číslo od 1 do 1 000 000? To už zabere poměrně dost času. Asi bych prostě vygeneroval náhodné číslo v tom rozsahu a pokud není v poli, uložil bych ho. A takto do chvíle, dokud nemám potřebný počet čísel.
Joker
Profil
Radek9:
Co kdyby potom někdo chtěl generovat číslo od 1 do 1 000 000?
Ani tak by to nezpůsobilo velký problém, deset milionů prvků mi trvalo asi 4 sekundy.

Ale záleží samozřejmě na poměru počtu vybíraných čísel k velikosti řady.
Kdybych chtěl tři různá čísla z milionu, prostě bych vygeneroval náhodné číslo, porovnal s těmi co už mám, kdyby bylo jiné ho přidal a to opakoval tak dlouho, dokud nebudu mít tři čísla.

Pro tři čísla ze sta to bude fungovat taky, ale tahle metoda má zase problém ve chvíli, kdy počet vybíraných čísel je významná část toho intervalu.
Bubák
Profil
Skript, který funguje, jak popissuje Radek9, je třebas tento:
http://kod.djpw.cz/ocgb
http://kod.djpw.cz/ocgb-
Kód je z jedné dost staré knihy, je skoro jisté, že to lze napsat lépe.

robbie:
Teď máš dva různé algoritmy a musíš si vybrat, předpokládám, že to zvládneš.
robbie
Profil *
První 4 řádky a poslední dva chápu, jinak se v tom topím, pomúže nekdo vysvetlit? Děkuji

http://kod.djpw.cz/ocgb
juriad
Profil
Já bych to napsat takto: http://kod.djpw.cz/wcgb
Snad je to přehlednější. Pokud máš nějakou ucelenou funkcionalitu, zabal ji do funkce.
Chamurappi
Profil
Reaguji na juriada:
Jen podotknu, že indexOf na poli nepodporují starší prohlížeče.
juriad
Profil
Hups, už zase. Proč si pořád myslím, že indexOf je všude a lastIndexOf není? Že si to s něčím pletu.
Upraveno: http://kod.djpw.cz/xcgb

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0