Advertisement
Guest User

cotaMaxima

a guest
Jun 20th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.97 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: latin-1 -*-
  3. import unicodedata
  4. import datetime
  5. from HorariosDIsponibles import *
  6. from SeleccionadorJuegos import *
  7. from dateutil import parser
  8. from colorama import Fore, init
  9. import time
  10.  
  11. init()
  12. import csv
  13. import random
  14.  
  15. print(Fore.GREEN + "Iniciando")
  16.  
  17.  
  18. class TimeSlot:
  19. minuto = -1
  20. duracion = -1
  21.  
  22. def __init__(self, minuto, duracion):
  23. self.minuto = minuto
  24. if duracion==0:
  25. self.duracion = 1
  26. else:
  27. self.duracion = duracion
  28. def __str__(self):
  29. return str(self.minuto) + ":" + str(self.duracion)
  30.  
  31. def __unicode__(self):
  32. return str(self.minuto) + ":" + str(self.duracion)
  33.  
  34. def __repr__(self):
  35. return str(self.minuto) + ":" + str(self.duracion)
  36.  
  37. def __lt__(self, other):
  38. return self.duracion < other.duracion
  39.  
  40.  
  41. def AnalizoArchivo():
  42. fileEntrada = open('disney.csv', 'r')
  43.  
  44. juego = ''
  45. i = 0
  46. j = 0
  47. magia = ''
  48. tiempo_por_juego = {}
  49. # Inicializacion tiempos por juego
  50. for line_number, line in enumerate(fileEntrada):
  51. if (line_number == 0):
  52. continue
  53.  
  54. line = line.replace('Z\r\n', '')
  55. arrayArch = line.split(',')
  56. if ((juego != arrayArch[1]) or (j == 22 and i == 746)): # si es encabezado o la linea final
  57. # print i
  58. i = 0
  59.  
  60. if (j != 0):
  61. # print(magia)
  62. # print("asd")
  63.  
  64. slots = []
  65. for key, value in enumerate(map(int, magia.split(','))):
  66. timeSlot = TimeSlot(key, int(value))
  67. slots.append(timeSlot)
  68.  
  69. tiempo_por_juego['Juego' + str(j)] = slots
  70. magia = ''
  71. juego = arrayArch[1]
  72. # print(juego)
  73. j = j + 1
  74. else:
  75. i = i + 1
  76. juego = arrayArch[1]
  77.  
  78. if (magia == ''):
  79. magia = arrayArch[2]
  80. else:
  81. magia = magia + ',' + arrayArch[2]
  82.  
  83. slots = []
  84. for key, value in enumerate(map(int, magia.split(','))):
  85. timeSlot = TimeSlot(key, int(value))
  86. slots.append(timeSlot)
  87.  
  88. tiempo_por_juego['Juego' + str(j)] = slots
  89. array_pizza = []
  90. slots = []
  91. for j in range(0, 746 - 1):
  92. if (j < 46):
  93. timeSlot = TimeSlot(j, 40)
  94. slots.append(timeSlot)
  95. else:
  96. timeSlot = TimeSlot(j, 400000)
  97. slots.append(timeSlot)
  98. # if(j<):
  99. # else:
  100. # array_pizza(j)=0
  101. tiempo_por_juego['Juego23'] = slots
  102. fileEntrada.close()
  103.  
  104. return tiempo_por_juego
  105.  
  106.  
  107. def SeteoPuntajes():
  108. puntaje_juegos = {}
  109. puntaje_juegos['Juego1'] = 1
  110. puntaje_juegos['Juego2'] = 4
  111. puntaje_juegos['Juego3'] = 6
  112. puntaje_juegos['Juego4'] = 6
  113. puntaje_juegos['Juego5'] = 0
  114. puntaje_juegos['Juego6'] = 3
  115. puntaje_juegos['Juego7'] = 5
  116. puntaje_juegos['Juego8'] = 2
  117. puntaje_juegos['Juego9'] = 2
  118. puntaje_juegos['Juego10'] = 4
  119. puntaje_juegos['Juego11'] = 4
  120. puntaje_juegos['Juego12'] = 1
  121. puntaje_juegos['Juego13'] = 6
  122. puntaje_juegos['Juego14'] = 0
  123. puntaje_juegos['Juego15'] = 7
  124. puntaje_juegos['Juego16'] = 10
  125. puntaje_juegos['Juego17'] = 9
  126. puntaje_juegos['Juego18'] = 3
  127. puntaje_juegos['Juego19'] = 2
  128. puntaje_juegos['Juego20'] = 1
  129. puntaje_juegos['Juego21'] = 2
  130. puntaje_juegos['Juego22'] = 2
  131. puntaje_juegos['Juego23'] = 0
  132. return puntaje_juegos
  133.  
  134.  
  135. def MinutosDelJuegoConMenorWaittime(duraciones):
  136. min_duracion = 200
  137. resultado = []
  138. for dato in duraciones:
  139. if (dato.duracion < min_duracion):
  140. resultado = [dato.minuto]
  141. min_duracion = dato.duracion
  142. elif (dato.duracion == min_duracion):
  143. resultado.append(dato.minuto)
  144. return resultado
  145.  
  146.  
  147. def main():
  148. duraciones_juegos = AnalizoArchivo()
  149. horarios_disponibles = HorariosDIsponibles(1000)
  150. # inicializacion indispensables
  151. indispensables = [1, 3, 4, 7, 9, 13, 15, 16, 21, 22]
  152. puntaje_juegos = SeteoPuntajes()
  153. minutos_totales=745
  154. minutos_usados= 40
  155. puntaje=0
  156. for juego in sorted(indispensables, key=lambda k: random.random()):
  157. sigo_buscando = True
  158. nombre_juego = 'Juego' + str(juego)
  159.  
  160. time_slots_juego_actual = duraciones_juegos[nombre_juego]
  161. minutos_minimos = MinutosDelJuegoConMenorWaittime(time_slots_juego_actual)
  162. """
  163. print minutos_minimos
  164. """
  165. min = minutos_minimos.pop(0)
  166. minutos_usados+= duraciones_juegos[nombre_juego][min].duracion # Agarro alguno que es minimo podria ser random
  167. puntaje+= puntaje_juegos[nombre_juego]
  168.  
  169. # maxValorT
  170. dic_juegos= duraciones_juegos
  171. minutos= horarios_disponibles
  172. mejoresValores={}
  173. mejoresJuegos={}
  174. puntajes=puntaje_juegos
  175.  
  176.  
  177.  
  178. for min in minutos.MinutosLibres():
  179. mejoresValores[min] = 0
  180. mejoresJuegos[min] = []
  181.  
  182. for juego in dic_juegos.keys():
  183. for min in minutos.MinutosLibres():
  184. valor = float(puntajes[juego]) / float(dic_juegos[juego][min].duracion)
  185. if valor >= mejoresValores[min]:
  186. mejoresValores[min] = valor
  187. mejoresJuegos[min] = [juego, dic_juegos[juego][min].duracion]
  188.  
  189. minutos_libres = minutos.MinutosLibres()
  190.  
  191. sigo_buscando=True
  192. while (len(mejoresValores) != 0 and sigo_buscando):
  193. for min in minutos_libres:
  194.  
  195. if (min in mejoresValores.keys() and max(mejoresValores.values()) == mejoresValores[
  196. min]):
  197. valor= mejoresValores[min]
  198. puntaje+= valor* mejoresJuegos[min][1]
  199. minutos_usados+= mejoresJuegos[min][1]
  200. if (minutos_usados>= minutos_totales):
  201. sigo_buscando=False
  202. mejoresValores.pop(min)
  203.  
  204. print ()
  205. # puntaje += maxValor*(minutos_totales-minutos_usados)
  206.  
  207. print puntaje
  208.  
  209.  
  210.  
  211. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement