-
Notifications
You must be signed in to change notification settings - Fork 0
/
erdos.py
36 lines (28 loc) · 1.33 KB
/
erdos.py
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
INFINITO = 9999 # apenas um numero suficientemente grande...
class Autor(object):
def __init__(self, nome, numero=INFINITO):
self.nome = nome
self.numero_de_erdos = numero
self.coautores = set()
def __cmp__(self, other):
if self.numero_de_erdos == other.numero_de_erdos: return 0
elif self.numero_de_erdos > other.numero_de_erdos: return 1
else: return -1
def estabelecer_coautoria_com(self, autores):
self.coautores.update(autores - set([self]))
min(autores)._perfilhar_cada_um_dos(autores)
def _perfilhar_cada_um_dos(self, autores):
for outro_autor in autores:
if outro_autor > self:
outro_autor.numero_de_erdos = self.numero_de_erdos + 1
outro_autor._perfilhar_cada_um_dos(outro_autor.coautores)
class CoautoresDeErdos(dict):
def __init__(self, livros):
self['Erdos'] = Autor('Erdos', 0)
self.incluir_autores_de(livros)
def incluir_autores_de(self, livros):
for livro in livros:
autores = set((self.get(nome, Autor(nome)) for nome in livro))
for autor in autores:
self[autor.nome] = autor
autor.estabelecer_coautoria_com(autores)