Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
kamilpipek opened this issue Nov 19, 2019 · 3 comments
Open

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

kamilpipek opened this issue Nov 19, 2019 · 3 comments
Assignees
Labels
bug Something isn't working

Comments

@kamilpipek
Copy link

kamilpipek commented Nov 19, 2019

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
Copy link
Owner

jmacura commented Nov 26, 2019

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
Copy link
Author

kamilpipek commented Nov 26, 2019

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
Copy link
Owner

jmacura commented Nov 26, 2019

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.

@jmacura jmacura self-assigned this May 15, 2020
@jmacura jmacura added the bug Something isn't working label May 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants