Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.31 KB | None | 0 0
  1. from random import randint
  2.  
  3. class Singleton :
  4.   Instance = None
  5.   __isInstanced = False
  6.  
  7.   def __init__(self) :
  8.     if Singleton.__isInstanced :
  9.       raise Exception("Instance already exists")
  10.  
  11.     Singleton.Instance = self
  12.     Singleton.__isInstanced = True
  13.  
  14.   def __del__(self) :
  15.     Singleton.Instance = None
  16.     Singleton.__isInstanced = False
  17.  
  18. class Math :
  19.   def clamp(num, min_value, max_value):
  20.     return max(min(num, max_value), min_value)
  21.  
  22.  
  23.  
  24. class Car :
  25.   def __init__(self, name, max_speed, drag_coef, time_to_max) :
  26.     self.name = name
  27.     self.max_speed = max(0, max_speed)
  28.     self.drag_coef = Math.clamp(drag_coef, float(0), float(1))
  29.     self.time_to_max = max(0, time_to_max)
  30.  
  31.  
  32.   def printInfo(self) :
  33.     print("Name : " + self.name, end = ", ")
  34.     print("Max Speed : " + str(self.max_speed), end = ", ")
  35.     print("Drag Coef : " + str(self.drag_coef), end = ", ")
  36.     print("Time To Max : " + str(self.time_to_max))
  37.  
  38. class Weather :
  39.  
  40.   def __init__(self, wind_speed) :
  41.     self.wind_speed = max(0, wind_speed)
  42.  
  43. class Competition (Singleton) :
  44.  
  45.   def __init__(self, distance, weather) :
  46.     super().__init__()
  47.     self.updateData(distance, weather)
  48.  
  49.   def updateData(self, distance, weather) :
  50.     self.distance = distance
  51.     self.weather = weather
  52.  
  53.   def start(self, *competitors) :
  54.     for car in competitors:
  55.      
  56.         competitor_time = 0
  57.         competitor_speed = 0
  58.  
  59.         for distance in range(self.distance):
  60.             _wind_speed = randint(0, self.weather.wind_speed)
  61.  
  62.             if competitor_time == 0 :
  63.                 competitor_speed = 1
  64.             else :
  65.                 competitor_speed = (competitor_time / car.time_to_max) * car.max_speed
  66.                 if competitor_speed > self.weather.wind_speed:
  67.                     competitor_speed -= (car.drag_coef * _wind_speed)
  68.  
  69.             competitor_time += float(1) / competitor_speed
  70.  
  71.         print("Car <%s> result: %f" % (car.name, competitor_time))
  72.  
  73.   def __del__(self) :
  74.     super().__del__()
  75.  
  76. ferrary = Car('ferrary', 340, 0.324,26)
  77. bugatti = Car('bugatti', 407, 0.39, 32)
  78. toyota = Car('toyota', 180, 0.25, 40)
  79. lada = Car('lada', 180, 0.32, 56)
  80. sx4 = Car('sx4', 180, 0.33, 44)
  81.  
  82. weather = Weather(20)
  83. comp = Competition(10000, weather)
  84.  
  85. comp.start(ferrary, bugatti, toyota, lada, sx4)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement