-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
131 lines (119 loc) · 4.04 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
var data
var values = []
var scoreFinal = []
class PersonaGlobal {
constructor (nombre, puntos = 0, ejercicios = 0, penalizacion = 0) {
this.nombre = nombre
this.puntos = parseInt(puntos)
this.ejercicios = parseInt(ejercicios)
this.penalizacion = parseInt(penalizacion)
}
}
class PersonaContest {
constructor (nombre, problemas, penalizacion, adicional) {
this.nombre = nombre
this.problemas = parseInt(problemas)
this.penalizacion = parseInt(penalizacion)
this.adicional = parseInt(adicional)
}
}
function desplegar () {
var padre = document.getElementById('score')
for (var i = 0; i < scoreFinal.length; i++) {
var item = document.createElement('tr')
var posicion = document.createElement('td')
posicion.innerText = (i + 1)
item.appendChild(posicion)
var nombre = document.createElement('td')
nombre.innerText = scoreFinal[i].nombre
item.appendChild(nombre)
var puntaje = document.createElement('td')
puntaje.innerText = scoreFinal[i].puntos
item.appendChild(puntaje)
var ejercicios = document.createElement('td')
ejercicios.innerText = scoreFinal[i].ejercicios
item.appendChild(ejercicios)
var penalizacion = document.createElement('td')
penalizacion.innerText = scoreFinal[i].penalizacion
item.appendChild(penalizacion)
padre.appendChild(item)
}
}
function agregarPuntaje (persona, puntaje) {
for (var i = 0; i < scoreFinal.length; i++) {
if (scoreFinal[i].nombre === persona.nombre) {
scoreFinal[i].puntos += puntaje + persona.adicional
scoreFinal[i].ejercicios += persona.problemas
scoreFinal[i].penalizacion += persona.penalizacion
break
}
}
}
function calcularCuartil (n, val) {
var tam = n / 4
if (val >= 0 && val <= Math.ceil(tam)) return 1
else if (val <= Math.ceil(tam * 2)) return 2
else if (val <= Math.ceil(tam * 3)) return 3
else return 4
}
function calcularContests () {
for (var i = 1; i < values[0].length; i += 3) {
var contest = []
var cont = 0
for (var j = 0; j < values.length; j++) {
if (parseInt(values[j][i]) !== -1) cont++
contest.push(new PersonaContest(values[j][0], values[j][i], values[j][i + 1], values[j][i + 2]))
}
contest.sort(function (p1, p2) {
if (p1.problemas !== p2.problemas) return p2.problemas - p1.problemas
else if (p1.penalizacion !== p2.penalizacion) return p1.penalizacion - p2.penalizacion
else return 0
})
for (var k = 0; k < contest.length; k++) {
var cuartil = calcularCuartil(cont, k + 1)
if (contest[k].problemas === -1) continue
else if (k === 0) agregarPuntaje(contest[k], 8)
else if (k === 1) agregarPuntaje(contest[k], 6)
else if (k === 2) agregarPuntaje(contest[k], 5)
else if (cuartil === 4 || contest[k].problemas === 0) agregarPuntaje(contest[k], 1)
else if (cuartil === 3) agregarPuntaje(contest[k], 2)
else if (cuartil === 2) agregarPuntaje(contest[k], 3)
else if (cuartil === 1) agregarPuntaje(contest[k], 4)
}
}
scoreFinal.sort(function (p1, p2) {
if (p1.puntos !== p2.puntos) return p2.puntos - p1.puntos
else if (p1.ejercicios !== p2.ejercicios) return p2.ejercicios - p1.ejercicios
else if (p1.penalizacion !== p2.penalizacion) return p1.penalizacion - p2.penalizacion
else return 0
})
desplegar()
}
function inicializarDatos () {
for (var i = 1; i < data.length; i++) {
values.push(data[i].split(','))
scoreFinal.push(new PersonaGlobal(values[i - 1][0]))
}
// console.log(scoreFinal)
calcularContests()
}
function leerCSV () {
var request = new window.XMLHttpRequest()
request.open('GET', 'score.csv', true)
request.onload = function () {
if (request.status >= 200 && request.status < 400) {
// console.log(request.responseText)
data = request.responseText.split('\r\n')
inicializarDatos()
} else {
// TODO: Manejar error devuelto por el servidor
}
}
request.onerror = function () {
// TODO: Manejar error en la peticion
}
request.send()
}
window.onload = function () {
leerCSV()
}