ramsess90

zad 4 - Arena Tier - 11 august

Feb 25th, 2019
758
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.37 KB | None | 0 0
  1. class Technique:
  2.     def __init__(self, name, points):
  3.         self.name = name
  4.         self.points = points
  5.  
  6.  
  7. class Gladiator:
  8.     def __init__(self, name):
  9.         self.name = name
  10.         self.technique_list = []
  11.         self.total_points = 0
  12.  
  13.     def add_technique(self, name, points):
  14.         points = int(points)
  15.         founded_index = find_return_index(name, self.technique_list)
  16.         if founded_index == -1:
  17.             self.total_points += points
  18.             self.technique_list.append(Technique(name, points))
  19.  
  20.     def __str__(self):
  21.         this_list = [f'{self.name}: {self.total_points} skill']
  22.         self.technique_list = sorted(self.technique_list, key=lambda k: (-k.points, k.name))
  23.         for teh in self.technique_list:
  24.             this_list.append(f"- {teh.name} <!> {teh.points}")
  25.         return '\n'.join(this_list)
  26.  
  27.     def remove_technique(self, name):
  28.         founded_index = find_return_index(name, self.technique_list)
  29.         self.total_points -= self.technique_list[founded_index].points
  30.         del self.technique_list[founded_index]
  31.  
  32.  
  33. def find_return_index(name, this_list):
  34.     founded_index = -1
  35.     for i in range(len(this_list)):
  36.         if this_list[i].name == name:
  37.             founded_index = i
  38.     return founded_index
  39.  
  40.  
  41. def find_return_object(name):
  42.     founded_index = find_return_index(name, data_base)
  43.     if not founded_index == -1:
  44.         return data_base[founded_index]
  45.     return -1
  46.  
  47.  
  48. data_base = []
  49. while True:
  50.     old_data = input()
  51.     data = old_data.split()
  52.     if data[1] == '->':
  53.         data.remove('->')
  54.         data.remove('->')
  55.     else:
  56.         data = old_data
  57.         break
  58.  
  59.     gladiator_index = find_return_index(data[0], data_base)
  60.     if gladiator_index == -1:
  61.         one_gladiator = Gladiator(data[0])
  62.         one_gladiator.add_technique(data[1], data[2])
  63.         data_base.append(one_gladiator)
  64.     else:
  65.         data_base[gladiator_index].add_technique(data[1], data[2])
  66.     data_base = sorted(data_base, key=lambda x: x.total_points, reverse=True)
  67.  
  68. while True:
  69.     if data == 'Ave Cesar':
  70.         break
  71.     data = data.split()
  72.     del data[1]
  73.     founded_index_1 = find_return_index(data[0], data_base)
  74.     founded_index_2 = find_return_index(data[1], data_base)
  75.  
  76.     if founded_index_1 == -1 or founded_index_2 == -1:
  77.         data = input()
  78.         continue
  79.  
  80.     for teh_1 in data_base[founded_index_1].technique_list:
  81.         for teh_2 in data_base[founded_index_2].technique_list:
  82.             if teh_1.name == teh_2.name and teh_1.points > teh_2.points:
  83.                 data_base[founded_index_2].remove_technique(teh_2.name)
  84.  
  85.             elif teh_1.name == teh_2.name and teh_1.points < teh_2.points:
  86.                 data_base[founded_index_1].remove_technique(teh_1.name)
  87.  
  88.     for teh_1 in data_base[founded_index_1].technique_list:
  89.         for teh_2 in data_base[founded_index_1].technique_list:
  90.             if teh_1.name == teh_2.name and teh_1.points > teh_2.points:
  91.                 data_base[founded_index_2].remove_technique(teh_2.name)
  92.             elif teh_1.name == teh_2.name and teh_1.points < teh_2.points:
  93.                 data_base[founded_index_1].remove_technique(teh_1.name)
  94.  
  95.     data = input()
  96.  
  97. data_base = list(filter(lambda x: x.total_points > 0, data_base))
  98. for gladiator in data_base:
  99.     if gladiator.total_points != 0:
  100.         print(gladiator)
Advertisement
Add Comment
Please, Sign In to add comment