crsandu

Untitled

Feb 25th, 2021
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import numpy as np
  3. from collections import defaultdict
  4.  
  5. class Car(object):
  6. def __init__(self, path, data):
  7. self.__path = path
  8. self.__data = data
  9.  
  10. def getCurrentSem(self):
  11. """
  12. name, intersection
  13. """
  14. if len(self.__path) == 1:
  15. return None
  16. else:
  17. currentStr, nextStr = self.__path[0:2]
  18. for street, inter, _ in self.__data[currentStr]:
  19. if street == nextStr:
  20. return (currentStr, inter)
  21.  
  22. def getCurrentStreet(self):
  23. return self.__path[0]
  24.  
  25. def getNextStreet(self):
  26. return self.__path[1]
  27.  
  28. def moveCar(self):
  29. self.__path = self.__path[1:]
  30.  
  31. def canElimitate(self):
  32. if len(self.__path) == 0:
  33. return True
  34. return False
  35.  
  36. class Intersection(object):
  37. def __init__(self, data):
  38. self.__data = data
  39.  
  40. def lastStreetGreen(self):
  41. for street, status in self.__data:
  42. if status == True:
  43. return street
  44. return None
  45.  
  46. def makeGreen(self, name):
  47. for i in range(len(self.__data)):
  48. street, status = self.__data[i]
  49. if status == True:
  50. self.__data[i][1] = False
  51. if street == name:
  52. self.__data[i][1] = True
  53.  
  54. class Data(object):
  55.  
  56. def __init__(self, fileName = 'data.in'):
  57. content = open(fileName, 'r').read()
  58. self.__parseData(content)
  59.  
  60.  
  61. def __parseData(self, content) -> object:
  62. """
  63. Parsarea pentru valorile de input. Ca sigur trebuie facute ceva siruri, etc.
  64. """
  65. content = content.split('\n')
  66. self.duration, self.__numberIntersection, self.__numberStreets, self.__numberCars, self.__bonusPoints = map(int, content[0].split(' '))
  67. content = content[1:]
  68.  
  69. self.__mapIntEnter = defaultdict(lambda: [])
  70. self.__mapIntLeave = defaultdict(lambda: [])
  71. self.mapAdiacent = defaultdict(lambda: [])
  72. self.__streetTime = {}
  73. for street in content[:self.__numberStreets]:
  74. street = street.split(' ')
  75. intStart, intFinish, name, time = int(street[0]), int(street[1]), str(street[2]), int(street[3])
  76. self.__mapIntLeave[intStart].append((name, time, intStart))
  77. self.__mapIntEnter[intFinish].append((name, time, intFinish))
  78. self.__streetTime[name] = time
  79.  
  80. # create intersection list
  81. self.interSectionList = []
  82. for i in range(len(self.__mapIntEnter)):
  83. intValue = list(map(lambda x: (x[0], False), self.__mapIntEnter[i]))
  84. self.interSectionList.append(Intersection(intValue))
  85.  
  86. for k in self.__mapIntEnter.keys():
  87. for kName, _, intLeave in self.__mapIntEnter[k]:
  88. for vLeave in self.__mapIntLeave[intLeave]:
  89. vName, _, _ = vLeave
  90. # numele strazii, intersectia in care intra, status
  91. self.mapAdiacent[kName].append((vName, intLeave, False))
  92. content = content[self.__numberStreets:]
  93.  
  94. self.carList = []
  95. for car in content[:self.__numberCars]:
  96. print(list(map(str, car.split(' ')[1:])))
  97. car = Car(list(map(str, car.split(' ')[1:])), self.mapAdiacent)
  98. self.carList.append(car)
  99.  
  100. def flushInFile(self, fileOutput = 'data.out') -> None:
  101. with open(fileOutput, 'w') as ofile:
  102. ofile.write(len(self.__schedules))
  103. for key, value in self.__schedules.items():
  104. ofile.write(key)
  105. ofile.write(len(value))
  106. for tup in value:
  107. ofile.write(tup[0], tup[1])
  108.  
Advertisement
Add Comment
Please, Sign In to add comment