jmacura / O-tools

A package of various tools for Orienteering
Mozilla Public License 2.0
1 stars 1 forks source link

Stejně umístění závodníci #1

Open kamilpipek opened 4 years ago

kamilpipek commented 4 years ago

Ahoj, testoval jsem Tvůj kód na výpočet výsledků přeboru škol. Všechno pěkně funguje a je hezky minimalistické. Moc se mi to líbí. Jen jsem narazil na jednu drobnost. Když mají dva závodníci stejný čas a tím stejné umístění, přidělí se jim rozdílné body (pravděpodobně podle abecedy). Skript jsem upravil tak, že se koukám na umístění předchozího závodníka v kategorii a je-li stejné, inkrementuju body týmu i závodníka. Taky jsem upravoval maximální bodovou hodnotu pro výpočet bodů týmů, ale tam si nejsem jistý, kdo z nás chápe zadání dle pravidel přeboru škol správně (ještě se tomu budu trochu věnovat). Celý skript jsem upravoval pro výstup ze systému MeOS, takže ho mám trochu dost modifikovaný, ale upravená funkce vypadá následovně (v 'City' mám oddíl a v 'Pl' umístění) :

prev_place = 0
data = [x for x in data if x['Classifier'] == '0'] # vyhodit DISK zavodniky, uz nejsou potreba
for cat in cats:
    team_score = {t: 0 for t in teams.keys()}
    points = 0
    if cat == "D3" or cat == "H3":
      points = team_max_3*2
    elif cat == "D5" or cat == "H5":
      points = team_max_5*2
    elif cat == "D7" or cat == "H7" or cat == "D9" or cat == "H9":
      points = team_max_79*2
    elif cat == "DS" or cat == "HS":
      points = team_max_S*2

for x in data:
        if x['Short'] == cat:        
            if team_score[x['City']] < 2:
                x['body'] = points
                team_score[x['City']] += 1
                points -= 1
                if x['Pl'] == prev_place:                  
                  x['body'] += 1
                  team_score[x['City']] += 1                  
            else:
                x['body'] = 0
            prev_place = x['Pl']

Díky za pěkný nápad!

Kamil Pipek LPU7310

jmacura commented 4 years ago

Ahoj,

skvělá zpráva, že můj kód byl někomu k užitku! Díky za dobrou připomínku, tento speciální případ jsem neřešil. Už nějakou dobu mám v plánu přepsat počítadlo do webové verze (dokonce už jsem něco rozdělal), ale zatím jsem se k tomu moc nedostal. Budu na tuto možnost myslet.

Díky!

kamilpipek commented 4 years ago

Prima. Zkoumal jsem ještě tu výchozí bodou hodnotu pro nejlepšího závodníka. Ty ji bereš z maximálního počtu soupeřících škol v kterékoli z kategorií, ale podle mě (i podle výsledků z republikového a některých krajských kol) by to mělo být z maximálního počtu soupeřících škol z kategorií, které se vyhodnocují společně. Kód jsem pro tento způsob výpočtu upravil následovně:

# Zjisteni obsazenosti jednotlivych kategorii pocitanych spolecne pro vychozi bodovou znamku
team_max_3 = 0
team_max_5 = 0
team_max_79 = 0
team_max_S = 0
team_max = 0
max_cat = None
for x in team_num.keys():    
   if (x == "D3" or x == "H3") and (len(team_num[x]) > team_max_3):         
          team_max_3 = len(team_num[x])

   if (x == "D5" or x == "H5") and (len(team_num[x]) > team_max_5):         
          team_max_5 = len(team_num[x])                                        

   if (x == "D7" or x == "H7" or x == "D9" or x == "H9") and (len(team_num[x]) > team_max_79):         
          team_max_79 = len(team_num[x])

   if (x == "DS" or x == "HS") and (len(team_num[x]) > team_max_S):         
          team_max_S = len(team_num[x])                   

   if len(team_num[x]) > team_max:
          team_max = len(team_num[x])
          max_cat = x

print("Maximum skol je v kategorii {}: {} skol".format(max_cat, team_max))                            
print("Maximum skol v kategorii DH3: {} skol".format(team_max_3))
print("Maximum skol v kategorii DH5: {} skol".format(team_max_5))
print("Maximum skol v kategorii DH79: {} skol".format(team_max_79))
print("Maximum skol v kategorii DHS: {} skol".format(team_max_S))
jmacura commented 4 years ago

No je možné, že jsme si vyložili pravidla špatně. Můj výpočet jsem dělal tak, aby odpovídal výsledkům okresního přeboru Cheb 2018. Což není úplně široká testovací sada, to uznávám.