Informations sur la validation France-IOI: Difference between revisions

From Wiki Cours
Jump to navigation Jump to search
No edit summary
 
(16 intermediate revisions by 2 users not shown)
Line 3: Line 3:


Changements dans les dates requises de validation : il vous faut
Changements dans les dates requises de validation : il vous faut
* valider le niveau I  pour le 20/10/16
* '''valider le niveau I  pour le 12/10/2023 à 23h59'''
* valider le niveau II pour le 10/11/16
* '''valider le niveau II pour le 16/11/2023 à 23h59'''


France-IOI vous permet de travailler en autonomie en dehors des séances de TDs. On privilégiera maintenant les exercices des TDs, la validation consistera donc à du travail personnel.
France-IOI vous permet de travailler en autonomie en dehors des séances de TDs. On privilégiera maintenant les exercices des TDs, la validation consistera donc à du travail personnel.


=== Notes de validation provisoires des étudiants au 06/10/16 ===
<!--
=== Notes de validation finales des étudiants au 10/11/16 ===


La note sur 20 est calculée selon la formule :  
La note sur 20 est calculée selon la formule :  
Line 14: Line 15:


<source lang=python>
<source lang=python>
==========================================================
============================================================
NOM Prénom                 | %exo | Niv1 | Niv2 |  Note |
NOM Prénom                   | %exo | Niv1 | Niv2 |  Note |
==========================================================
============================================================
GRABSCH Aurelien            | 0.04 | 0.27 | 0.00 | 2.67 |
ADA SIMA MARIE JOELLE Doliana | 0.39 | 1.00 | 1.00 | 20.00 |
BREBAN Arthur              | 0.28 | 0.87 | 0.00 | 8.67 |
AL KHOURY Jean                | 1.00 | 1.00 | 1.00 | 20.00 |
BOUDRIES Fahem             | 0.24 | 0.27 | 0.00 | 2.67 |
BEN HAMOUDA Wassim            | 0.61 | 1.00 | 1.00 | 20.00 |
CAILLAS Augustin            | 0.12 | 0.73 | 0.00 | 7.33 |
BOUDRIES Fahem               | 0.66 | 1.00 | 1.00 | 20.00 |
DE GRANDSAIGNES Hervé      | 0.09 | 0.67 | 0.00 | 6.67 |
BOUFFETIER Victorien          | 0.34 | 1.00 | 1.00 | 20.00 |
EID Doris                   | 0.62 | 0.67 | 0.56 | 12.29 |
BREBAN Arthur                | 0.48 | 1.00 | 1.00 | 20.00 |
COQUIDÉ Erwan              | 0.11 | 0.80 | 0.00 | 8.00 |
BRETEL Rémi                   | 0.79 | 1.00 | 1.00 | 20.00 |
JOIE Mathieu               | 0.63 | 1.00 | 0.00 | 10.00 |
BRILLOUET Pierre              | 1.00 | 1.00 | 1.00 | 20.00 |
FLORES GALICIA Fatima      | 0.27 | 0.47 | 0.00 | 4.67 |
CAILLAS Augustin              | 0.30 | 1.00 | 1.00 | 20.00 |
LIÉNARD--MAYOR Théo         | 0.44 | 0.80 | 0.00 | 8.00 |
CASTELAIN Maxime              | 0.41 | 1.00 | 1.00 | 20.00 |
DEFOORT Grégoire           | 0.33 | 0.60 | 0.00 | 6.00 |
CLAVEAU Julien               | 0.64 | 1.00 | 1.00 | 20.00 |
LOUIS DE CANONVILLE Cyprien | 0.10 | 0.73 | 0.00 | 7.33 |
COQUIDÉ Erwan                | 0.27 | 1.00 | 1.00 | 20.00 |
VIDALOT Jeoffray            | 0.49 | 0.67 | 0.00 | 6.67 |
DE GRANDSAIGNES Hervé         | 0.26 | 1.00 | 0.88 | 18.75 |
MARENA Kéba                | 0.12 | 0.07 | 0.00 | 0.67 |
DEFOORT Grégoire             | 0.56 | 0.87 | 0.88 | 17.42 |
DEPONTAILLER Lucie          | 0.49 | 0.73 | 0.00 | 7.33 |
DEPONTAILLER Lucie            | 0.96 | 1.00 | 1.00 | 20.00 |
LIANG chenmeijing          | 0.14 | 0.13 | 0.00 | 1.33 |
DIAF Mohamed                  | 0.98 | 1.00 | 1.00 | 20.00 |
LIM kyungtak                | 0.99 | 1.00 | 1.00 | 20.00 |
EID Doris                    | 0.79 | 1.00 | 1.00 | 20.00 |
LIU Shu                    | 0.51 | 0.73 | 0.00 | 7.33 |
FLORES GALICIA Fatima        | 0.72 | 1.00 | 1.00 | 20.00 |
LI Ying                    | 0.55 | 0.73 | 0.00 | 7.33 |
GUERFA Driffa                | 0.84 | 1.00 | 1.00 | 20.00 |
GUERFA Driffa              | 0.55 | 0.87 | 0.00 | 8.67 |
HERNANDEZ SANCHEZ Jessica    | 0.97 | 1.00 | 1.00 | 20.00 |
DIAF Mohamed                | 0.57 | 0.67 | 0.00 | 6.67 |
HU Xu                        | 0.99 | 1.00 | 1.00 | 20.00 |
NOUR-EDDINE Imam            | 0.14 | 0.13 | 0.00 | 1.33 |
JALAL Yassine                | 0.75 | 1.00 | 1.00 | 20.00 |
ORIEUX François             | 0.03 | 0.00 | 0.00 | 0.00 |
JOIE Mathieu                  | 1.00 | 1.00 | 1.00 | 20.00 |
LEFEBVRE corentin          | 0.39 | 0.60 | 0.50 | 11.00 |
KUMAR Ritesh                  | 0.37 | 0.20 | 1.00 | 12.00 |
BRILLOUET Pierre            | 0.51 | 0.73 | 0.00 | 7.33 |
LEFEBVRE Corentin            | 0.74 | 1.00 | 0.88 | 18.75 |
REZARD Quentin              | 0.23 | 0.27 | 0.00 | 2.67 |
LI Ying                      | 1.00 | 1.00 | 1.00 | 20.00 |
BRETEL Rémi                | 0.34 | 0.47 | 0.00 | 4.67 |
LIANG Chenmeijing             | 0.83 | 1.00 | 1.00 | 20.00 |
KUMAR ritesh                | 0.12 | 0.13 | 0.00 | 1.33 |
LIM Kyungtak                  | 1.00 | 1.00 | 1.00 | 20.00 |
SUREAU Robin               | 0.30 | 0.27 | 0.00 | 2.67 |
LIU Shu                      | 1.00 | 1.00 | 1.00 | 20.00 |
SAMB cheikh                | 0.16 | 0.27 | 0.00 | 2.67 |
LIÉNARD--MAYOR Théo          | 0.63 | 1.00 | 1.00 | 20.00 |
SIMON Stéphane             | 0.23 | 0.27 | 0.00 | 2.67 |
LOUIS DE CANONVILLE Cyprien  | 0.28 | 1.00 | 1.00 | 20.00 |
CASTELAIN Maxime            | 0.23 | 0.73 | 0.00 | 7.33 |
MARENA Kéba                  | 0.47 | 1.00 | 1.00 | 20.00 |
HU Xu                      | 0.50 | 0.73 | 0.00 | 7.33 |
MOUSSU Antoine               | 0.17 | 0.93 | 0.25 | 11.83 |
VANDERMAESEN Tiphaine      | 0.32 | 0.87 | 0.00 | 8.67 |
MOUTAFIS Nicolas              | 0.79 | 1.00 | 1.00 | 20.00 |
BOUFFETIER victorien        | 0.15 | 0.73 | 0.00 | 7.33 |
NOUR-EDDINE Imam             | 0.41 | 1.00 | 1.00 | 20.00 |
BEN HAMOUDA Wassim          | 0.11 | 0.07 | 0.00 | 0.67 |
REZARD Quentin                | 0.47 | 1.00 | 0.44 | 14.38 |
JALAL Yassine              | 0.11 | 0.27 | 0.00 | 2.67 |
SAMB Cheikh                  | 0.48 | 1.00 | 1.00 | 20.00 |
ZHOU YUANZHE                | 0.04 | 0.07 | 0.00 | 0.67 |
SIMON Stéphane                | 0.80 | 1.00 | 0.88 | 18.75 |
==========================================================
STUDER David                  | 0.54 | 1.00 | 1.00 | 20.00 |
SUREAU Robin                  | 0.72 | 1.00 | 1.00 | 20.00 |
VANDERMAESEN Tiphaine        | 0.62 | 1.00 | 1.00 | 20.00 |
VIDALOT Jeoffray              | 0.68 | 1.00 | 1.00 | 20.00 |
ZHOU Yuanzhe                  | 1.00 | 1.00 | 1.00 | 20.00 |
============================================================
</source>
</source>


