Advertisement
icarussiano

Untitled

Dec 10th, 2022
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.68 KB | None | 0 0
  1. def dict_tree(lista):
  2.     """
  3.    funzione che crea un dizionario che funge da albero di followers
  4.    :param lista: lista concatenata in input
  5.    :return: dizonario/albero
  6.    """
  7.     # creo una lista degli utenti
  8.     users = [lista[i][0] for i in range(len(lista))]
  9.     # creo una lista di liste dei followers per ogni user
  10.     followers = [lista[i][1][0::2] for i in range(len(lista))]
  11.     # creo un dizionario che associa ad ogni user la lista dei suoi followers usando prima zip che combina due iteratori(in questo caso liste)
  12.     return dict(zip(users, followers))
  13.  
  14. def dict_beauty(lista):
  15.     """
  16.    funzione che crea un dizionario che associa ad ogni follower il prodotto di numero psot e mi paice
  17.    :param lista: la lista concatenata in input
  18.    :return: dizionario
  19.    """
  20.     # creo una lista dei followers
  21.     new_followers = [x for i in range(len(lista)) for x in lista[i][1][::2]]
  22.     # creo una lista in cui ogni elemento è un prodotto tra i mi piace il numero di post(belelzza di Giuseppe) di un follower
  23.     new_beauty = [x[0] * x[1] for i in range(len(lista)) for x in lista[i][1][1::2]]
  24.     # creo un secondo dizionario che associa ad ogni follower la sua bellezza di Giuseppe
  25.     return dict(zip(new_followers, new_beauty))
  26.  
  27. def find_paths(dict_tree, d):
  28.     """
  29.    funzione che crea tutti i possibili percorsi nell'albero(dizionario) di distanza d
  30.    che partono dalla radice dell'albero
  31.    :param dict_tree:il dizionario che funge da albero prodotto dalla funzione dict_tree
  32.    :param d: la distanza massima tra il nodo che funge da radice
  33.    :return:una lista dei percorsi possibili che partono
  34.    """
  35.     paths = []
  36.     def search(node, path, length):
  37.         if length == d or (dict_tree.get(node, []) == [] and length < d):
  38.             paths.append(path)
  39.         for child in dict_tree.get(node, []):
  40.             search(child, path + [child], length + 1)
  41.     search(list(dict_tree.keys())[0], [list(dict_tree.keys())[0]], 0)
  42.     return paths
  43.  
  44.  
  45. def beauty(dict_tree, d):
  46.     """
  47.    funzione che calcola la bellezza secondo Sara(somma delle consonanti dei nomi dei followers per ogni percorso possibile)
  48.    :param dict_tree: dizionario che funge da albero dei followers prodotto dalla funzione dict_tree
  49.    :param d:distanza massima dalla radice
  50.    :return:il valore di belelzza secondo Sara
  51.    """
  52.     beauties = []
  53.     # ciclo su tutti i paths di lunghezza
  54.     for x in find_paths(dict_tree, d):
  55.         somma = 0
  56.         for s in x[1:]:
  57.             # faccio la somma di tutti le consonanti presenti nel nome del follower
  58.             count = sum(1 for char in s if char not in 'aeiou')
  59.             somma += count
  60.         beauties.append(somma)
  61.     return max(beauties)
  62.  
  63.  
  64. def Giuseppe_beauty(dict_tree, dict_beauties, d):
  65.     """
  66.    funzione che calcola la bellezza secondo Giuseppe
  67.    :param dict_tree: dizionario che funge da albero dei followers prodotto dalla funzione dict_tree
  68.    :param dict_beauties: dizionario che associa ad ogni follower il prodotto di mi piace e post prodotto dalla funzione dict_beauty
  69.    :param d:distanza massima dalla radice
  70.    :return:la bellezza secondo Giuseppe
  71.    """
  72.     new_beauties = []
  73.     for x in find_paths(dict_tree, d):
  74.         somma = 0
  75.         for s in x[1:]:
  76.             somma += dict_beauties[s]
  77.         new_beauties.append(somma)
  78.     return max(new_beauties)
  79.  
  80.  
  81.  
  82.  
  83. # Lista di esempio
  84. l=[
  85.     ['Sara', ['Davide', [10, 200], 'Michele', [24, 350], 'Nicholas', [120, 4000]]],
  86.      ['Davide', ['Luca', [1, 100], 'Aurora', [10, 300]]],
  87.      ['Nicholas', ['Vimal', [10, 400]]]
  88.    ]
  89.  
  90. print(dict_tree(l))
  91. print(beauty(dict_tree(l),2))
  92. print(Giuseppe_beauty(dict_tree(l),dict_beauty(l),2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement