]> gitweb.pimeys.fr Git - chopes.git/blob - chopes.py
ce qui permet de faire des graphes (noms seuls et liens, pas d'infos supplémentaires).
[chopes.git] / chopes.py
1 #!/usr/bin/python
2 # -*- encoding: utf-8 -*-
3
4 # Codé par 20-100 et Gaétan le 13/08/12
5 # parce que parfois, à la Mèd, on fait des conneries
6
7 import psycopg2
8 import psycopg2.extras
9
10 from dijkstra import dijkstra
11
12 inf = float('Inf')
13
14 def getcursor():
15 con = psycopg2.connect(database = "chopes")
16 cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
17 return con, cur
18
19
20 def matrice(n):
21 con, cur = getcursor()
22 cur.execute("SELECT * FROM chopes;")
23 l = cur.fetchall()
24 m = [ [0 if i==j else inf for i in range(n)] for j in range(n)]
25 for (a,b) in l:
26 m[a][b] = 1 # Deux personnes qui se sont chopées sont à distance 1
27 m[b][a] = m[a][b] # Pour nous, les matrices seront symétriques. (Victime inconsciente : -10 pts)
28 return m
29
30
31 def nom(id):
32 con, cur= getcursor()
33 cur.execute("SELECT nom FROM gens WHERE id = %s;", (id,))
34 return cur.fetchone()["nom"]
35
36 def distances(m):
37 n = len(m)
38 dists = []
39 for i in range(n):
40 dists.append(dijkstra(m, i))
41 return dists
42
43 def moyenne(dists, i):
44 nn = len([a for a in dists[i] if a!=inf])
45 return sum([dist for dist in dists[i] if dist!=inf])/float(nn-1) # On ne se compte pas soi-même
46
47 if __name__ == "__main__":
48 con, cur = getcursor()
49 cur.execute("SELECT max(id) FROM gens;")
50 n = cur.fetchone()[0] + 1
51 mat = matrice(n)
52 dists = distances(mat)