suma=0 #total de mail-pigeons
conectado={} #Diccionario de conectados o no...
# print (net)
# 1/ marca la fuente como 1, el nodo roto como -1 y los demás como ceros.
for i in users:
conectado[i]=(i in source)-(i in crushes)
# 2/ Busca en las listas si está al lado de uno conectado. Si lo está, le pone un uno.
# hay una conexión a la fuente.
for h in range(0,2): # dos pasadas al menos lo aseguran. Parecen estar las listas ordenadas, pero ¿y si no lo están?
for j in net:
for k in range(0,2): #límite superior 1
# Si el otro es 1 y este es cero, lo cambia a uno. Si era 1 lo deja, y si era -1 tb lo deja.
conectado[j[(k!=1)]]=(conectado[j[(k!=1)]]==1)-(conectado[j[(k!=1)]]==-1)+(conectado[j[k]]==1 and conectado[j[(k!=1)]]==0)
# print(j,conectado[j[(k!=1)]],conectado)
# 3/ Sumo los valores de los que NO están en el diccionario
for clave, valor in users.items():
suma+=(conectado[clave]!=1)*valor
# print("Suma: "+str(suma))
return suma
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert disconnected_users([
['A', 'B'],
['B', 'C'],
['C', 'D']
], {
'A': 10,
'B': 20,
'C': 30,
'D': 40
},
'A', ['B']) == 90, "First"
assert disconnected_users([
['A', 'B'],
['B', 'D'],
['A', 'C'],
['C', 'D']
], {
'A': 10,
'B': 0,
'C': 0,
'D': 40
},
'A', ['B']) == 0, "Second"
assert disconnected_users([
['A', 'B'],
['A', 'C'],
['A', 'D'],
['A', 'E'],
['A', 'F']
], {
'A': 10,
'B': 10,
'C': 10,
'D': 10,
'E': 10,
'F': 10
},
'C', ['A']) == 50, "Third"
print('Done. Try to check now. There are a lot of other tests')
No hay comentarios:
Publicar un comentario