#
# Python 3.3
#
# (C) Ricardo
#uma rede social e um conjunto de redes pessoais uma rede pessoal e formada por um usuario e todos os seus amigos relacionados. A figura exemplifica a ideia:
#uma rede social pode ser modelada como um grafo e implementada como uma matriz de adjacencias
#-dado o arquivo bdusuario.txt contendo os nomes dos usuarios na forma de uma matriz de adjacencias, faça
#a)construa as funcoes lerede() e salvarede() que leem e salvam a rerde social de e para bdrede
#b)construa a funcao amigoscomuns(usuario,usuario) que retorne quantos amigoss comuns existem entre os usuarios
#c)construa a funcao notifica(usuarioa,usuariob) que exibe a msg usuariob solicita que usuarioa adicione como amigo somente se os amigos comuns dos usuarios a e b totalizarem 30% ou mais da quantidade de amigos do usuario b
#d)construa a funcao aceitatodos que aceitaria todos os pedidos de amizades descobertos na letra c alterando a configuracao da rede social
#e) construa um programa pytghon que modele, carregue e processe a rede social usando as funcoes dos itens a,b,c e d na seqencia
#f) caminho(usuarioA, usuarioB, rede, usuarioS) - retorna a sequencia de nós + equivalente ao menor caminho entre o Usuario A e o Usuario B
def leUsuarios():
conteudo = ''
auxlst=[]
arq = open('bdusuario.txt', 'rt')
conteudo = arq.readline()
while conteudo != '':
conteudo = conteudo[:-1]
auxlst.append(conteudo)
conteudo = arq.readline()
arq.close()
return auxlst
def leRede():
conteudo = ''
auxlst=[]
auxdic={}
arq = open('bdrede.txt', 'rt')
conteudo = arq.readline()
while conteudo != '':
conteudo = conteudo[0:-1]
auxlst.append(conteudo.split(','))
conteudo = arq.readline()
arq.close()
for i in range(0,5):
for j in range(0,5):
auxlst[i][j] = int(auxlst[i][j])
tbUsuarios = leUsuarios()
for j in range(0,5):
auxdic[tbUsuarios[j]]=auxlst[j]
return auxdic
def notifica(u1, u2, redeamigos, solicitacoes):
r = redeamigos[u1]
s = redeamigos[u2]
qtdB = 0
qtdAB = 0
amigosComunsA = 0
amigosComunsB = 0
for j in range(0,5):
if(s[j] == 1):
qtdB+=1
# print('Quantidade de amigos de B: ', qtdB)
amigosComunsA = amigosComuns(u1, u2, redeamigos)
amigosComunsB = amigosComuns(u1, u2, redeamigos)
# print('Amigos em comuns de A: ', amigosComunsA)
# print('Amigos em comuns de B: ', amigosComunsB)
porcentagem =((amigosComunsA+amigosComunsB)*100)/qtdB
print("%s notifica %s que o adicione como amigo." %(u2, u1))
if(porcentagem >= 30):
solicitacoes[u1].append(u2)
return True
def salvaRede(redeamigos):
#arq = open('./bdrede.txt', 'w+')
return 0
def amigosComuns(u1, u2, redeamigos):
r = redeamigos[u1]
s = redeamigos[u2]
amigosComuns=0
for j in range(0,5):
if(r[j] == s[j]):
amigosComuns+=1
return amigosComuns
def aceitaTodos(solicitacoes, redeamigos, redesocial):
keys = solicitacoes.keys()
posicao = 0
#print('Solicitacoes:', solicitacoes)
#print(redeamigos)
for j in list(keys):
if(len(solicitacoes[j]) > 0):
for k in range(len(solicitacoes[j])):
posicao = redesocial.index(solicitacoes[j][k])
redeamigos[j][posicao]=1
print('%s adicionou %s como amigo.' %(j, solicitacoes[j][k]))
#print(redeamigos)
salvaRede(redeamigos)
return 0
def main():
redeamigos = leRede()
redesocial = leUsuarios()
solicitacoes = {}
for j in redesocial:
solicitacoes[j] = []
print('Rede amigos: ', redeamigos)
print('Rede social: ', redesocial)
print('Amigos em comuns: ',amigosComuns('Ana', 'Lucia', redeamigos))
notifica('Ana', 'Lucia', redeamigos, solicitacoes)
notifica('Ana', 'Joao', redeamigos, solicitacoes)
aceitaTodos(solicitacoes, redeamigos, redesocial)
#print(solicitacoes)
return 0
main()