Informations sur la validation France-IOI: Difference between revisions
Jump to navigation
Jump to search
Wiki-cours (talk | contribs) |
Wiki-cours (talk | contribs) mNo edit summary |
||
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 20/10/16 à 22h''' | ||
* '''valider le niveau II pour le 10/11/16''' | * '''valider le niveau II pour le 10/11/16 à 22h''' | ||
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. |
Revision as of 14:13, 20 October 2016
Changements dans les dates requises de validation : il vous faut
- valider le niveau I pour le 20/10/16 à 22h
- valider le niveau II pour le 10/11/16 à 22h
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 13/10/16
La note sur 20 est calculée selon la formule :
============================================================
NOM Prénom | %exo | Niv1 | Niv2 | Note |
============================================================
ADA SIMA MARIE JOELLE DOLIANA | 0.05 | 0.07 | 0.00 | 0.67 |
BEN HAMOUDA Wassim | 0.11 | 0.07 | 0.00 | 0.67 |
BOUDRIES Fahem | 0.39 | 0.73 | 0.00 | 7.33 |
BOUFFETIER victorien | 0.18 | 1.00 | 0.00 | 10.00 |
BREBAN Arthur | 0.38 | 1.00 | 0.38 | 13.75 |
BRETEL Rémi | 0.50 | 0.73 | 0.00 | 7.33 |
BRILLOUET Pierre | 0.59 | 0.87 | 0.00 | 8.67 |
CAILLAS Augustin | 0.19 | 1.00 | 0.25 | 12.50 |
CASTELAIN Maxime | 0.34 | 1.00 | 0.50 | 15.00 |
COQUIDÉ Erwan | 0.11 | 0.80 | 0.00 | 8.00 |
DE GRANDSAIGNES Hervé | 0.09 | 0.67 | 0.00 | 6.67 |
DEFOORT Grégoire | 0.40 | 0.73 | 0.00 | 7.33 |
DEPONTAILLER Lucie | 0.56 | 0.80 | 0.00 | 8.00 |
DIAF Mohamed | 0.71 | 0.93 | 0.12 | 10.58 |
EID Doris | 0.55 | 0.80 | 0.19 | 9.88 |
FLORES GALICIA Fatima | 0.27 | 0.47 | 0.00 | 4.67 |
GUERFA Driffa | 0.72 | 0.93 | 0.44 | 13.71 |
HU Xu | 0.60 | 0.93 | 0.00 | 9.33 |
JALAL Yassine | 0.33 | 0.67 | 0.00 | 6.67 |
JOIE Mathieu | 0.80 | 1.00 | 0.44 | 14.38 |
JULIEN Claveau | 0.00 | 0.00 | 0.00 | 0.00 |
KUMAR ritesh | 0.12 | 0.13 | 0.00 | 1.33 |
LEFEBVRE corentin | 0.40 | 0.80 | 0.19 | 9.88 |
LI Ying | 0.61 | 0.93 | 0.00 | 9.33 |
LIANG chenmeijing | 0.17 | 0.13 | 0.00 | 1.33 |
LIM kyungtak | 1.00 | 1.00 | 1.00 | 20.00 |
LIU Shu | 0.63 | 1.00 | 0.00 | 10.00 |
LIÉNARD--MAYOR Théo | 0.48 | 1.00 | 0.00 | 10.00 |
LOUIS DE CANONVILLE Cyprien | 0.13 | 0.80 | 0.12 | 9.25 |
MARENA Kéba | 0.15 | 0.07 | 0.00 | 0.67 |
NOUR-EDDINE Imam | 0.14 | 0.13 | 0.00 | 1.33 |
REZARD Quentin | 0.23 | 0.27 | 0.00 | 2.67 |
SAMB cheikh | 0.25 | 0.67 | 0.00 | 6.67 |
SIMON Stéphane | 0.31 | 0.47 | 0.00 | 4.67 |
SUREAU Robin | 0.42 | 0.60 | 0.00 | 6.00 |
VANDERMAESEN Tiphaine | 0.35 | 1.00 | 0.00 | 10.00 |
VIDALOT Jeoffray | 0.54 | 0.80 | 0.19 | 9.88 |
ZHOU YUANZHE | 0.04 | 0.07 | 0.00 | 0.67 |
============================================================
Elles sont générées avec le script suivant:
"""
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.
écrit par Guillaume Roux (Université Paris Sud)
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
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 Brade\
rie","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 : constru\
ction 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 ques\
tion","Analyse de fréquence","Écriture en miroir","La bataille","Analyse d’une langue","Sans espaces","Formes cr\
euses","Convertisseur d'unités"]
class Member(object):
def __init__(self,name,num):
self.name = name
tmp = name.split()
self.nicename = " ".join(tmp[:-2]).upper()+" "+tmp[-2]
self.number = num
self.results = dict()
def note(self,exos=[]):
if exos: return sum([self.results[e] for e in exos])/len(exos)
else: return 0.0
def showResults(self):
note = 0
for exo in exercises:
note += self.results[exo]
print("\t",exo,":",self.results[exo])
class Parser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.inlycee = False
self.exotype = False
self.members = []
self.curexo = ""
self.mcount = 0
self.exocount = 0
self.solved = 0
self.count = 0
def handle_starttag(self, tag, attrs):
self.inlycee = self.exotype = False
for attr in attrs[:1]:
self.inlycee = attr[0] == 'class' and attr[1] == "lycee_resume_value"
self.exotype = attr[0] == 'href' and \
attr[1][:35] == "http://www.france-ioi.org/algo/task"
if self.inlycee and len(attrs)==2:
self.solved = int(attrs[1][1]=="background-color:lightgreen")
else:
self.solved = 0
def handle_data(self, data):
if self.inlycee:
if '(' in data:
if not data in [m.name for m in self.members]:
self.members.append(Member(data,self.mcount))
self.mcount += 1
if self.curexo in exercises and self.count<len(self.members):
self.members[self.count].results[self.curexo] = self.solved
self.count += 1
if self.exotype and len(data)>=3:
if "«" in data: data = data[:24]
if not data in jumped:
self.curexo = data
self.count = 0
if (not data in exercises) and self.exocount<114:
self.exocount += 1
exercises.append(data)
def showMembers(self):
# print("Found",len(self.members),"members")
maxlenname = max([len(m.nicename) for m in self.members])
barre = "="*(maxlenname+31)
print(barre)
print("NOM Prénom".ljust(maxlenname),"%exo","Niv1","Niv2","Note".rjust(5),sep=" | ",end=" |\n")
print(barre)
for m in sorted(self.members,key=lambda x: x.nicename):
pexo = "{:.2f}".format(m.note(exercises))
pniv1 = "{:.2f}".format(m.note(niveau1))
pniv2 = "{:.2f}".format(m.note(niveau2))
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(barre)
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))
print("__"*20)
for n in number:
print("Résultat de",self.members[n].nicename,"note :",\
self.members[n].note(exercises))
self.members[n].showResults()
# mettez ici le chemin vers votre fichier à analyser
fichier = "France-IOI.html"
parser = Parser()
source = open(fichier, 'r')
parser.feed(source.read())
source.close()
parser.showMembers()
#parser.showResults([8])