Elles sont générées avec le script suivant:
Elles sont générées avec le script suivant:
<source lang=python>
<source lang=python>
"""                                                                                                              
"""                                                                                                            
   Un script qui analyse les résultats d'une classe sur http://www.france-ioi.org                                
   Un script qui analyse les résultats d'une classe sur http://www.france-ioi.org                              
   et qui produit un tableau de la validation des élèves.                                                        
   et qui produit un tableau de la validation des élèves.                                                      
   écrit le 5/10/16 par Guillaume Roux (Université Paris Sud)                                                    
   écrit par Guillaume Roux (Université Paris Sud)                                                              
   merci de me rapporter les bugs.                                                                                
   merci de me rapporter les bugs.                                                                              
                                                                                                               
  Utilisation sous Linux:                                                                                     
      python3 validation-france-ioi.py                                                                         
                                                                                                               
  ToDo list:                                                                                                   
  * recuperer le fichier depuis internet via le numero de groupe ou un lien                                   
  * eliminer les superviseurs des membres                                                                     
  * verifier automatiquement qu'il n'y a pas d'anomalies dans les dates de resolution (triche)                 
  * faire afficher les moyennes et la date de validation                                                       
  * export vers tableau Excell ou OpenOffice                                                                   
"""
"""
from html.parser import HTMLParser
from html.parser import HTMLParser
exercises = []
jumped = ["c'est plus, c'est moins",": mélange explosif"]
niveau1 = ["Dans le fourré","Vendanges","Course avec les enfants","Construction d'une pyramide","La Grande Braderie","Socles pour statues","Le plus beau Karva","Concours de tir à la corde","Mot de passe du village","Planning de la journée","Le juste prix","Casernes de pompiers","Zones de couleurs","Département d'architecture : construction d'une pyramide","Département de chimie"]
niveau2 = ["Augmentation des taxes","Achat de livres","Une belle récolte","La roue de la fortune","Visite de la mine","Banquet municipal","Choix des emplacements","Une ligne sur deux ","Lire ou ne pas lire, telle est la question","Analyse de fréquence","Écriture en miroir","La bataille","Analyse d’une langue","Sans espaces","Formes creuses","Convertisseur d'unités"]


class Member(object):
class Member(object):


     def __init__(self,name,num):
     def __init__(self,name,num):
        self.name = name
self.name = name
        tmp = name.split()
tmp = name.split()
         self.nicename = " ".join(tmp[:-2]).upper()+" "+tmp[-2]
         self.nicename = " ".join(tmp[:-2]).upper()+" "+tmp[-2].capitalize()
         self.number = num
         self.number = num
        self.note = 0
         self.results = dict()
         self.results = dict()
        self.note_niveau1 = 0
        self.note_niveau2 = 0


jumped = ["c'est plus, c'est moins",": mélange explosif"]
    def note(self,exos=[]):
niveau1 = ["Dans le fourré","Vendanges","Course avec les enfants","Construction d'une pyramide","La Grande Braderi\
        if exos: return sum([self.results[e] for e in exos])/len(exos)
e","Socles pour statues","Le plus beau Karva","Concours de tir à la corde","Mot de passe du village","Planning de \
        else: return 0.0
la journée","Le juste prix","Casernes de pompiers","Zones de couleurs","Département d'architecture : construction \
 
d'une pyramide","Département de chimie"]
    def showResults(self):
niveau2 = ["Augmentation des taxes","Achat de livres","Une belle récolte","La roue de la fortune","Visite de la mi\
        note = 0
ne","Banquet municipal","Choix des emplacements","Une ligne sur deux ","Lire ou ne pas lire, telle est la question\
        for exo in exercises:
","Analyse de fréquence","Écriture en miroir","La bataille","Analyse d’une langue","Sans espaces","Formes creuses"\
            note += self.results[exo]
,"Convertisseur d'unités"]
            print("\t",exo,":",self.results[exo])
niveau1max = len(niveau1)
niveau2max = len(niveau2)


# create a subclass and override the handler methods                                                             
class Parser(HTMLParser):
class Parser(HTMLParser):
     def __init__(self):
     def __init__(self):
         HTMLParser.__init__(self)
         HTMLParser.__init__(self)
Line 99: Line 115:
         self.exotype = False
         self.exotype = False
         self.members = []
         self.members = []
        self.exercises = []
         self.curexo = ""
         self.curexo = ""
         self.mcount = 0
         self.mcount = 0
Line 107: Line 122:


     def handle_starttag(self, tag, attrs):
     def handle_starttag(self, tag, attrs):
        #print( "Encountered a start tag:", tag, attrs)                                                           
         self.inlycee = self.exotype = False
         self.inlycee = self.exotype = False
         for attr in attrs[:1]:
         for attr in attrs[:1]:
Line 124: Line 138:
                     self.members.append(Member(data,self.mcount))
                     self.members.append(Member(data,self.mcount))
                     self.mcount += 1
                     self.mcount += 1
             if self.curexo in self.exercises and self.count<len(self.members):
             if self.curexo in exercises and self.count<len(self.members):
self.members[self.count].results[self.curexo] = self.solved
                self.members[self.count].results[self.curexo] = self.solved
                self.members[self.count].note += self.solved
                if self.curexo in niveau1:
                    self.members[self.count].note_niveau1 += self.solved
                if self.curexo in niveau2:
                    self.members[self.count].note_niveau2 += self.solved
                 self.count += 1
                 self.count += 1
         if self.exotype and len(data)>=3:
         if self.exotype and len(data)>=3:
             if "«" in data: data = data[:24]
             if "«" in data: data = data[:24]
             if not data in jumped:
             if not data in jumped:
self.curexo = data
                self.curexo = data
                 self.count = 0
                 self.count = 0
                 if (not data in self.exercises) and self.exocount<114:
                 if (not data in exercises) and self.exocount<114:
                     self.exocount += 1
                     self.exocount += 1
                     self.exercises.append(data)
                     exercises.append(data)


     def showMembers(self):
     def showMembers(self):
        totalexo = len(self.exercises)
#       print("Found",len(self.members),"members")                                                            
        #print("Found",len(self.members),"members")                                                              
         maxlenname = max([len(m.nicename) for m in self.members])
         maxlenname = max([len(m.nicename) for m in self.members])
         barre = "="*(maxlenname+31)
         barre = "="*(maxlenname+31)
         print(barre)
         print(barre)
print("NOM Prénom".ljust(maxlenname),"%exo","Niv1","Niv2","Note".rjust(5),sep=" | ",end=" |\n")
        print("NOM Prénom".ljust(maxlenname),"%exo","Niv1","Niv2","Note".rjust(5),sep=" | ",end=" |\n")
         print(barre)
         print(barre)
         for m in self.members:
         for m in sorted(self.members,key=lambda x: x.nicename):
             pexo = "{:.2f}".format(m.note/totalexo)
             pexo = "{:.2f}".format(m.note(exercises))
             pniv1 = "{:.2f}".format(m.note_niveau1/niveau1max)
             pniv1 = "{:.2f}".format(m.note(niveau1))
             pniv2 = "{:.2f}".format(m.note_niveau2/niveau2max)
             pniv2 = "{:.2f}".format(m.note(niveau2))
             nf = "{:.2f}".format((m.note_niveau1/niveau1max+m.note_niveau2/niveau2max)*10)
             nf = "{:.2f}".format((m.note(niveau1)+m.note(niveau2))*10)
             print(m.nicename.ljust(maxlenname),pexo,pniv1,pniv2,nf.rjust(5),sep=" | ",end=" |\n")
             print(m.nicename.ljust(maxlenname),pexo,pniv1,pniv2,nf.rjust(5),sep=" | ",end=" |\n")
         print(barre)
         print(barre)


     def showResults(self,number=None,verbose=False):
    def showExercises(self):
        print("Found",len(exercises),"exercises")
        for e in exercises: print(e)
 
     def showResults(self,number=None):
         if number is None: number = range(len(self.members))
         if number is None: number = range(len(self.members))
        if verbose:
            print("Found",len(self.exercises),"exercises")
            for e in self.exercises: print(e)
         print("__"*20)
         print("__"*20)
         for n in number:
         for n in number:
            note = 0
             print("Résultat de",self.members[n].nicename,"note :",\
             print("Résultat de",self.members[n].nicename,"note :",\
                   self.members[n].note)
                   self.members[n].note(exercises))
             if verbose:
             self.members[n].showResults()
                for exo in self.exercises:
                    note += self.members[n].results[exo]
                    print("\t",exo,":",self.members[n].results[exo])
                print( note )


# mettez ici le chemin vers votre fichier à analyser                                                              
# mettez ici le chemin vers votre fichier à analyser                                                            
fichier = "France-IOI.html"
fichier = "France-IOI.html"
parser = Parser()
parser = Parser()
Line 180: Line 184:
source.close()
source.close()
parser.showMembers()
parser.showMembers()
#parser.showResults([0,4,5])
#parser.showResults([8])                                                    
</source>
</source>
-->

Latest revision as of 14:00, 12 October 2023

<-- Site du cours

Changements dans les dates requises de validation : il vous faut

  • valider le niveau I pour le 12/10/2023 à 23h59
  • valider le niveau II pour le 16/11/2023 à 23h59

France-IOI vous permet de travailler en autonomie en dehors des séances de TDs. On privilégiera maintenant les exercices des TDs, la validation consistera donc à du travail personnel.