|
|
@ -19,6 +19,13 @@ zlinska = None # tohle bude speciální škola, které později dodáme kontaktn |
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
# testuje unikátnost vygenerovaného jména |
|
|
|
def __unikatni_jmeno(osoby, jmeno, prijmeni): |
|
|
|
for os in osoby: |
|
|
|
if os.jmeno == jmeno and os.prijmeni == prijmeni: |
|
|
|
return 0 |
|
|
|
else: return 1 |
|
|
|
|
|
|
|
def gen_osoby(rnd, size): |
|
|
|
logger.info('Generuji osoby (size={})...'.format(size)) |
|
|
|
|
|
|
@ -48,6 +55,19 @@ def gen_osoby(rnd, size): |
|
|
|
pohlavi = rnd.randint(0,1) |
|
|
|
jmeno = rnd.choice([jmena_m, jmena_f][pohlavi]) |
|
|
|
prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi]) |
|
|
|
pokusy = 0 |
|
|
|
max_pokusy = 120*size |
|
|
|
while (not __unikatni_jmeno and pokusy < max_pokusy): |
|
|
|
# pokud jméno a příjmení není unikátní, zkoušíme generovat nová |
|
|
|
# do daného limitu (abychom se nezacyklili do nekonečna při málo jménech a příjmeních |
|
|
|
# ze kterých se generuje) |
|
|
|
jmeno = rnd.choice([jmena_m, jmena_f][pohlavi]) |
|
|
|
prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi]) |
|
|
|
pokusy = pokusy + 1 |
|
|
|
if pokusy >= max_pokusy: |
|
|
|
print("Chyba, na danou velikost testovacích dat příliš málo možných" |
|
|
|
" jmen a příjmení") |
|
|
|
exit |
|
|
|
prezdivka = rnd.choice(prezdivky) |
|
|
|
email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)]) |
|
|
|
telefon = "".join([str(rnd.choice([k for k in range(10)])) for i in range(9)]) |
|
|
@ -165,11 +185,12 @@ def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size) |
|
|
|
k = 0 |
|
|
|
for rocnik in rocniky: |
|
|
|
k+=1 |
|
|
|
print("Generuji {}. číslo.".format(k)) |
|
|
|
cisla = rocnik_cisla[k-1] |
|
|
|
for ci in range(3, len(cisla)+1): # pro všechna čísla |
|
|
|
resitele_size = round(7/8 * 30 * size) # očekáváný celkový počet řešitelů |
|
|
|
poc_res = rnd.randint(round(resitele_size/8), round(3*resitele_size/4)) |
|
|
|
# dané číslo řeší něco mezi osminou a tříčtvrtinou všech řešitelů |
|
|
|
poc_res = rnd.randint(round(resitele_size/8), round(resitele_size/4)) |
|
|
|
# dané číslo řeší něco mezi osminou a čtvrtinou všech řešitelů |
|
|
|
# (náhodná hausnumera, možno změnit) |
|
|
|
# účelem je, aby se řešení generovala z menší množiny řešitelů a tedy |
|
|
|
# bylo více řešení od jednoho řešitele daného čísla |
|
|
@ -228,9 +249,10 @@ def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size) |
|
|
|
p.save() |
|
|
|
|
|
|
|
# generování řešení |
|
|
|
poc_reseni = rnd.randint(size // 2, size * 2) |
|
|
|
# generujeme náhodný počet řešení |
|
|
|
poc_reseni = rnd.randint(poc_res, poc_res * 4) |
|
|
|
# generujeme náhodný počet řešení vzhledem k počtu řešitelů čísla |
|
|
|
for ri in range(poc_reseni): |
|
|
|
#print("Generuji {}-té řešení".format(ri)) |
|
|
|
if rnd.randint(1, 10) == 6: |
|
|
|
# cca desetina řešení od více řešitelů |
|
|
|
res_vyber = rnd.sample(resitele_cisla, rnd.randint(2, 5)) |
|
|
@ -432,8 +454,10 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori) |
|
|
|
cisla = rocnik_cisla[k-1] |
|
|
|
temata = rocnik_temata[k-1] |
|
|
|
for ci in range(len(cisla)): |
|
|
|
print("Generuji {}-té číslo".format(ci)) |
|
|
|
cislo = cisla[ci-1] |
|
|
|
mozna_tema_vcn = cislo.cislonode.first_child |
|
|
|
# kdybyste nad tím někdo taky přemýšleli, tak vcn == VCisleNode :) |
|
|
|
while mozna_tema_vcn != None: |
|
|
|
if type(mozna_tema_vcn) != TemaVCisleNode: |
|
|
|
mozna_tema_vcn = mozna_tema_vcn.succ |
|
|
@ -521,7 +545,7 @@ def gen_novinky(rnd, organizatori): |
|
|
|
|
|
|
|
def otec_syn(otec, syn): |
|
|
|
bratr = otec.first_child |
|
|
|
syn.succ = bratr |
|
|
|
syn.ucc = bratr |
|
|
|
otec.first_child = syn |
|
|
|
syn.save() |
|
|
|
otec.save() |
|
|
|