Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: latin-1 -*-
- import unicodedata
- import datetime
- from HorariosDIsponibles import *
- from SeleccionadorJuegos import *
- from dateutil import parser
- from colorama import Fore, init
- import time
- init()
- import csv
- import random
- print(Fore.GREEN + "Iniciando")
- class TimeSlot:
- minuto = -1
- duracion = -1
- def __init__(self, minuto, duracion):
- self.minuto = minuto
- if duracion==0:
- self.duracion = 1
- else:
- self.duracion = duracion
- def __str__(self):
- return str(self.minuto) + ":" + str(self.duracion)
- def __unicode__(self):
- return str(self.minuto) + ":" + str(self.duracion)
- def __repr__(self):
- return str(self.minuto) + ":" + str(self.duracion)
- def __lt__(self, other):
- return self.duracion < other.duracion
- def AnalizoArchivo():
- fileEntrada = open('disney.csv', 'r')
- juego = ''
- i = 0
- j = 0
- magia = ''
- tiempo_por_juego = {}
- # Inicializacion tiempos por juego
- for line_number, line in enumerate(fileEntrada):
- if (line_number == 0):
- continue
- line = line.replace('Z\r\n', '')
- arrayArch = line.split(',')
- if ((juego != arrayArch[1]) or (j == 22 and i == 746)): # si es encabezado o la linea final
- # print i
- i = 0
- if (j != 0):
- # print(magia)
- # print("asd")
- slots = []
- for key, value in enumerate(map(int, magia.split(','))):
- timeSlot = TimeSlot(key, int(value))
- slots.append(timeSlot)
- tiempo_por_juego['Juego' + str(j)] = slots
- magia = ''
- juego = arrayArch[1]
- # print(juego)
- j = j + 1
- else:
- i = i + 1
- juego = arrayArch[1]
- if (magia == ''):
- magia = arrayArch[2]
- else:
- magia = magia + ',' + arrayArch[2]
- slots = []
- for key, value in enumerate(map(int, magia.split(','))):
- timeSlot = TimeSlot(key, int(value))
- slots.append(timeSlot)
- tiempo_por_juego['Juego' + str(j)] = slots
- array_pizza = []
- slots = []
- for j in range(0, 746 - 1):
- if (j < 46):
- timeSlot = TimeSlot(j, 40)
- slots.append(timeSlot)
- else:
- timeSlot = TimeSlot(j, 400000)
- slots.append(timeSlot)
- # if(j<):
- # else:
- # array_pizza(j)=0
- tiempo_por_juego['Juego23'] = slots
- fileEntrada.close()
- return tiempo_por_juego
- def SeteoPuntajes():
- puntaje_juegos = {}
- puntaje_juegos['Juego1'] = 1
- puntaje_juegos['Juego2'] = 4
- puntaje_juegos['Juego3'] = 6
- puntaje_juegos['Juego4'] = 6
- puntaje_juegos['Juego5'] = 0
- puntaje_juegos['Juego6'] = 3
- puntaje_juegos['Juego7'] = 5
- puntaje_juegos['Juego8'] = 2
- puntaje_juegos['Juego9'] = 2
- puntaje_juegos['Juego10'] = 4
- puntaje_juegos['Juego11'] = 4
- puntaje_juegos['Juego12'] = 1
- puntaje_juegos['Juego13'] = 6
- puntaje_juegos['Juego14'] = 0
- puntaje_juegos['Juego15'] = 7
- puntaje_juegos['Juego16'] = 10
- puntaje_juegos['Juego17'] = 9
- puntaje_juegos['Juego18'] = 3
- puntaje_juegos['Juego19'] = 2
- puntaje_juegos['Juego20'] = 1
- puntaje_juegos['Juego21'] = 2
- puntaje_juegos['Juego22'] = 2
- puntaje_juegos['Juego23'] = 0
- return puntaje_juegos
- def MinutosDelJuegoConMenorWaittime(duraciones):
- min_duracion = 200
- resultado = []
- for dato in duraciones:
- if (dato.duracion < min_duracion):
- resultado = [dato.minuto]
- min_duracion = dato.duracion
- elif (dato.duracion == min_duracion):
- resultado.append(dato.minuto)
- return resultado
- def main():
- duraciones_juegos = AnalizoArchivo()
- horarios_disponibles = HorariosDIsponibles(1000)
- # inicializacion indispensables
- indispensables = [1, 3, 4, 7, 9, 13, 15, 16, 21, 22]
- puntaje_juegos = SeteoPuntajes()
- minutos_totales=745
- minutos_usados= 40
- puntaje=0
- for juego in sorted(indispensables, key=lambda k: random.random()):
- sigo_buscando = True
- nombre_juego = 'Juego' + str(juego)
- time_slots_juego_actual = duraciones_juegos[nombre_juego]
- minutos_minimos = MinutosDelJuegoConMenorWaittime(time_slots_juego_actual)
- """
- print minutos_minimos
- """
- min = minutos_minimos.pop(0)
- minutos_usados+= duraciones_juegos[nombre_juego][min].duracion # Agarro alguno que es minimo podria ser random
- puntaje+= puntaje_juegos[nombre_juego]
- # maxValorT
- dic_juegos= duraciones_juegos
- minutos= horarios_disponibles
- mejoresValores={}
- mejoresJuegos={}
- puntajes=puntaje_juegos
- for min in minutos.MinutosLibres():
- mejoresValores[min] = 0
- mejoresJuegos[min] = []
- for juego in dic_juegos.keys():
- for min in minutos.MinutosLibres():
- valor = float(puntajes[juego]) / float(dic_juegos[juego][min].duracion)
- if valor >= mejoresValores[min]:
- mejoresValores[min] = valor
- mejoresJuegos[min] = [juego, dic_juegos[juego][min].duracion]
- minutos_libres = minutos.MinutosLibres()
- sigo_buscando=True
- while (len(mejoresValores) != 0 and sigo_buscando):
- for min in minutos_libres:
- if (min in mejoresValores.keys() and max(mejoresValores.values()) == mejoresValores[
- min]):
- valor= mejoresValores[min]
- puntaje+= valor* mejoresJuegos[min][1]
- minutos_usados+= mejoresJuegos[min][1]
- if (minutos_usados>= minutos_totales):
- sigo_buscando=False
- mejoresValores.pop(min)
- print ()
- # puntaje += maxValor*(minutos_totales-minutos_usados)
- print puntaje
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement