Avatar
kr.martin
Člen
Avatar
kr.martin:

Prosím o pomoc, chtěl bych v GML napsat kód který by mi vybíral náhodná čísla z množin za určitých podmínek. Popsané to mám v txt souboru který přikládám. Díky předem :-)

http://ulozto.cz/…/priklad-txt

 
Odpovědět 19.3.2015 9:36
Avatar
Lukáš Hornych
Redaktor
Avatar
Lukáš Hornych:

Z každé mocniny vybereš náhodné číslo třeba pomocí funkce choose(tvoje čísla), ale aby se neopakovala to nevím jak udělat.

 
Nahoru Odpovědět 19.3.2015 11:21
Avatar
kr.martin
Člen
Avatar
Odpovídá na Lukáš Hornych
kr.martin:

no choose jsem použil a příkaz do a until s podmínkama aby se čísla neopakovala ale v lepším případě výpočet trval kolem minuty v horším někdy ani neproběhl :-)

Editováno 19.3.2015 11:46
 
Nahoru Odpovědět 19.3.2015 11:45
Avatar
Xan95
Člen
Avatar
Xan95:

Jsem amatér, ale asi bych to řešil následujícím způsobem:

1.) Vytvořit pro každou množinu "ds_list"
2.) Pomocí funkce "irandom_range(0, ds_list_size(id) - 1)" získat pořadí vybraného čísla
3.) Vysosat číslo ho přes "ds_list_find_va­lue"
4.) Smazat získané číslo u všech dalších listů s množinami (výsledky se nesmí opakovat)

 
Nahoru Odpovědět 19.3.2015 11:47
Avatar
kr.martin
Člen
Avatar
Odpovídá na Xan95
kr.martin:

nevím no v toto případě si myslim že je možné že třeba u 13,14 nebo 15 listu nezbude volne cislo

 
Nahoru Odpovědět 19.3.2015 11:50
Avatar
kr.martin
Člen
Avatar
Odpovídá na kr.martin
kr.martin:

Nemá už nikdo jiný nápad? :P

 
Nahoru Odpovědět 20.3.2015 10:38
Avatar
hanpari
Redaktor
Avatar
Odpovídá na kr.martin
hanpari:

Co takhle cislo vybrat a nasledne ho odstranit ze seznamu.pak budes vybirat vzdy jedinecnou hodnotu pomoci choose

 
Nahoru Odpovědět 20.3.2015 12:55
Avatar
kr.martin
Člen
Avatar
kr.martin:

No takhle by to fungovalo kdyby ve všech 15 ti seznamech bylo patnáct čísel od 1 do 15 . jelikož je v seznamech různý počet čísel a různé hodnoty tak se stane že třeba v posledních seznamech když budu od začátku nechávat mazat vybraná čísla nezbude už žádné číslo

 
Nahoru Odpovědět 20.3.2015 13:37
Avatar
coells
Redaktor
Avatar
Odpovídá na kr.martin
coells:
for i in 1:15
  množina M(i) = seznam všech hodnot
  dokud M(i) nemá potřebnou velikost
    vyhoď náhodný prvek z M(i)

ezpz (c) coells

 
Nahoru Odpovědět 20.3.2015 13:53
Avatar
kr.martin
Člen
Avatar
Odpovídá na coells
kr.martin:

Vypadá to zajímavě ale trošku jelen jsem z toho kdyby to šlo trosku podrobněji prosím :o

 
Nahoru Odpovědět 20.3.2015 16:35
Avatar
hanpari
Redaktor
Avatar
Odpovídá na kr.martin
hanpari:

To je pseudokod, universální zápis, který si musíš přepsat do GM skriptu

1/ 1:15 znamená v množinách od 1 do 15, typicky for
2/ Vybereš množinu n
3/ Dokud, typicky while, je velikost dané množiny větší než požadovaná,
4/ odstraňuješ náhodné prvky z množiny. Popřípadě můžeš množinu napřed promíchat v bodě 2, aby byla náhodná. A pak můžeš vyhazovat každý první nebo poslední prvek, dokud trvá podmínka ve while. Nevím, co je v GM výhodnější, pokud je v tom nějaký rozdíl.

 
Nahoru Odpovědět 20.3.2015 16:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.