def index(self): miGenerador = Generador() pagina = "" template = Template() pagina = template.TEMPLATE.replace("[1]", miGenerador.generarTab("Destroyer")) pagina = pagina.replace("[2]", miGenerador.generarTitulo("h1", "Game Score")) pagina = pagina.replace("[3]", miGenerador.generarTabla()) return pagina
def main(): try: parser = argparse.ArgumentParser() parser.add_argument("min", help="Longitud mínima de combinaciones", type=enteroValido) parser.add_argument("max", help="Longitud máxima de combinaciones", type=enteroValido) parser.add_argument("-p", "--palabras", required=True, help="Lista de cadenas de entrada", type=lambda x: archivoValido(parser, x)) parser.add_argument("-d", "--destino", help="Directorio del diccionario generado", default="diccionario.txt") args = parser.parse_args() if args.min > args.max: raise argparse.ArgumentTypeError( "valor mínimo %i y máximo %i no válidos" % (args.min, args.max)) generador = Generador(args.palabras) print("Datos cargados del fichero: " + args.palabras) numeroCombinaciones = generador.calcularNumeroCombinaciones( args.min, args.max) print("Número de combinaciones: " + str(numeroCombinaciones) + "\n") generador.generarDiccionario(args.min, args.max, args.destino) print("Diccionario generado: " + args.destino) except argparse.ArgumentTypeError as ate: print(ate) except Exception as e: print(e)
def __init__(self, rutaVector, semilla): self.rutaVector = rutaVector self.imagenPIL = None self.tipo = None self.modo = None self.pixelesVector = None self.formatosSoportados = ["PNG", "TIFF", "TIF", "BMP", "ICO"] self.modosSoportados = ["L", "RGB", "RGBA"] self.utilidad = Utilidad() self.__semilla = semilla self.__generador = Generador(self.__semilla) self.__analizarImagen() self._ruido = False
def __init__(self): """ Constructora per defecte """ self.generador = Generador() self.area_espera1 = 0 self.area_espera2 = 0 self.area_espera3 = 0 self.agrupador1 = Agrupador(1) self.traza.append(self.agrupador1.presentacio()) self.agrupador2 = Agrupador(2) self.traza.append(self.agrupador2.presentacio()) self.agrupador3 = Agrupador(3) self.traza.append(self.agrupador3.presentacio()) self.traza.append("") self.esdevenimentsPendents = [] self.currentTime = 0 self.cnt_capses = [0, 0, 0] self.mitjana_temps_omplir_capsa = [0.0, 0.0, 0.0] self.temps_inici_capsa = [0, 0, 0] self.inicialitzaLlistaEsdeveniments()
def main(): # Intervalo de tiempo en el que vamos a medir tiempo_inicial = datetime.datetime(2016, 3, 5, 1) tiempo_final = datetime.datetime(2016, 3, 5, 10) import math # parametros del generador de senales amplitud = 0.2 fase = 1 frecuencia = 20 * math.pi #Construir un nuevo genrador de senales Gen = Generador(amplitud, fase, frecuencia) #Construir un detector detector = Detector() #construir un nuevo radar radar = Radar(Gen, detector) # parametros para un blanco amplitud_de_frecuencia_del_blanco = amplitud + 100 tiempo_inicial_b = datetime.datetime(2016, 3, 5, 2) tiempo_final_b = datetime.datetime(2016, 3, 5, 6) # Construir un nuevo blanco blanco = Blanco(amplitud_de_frecuencia_del_blanco, tiempo_inicial_b, tiempo_final_b) lista_blancos = [blanco] #Construir un medio medio = Medio(lista_blancos) #Hago funcionar el radar radar.detectar(medio, tiempo_inicial, tiempo_final) radar.graficar(medio, tiempo_inicial, tiempo_final)
class goodAndDevil(object): @cherrypy.expose def index(self): html = ''' <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <title>G&D</title> <link href="static/css/bootstrap.min.css" rel="stylesheet"> <link href="static/css/stylish-portfolio.css" rel="stylesheet"> <link href="static/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css"> </head> <body> <a id="menu-toggle" href="#" class="btn btn-dark btn-lg toggle"><i class="fa fa-bars"></i></a> <nav id="sidebar-wrapper"> <ul class="sidebar-nav"> <a id="menu-close" href="#" class="btn btn-light btn-lg pull-right toggle"><i class="fa fa-times"></i></a> <li class="sidebar-brand"> <a href="#top" onclick=$("#menu-close").click();>Good and Devil</a> </li> <li> <a href="#top" onclick=$("#menu-close").click();>Home</a> </li> </ul> </nav> <!-- Header --> <header id="top" class="header"> <div class="text-vertical-center"> <h1>GOOD & DEVIL</h1> <!-- <h3>A Game for known your Real Personality</h3> --> <br> <a href="#about" class="btn btn-dark btn-lg">Coming soon</a> </div> </header> ''' html1 = """<!-- About --> <section id="about" class="about"> <div class="container"> <div class="row"> <div class="col-lg-12 text-center"> <h2>Stylish Portfolio is the perfect theme for your next project!</h2> <p class="lead">This theme features some wonderful photography courtesy of <a target="_blank" href="http://join.deathtothestockphoto.com/">Death to the Stock Photo</a>.</p> </div> </div> <!-- /.row --> </div> <!-- /.container --> </section> <!-- jQuery --> <script src="static/js/jquery.js"></script> <!-- Bootstrap Core JavaScript --> <script src="static/js/bootstrap.min.js"></script> <!-- Custom Theme JavaScript --> <script> // Closes the sidebar menu $("#menu-close").click(function(e) { e.preventDefault(); $("#sidebar-wrapper").toggleClass("active"); }); // Opens the sidebar menu $("#menu-toggle").click(function(e) { e.preventDefault(); $("#sidebar-wrapper").toggleClass("active"); }); // Scrolls to the selected menu item on the page $(function() { $('a[href*=#]:not([href=#],[data-toggle],[data-target],[data-slide])').click(function() { if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') || location.hostname == this.hostname) { var target = $(this.hash); target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); if (target.length) { $('html,body').animate({ scrollTop: target.offset().top }, 1000); return false; } } }); }); //#to-top button appears after scrolling var fixed = false; $(document).scroll(function() { if ($(this).scrollTop() > 250) { if (!fixed) { fixed = true; // $('#to-top').css({position:'fixed', display:'block'}); $('#to-top').show("slow", function() { $('#to-top').css({ position: 'fixed', display: 'block' }); }); } } else { if (fixed) { fixed = false; $('#to-top').hide("slow", function() { $('#to-top').css({ display: 'none' }); }); } } }); // Disable Google Maps scrolling // See http://stackoverflow.com/a/25904582/1607849 // Disable scroll zooming and bind back the click event var onMapMouseleaveHandler = function(event) { var that = $(this); that.on('click', onMapClickHandler); that.off('mouseleave', onMapMouseleaveHandler); that.find('iframe').css("pointer-events", "none"); } var onMapClickHandler = function(event) { var that = $(this); // Disable the click handler until the user leaves the map area that.off('click', onMapClickHandler); // Enable scrolling zoom that.find('iframe').css("pointer-events", "auto"); // Handle the mouse leave event that.on('mouseleave', onMapMouseleaveHandler); } // Enable map zooming with mouse scroll when the user clicks the map $('.map').on('click', onMapClickHandler); </script> </body> </html> """ miGenerador = Generador()
reglas, baseConocimiento, conclucion = parametros while (not comp(conclucion, baseConocimiento)): skip = False for regla in reglas: if comp(regla.getPremisas(), baseConocimiento) and not comp(regla.getConcluciones(), baseConocimiento): print "Se aplico Regla:", (regla.getPremisas(), regla.getConcluciones()) baseConocimiento = baseConocimiento + regla.getConcluciones() skip = True if skip: break return # Se fija si la Lista 1 esta dentro de la Lista2# def comp(list1, list2): for val in list1: if val not in list2: return False return True if __name__ == "__main__": generador = Generador() print "Encadenamiento hacia Adelante" EncadenamientoHaciaAdelante([generador.GenerarReglas2(), generador.GenerarBC2(), generador.GenerarConclucion2()]) print "Encadenamiento hacia Atras" EncadenamientoHaciaAtras([generador.GenerarReglas2(), generador.GenerarBC2(), generador.GenerarConclucion2()])
class Imagen(object): def __init__(self, rutaVector, semilla): self.rutaVector = rutaVector self.imagenPIL = None self.tipo = None self.modo = None self.pixelesVector = None self.formatosSoportados = ["PNG", "TIFF", "TIF", "BMP", "ICO"] self.modosSoportados = ["L", "RGB", "RGBA"] self.utilidad = Utilidad() self.__semilla = semilla self.__generador = Generador(self.__semilla) self.__analizarImagen() self._ruido = False def establecerRuido(self, añadirRuido): self._ruido = añadirRuido def __analizarImagen(self): try: self.imagenPIL = imgPil.open(self.rutaVector) self.tipo = self.rutaVector.split(".")[-1] if self.tipo.upper() not in self.formatosSoportados: print("Error: Formato", self.tipo.upper(), "no soportado") exit(0) self.modo = "".join(self.imagenPIL.getbands()) self.numeroPixelesVector = self.imagenPIL.size[ 0] * self.imagenPIL.size[1] except Exception as e: print(e) def __calcularTamañoMaximoBytes(self, numeroPixelesVector, bitUsados, numeroCanales): bytesMaximos = (numeroPixelesVector * bitUsados * numeroCanales) // 8 return bytesMaximos def __calcularNumeroPixelesNecesarios(self, numeroBytesTotales, bitUsados, numeroCanales): pixelesNecesarios = ceil( (numeroBytesTotales * 8) / (bitUsados * numeroCanales)) return pixelesNecesarios def __determinarNumeroCanales(self, modo): if self.modo == "1": return 1 elif self.modo == "L": return 1 elif self.modo == "RGB": return 3 elif self.modo == "RGBA": return 4 else: print("Error") def __determinarExtension(self, formato): formato = formato.lower() if formato in ["jpg", "jpeg"]: return "jpeg" elif formato in ["tif", "tiff"]: return "tiff" elif formato == "png": return "png" elif formato == "bmp": return "bmp" elif formato == "ico": return "ico" def enmascarar(self, rutaSecreto): if self.modo == "1": print("Modo:", self.modo, "no es posible enmascarar") elif self.modo in self.modosSoportados: self.__enmascarar(rutaSecreto) else: print("Modo:", self.modo, "no soportado") def __enmascarar(self, rutaSecreto): print("\nRuta vector:", self.rutaVector) print("Imagen vector:", self.imagenPIL.format, self.imagenPIL.size, self.imagenPIL.mode, "\n") # Obtener el tamaño del archivo a ocultar print("Ruta archivo:", rutaSecreto) numeroBytesSecreto = getsize(rutaSecreto) print("Tamaño secreto:", numeroBytesSecreto, "Bytes") # Obtener el tamaño total de la cabecera con el archivo a ocultar numeroBytesTotalesSecreto = self.utilidad.calcularBytesTotalesSecreto( rutaSecreto) print("Tamaño secreto (con cabecera):", numeroBytesTotalesSecreto, "Bytes\n") # Obtener el numero de canales en función del modo numeroCanales = self.__determinarNumeroCanales(self.imagenPIL.mode) # Bytes máximos teoricos que se pueden enmascarar bytesMaximos = self.__calcularTamañoMaximoBytes( self.numeroPixelesVector, 1, numeroCanales) print("Tamaño límite enmascarable:", bytesMaximos, "Bytes") # Número de píxeles necesarios = numero bits del secreto / numero de bits que caben por pixel pixelesNecesarios = self.__calcularNumeroPixelesNecesarios( numeroBytesTotalesSecreto, 1, numeroCanales) print("Píxeles necesarios para enmascarar:", pixelesNecesarios, "\n") # Si la imagen vector no tiene suficientes píxeles if numeroBytesTotalesSecreto > bytesMaximos: print("Error: El archivo secreto debe ser menor de", bytesMaximos, "bytes") exit(0) # Crear los mapas de píxeles para vector print("Cargando imagen vector") pixelesVector = self.imagenPIL.load() # Cargar mapa de bits del secreto print("Cargando mapa de bits del secreto") mapaBitsSecreto = self.utilidad.leerBytes(rutaSecreto) # Crear una nueva imagen resultante y cargar su mapa de bits print("Creado imagen resultante") imagenGenerada = imgPil.new( self.imagenPIL.mode, (self.imagenPIL.size[0], self.imagenPIL.size[1]), "black") print("Cargando imagen resultante\n") pixelesGenerada = imagenGenerada.load() # Posiciones de píxeles aleatorias posiciones = self.__generador.generarListaPosicionesAleatorias( self.numeroPixelesVector) # print("Posiciones aleatorias imagen vector =", len(posiciones)) print("Semilla:", self.__semilla) print("Generando", self.numeroPixelesVector, "posiciones aleatorias") # Lista de posicones modificadas y sin modificar posicionesMezclado = posiciones[:pixelesNecesarios] posicionesRuido = posiciones[pixelesNecesarios:] # Mezclado y ruido píxeles print("Modificando píxeles") if self._ruido: print("Añadiendo ruido") self.__modificarPixeles( (mapaBitsSecreto, posicionesMezclado, posicionesRuido, pixelesVector, pixelesGenerada)) # Guardamos la imagen resultante nombreArchivo = basename(self.rutaVector) nom, _ = splitext(nombreArchivo) nombre = nom + "_vector." + self.__determinarExtension( self.imagenPIL.format) # Guardamos la imagen imagenGenerada.save(nombre, format=self.imagenPIL.format, mode=self.imagenPIL.mode, compress_level=9) print("\nImagen resultante:", nombre, "\n") def __modificarPixeles(self, argumentos): if self.modo == "L": self.__modificarPixelesL(*argumentos) elif self.modo == "RGB": self.__modificarPixelesRGB(*argumentos) elif self.modo == "RGBA": self.__modificarPixelesRGBA(*argumentos) def __modificarPixelesL(self, mapaBitsSecreto, posicionesMezclado, posicionesRuido, pixelesVector, pixelesGenerada): # Iterador sobre la cadena de bits del archivo a enmascarar flujoBits = iter(mapaBitsSecreto) # Fase de mezclado pixeles for numeroPixelSecreto in posicionesMezclado: # Transformar la posición 1D del vector aplanado a 2D iVector = numeroPixelSecreto // self.imagenPIL.size[0] jVector = numeroPixelSecreto % self.imagenPIL.size[0] # Convertimos de decimal a binario el pixel pixelVectorBinario = self.utilidad.decimalBinario( pixelesVector[jVector, iVector]) # Fusionamos el bit menos significativo l = self.utilidad.fusionarLSB(pixelVectorBinario, next(flujoBits)) # Convertimos de binario a decimal el pixel pixelMezcladoBinario = (l) pixelesGenerada[jVector, iVector] = self.utilidad.binarioDecimal( pixelMezcladoBinario) self.__generador.establecerSemilla(None) if self._ruido: # Fase adición ruido for numeroPixelVectorRestante in posicionesRuido: # Transformar la posición 1D del vector aplanado a 2D iVector = numeroPixelVectorRestante // self.imagenPIL.size[0] jVector = numeroPixelVectorRestante % self.imagenPIL.size[0] pixelVectorBinario = self.utilidad.decimalBinario( pixelesVector[jVector, iVector]) # Mezclar pixel del vector menos significativo aleatorio pixelMezcladoBinario = self.utilidad.fusionarLSB( pixelVectorBinario, self.__generador.obtenerBitAleatorio()) # Ponemos el pixel generado en la imagen resultante pixelesGenerada[jVector, iVector] = self.utilidad.binarioDecimal( pixelMezcladoBinario) else: for numeroPixelVectorRestante in posicionesRuido: # Transformar la posición 1D del vector aplanado a 2D iVector = numeroPixelVectorRestante // self.imagenPIL.size[0] jVector = numeroPixelVectorRestante % self.imagenPIL.size[0] pixelesGenerada[jVector, iVector] = pixelesVector[jVector, iVector] def __modificarPixelesRGB(self, mapaBitsSecreto, posicionesMezclado, posicionesRuido, pixelesVector, pixelesGenerada): # Iterador sobre la cadena de bits del archivo a enmascarar flujoBits = iter(mapaBitsSecreto) # Fase de mezclado pixeles for numeroPixelSecreto in posicionesMezclado: # Transformar la posición 1D del vector aplanado a 2D iVector = numeroPixelSecreto // self.imagenPIL.size[0] jVector = numeroPixelSecreto % self.imagenPIL.size[0] # Convertimos de decimal a binario los canales del pixel pixelVectorBinario = (self.utilidad.decimalBinario( pixelesVector[jVector, iVector][0]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][1]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][2])) # Fusionamos el bit menos significativo try: r = self.utilidad.fusionarLSB(pixelVectorBinario[0], next(flujoBits)) g = self.utilidad.fusionarLSB(pixelVectorBinario[1], next(flujoBits)) b = self.utilidad.fusionarLSB(pixelVectorBinario[2], next(flujoBits)) except StopIteration: b = pixelVectorBinario[2] # Convertimos de binario los canales del pixel pixelesGenerada[jVector, iVector] = ( self.utilidad.binarioDecimal(r), self.utilidad.binarioDecimal(g), self.utilidad.binarioDecimal(b), ) self.__generador.establecerSemilla(None) if self._ruido: # Fase adición ruido for numeroPixelVectorRestante in posicionesRuido: # Tranformar la posicion 1D del vector aplanado a 2D iVector = numeroPixelVectorRestante // self.imagenPIL.size[ 0] # formulas con ANCHO jVector = numeroPixelVectorRestante % self.imagenPIL.size[0] # Fase de añadido de ruido # Convertir tripleta de decimal a binario pixelVectorBinario = (self.utilidad.decimalBinario( pixelesVector[jVector, iVector][0]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][1]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][2])) # Mezclar pixel del vector menos significativo aleatorio pixelMezcladoBinario = ( self.utilidad.fusionarLSB( pixelVectorBinario[0], self.__generador.obtenerBitAleatorio()), self.utilidad.fusionarLSB( pixelVectorBinario[1], self.__generador.obtenerBitAleatorio()), self.utilidad.fusionarLSB( pixelVectorBinario[2], self.__generador.obtenerBitAleatorio())) # Ponemos el pixel generado en la imagen resultante pixelesGenerada[jVector, iVector] = ( self.utilidad.binarioDecimal(pixelMezcladoBinario[0]), self.utilidad.binarioDecimal(pixelMezcladoBinario[1]), self.utilidad.binarioDecimal(pixelMezcladoBinario[2]), ) else: for numeroPixelVectorRestante in posicionesRuido: # Transformar la posición 1D del vector aplanado a 2D iVector = numeroPixelVectorRestante // self.imagenPIL.size[0] jVector = numeroPixelVectorRestante % self.imagenPIL.size[0] pixelesGenerada[jVector, iVector] = pixelesVector[jVector, iVector] def __modificarPixelesRGBA(self, mapaBitsSecreto, posicionesMezclado, posicionesRuido, pixelesVector, pixelesGenerada): # Iterador sobre la cadena de bits del archivo a enmascarar flujoBits = iter(mapaBitsSecreto) for numeroPixelSecreto in posicionesMezclado: # Transformar la posición 1D del vector aplanado a 2D iVector = numeroPixelSecreto // self.imagenPIL.size[0] jVector = numeroPixelSecreto % self.imagenPIL.size[0] # print(pixelesVector[0, 0]) # Convertimos de decimal a binario los canales del pixel pixelVectorBinario = (self.utilidad.decimalBinario( pixelesVector[jVector, iVector][0]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][1]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][2]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][3])) # Fusionamos el bit menos significativo r = self.utilidad.fusionarLSB(pixelVectorBinario[0], next(flujoBits)) g = self.utilidad.fusionarLSB(pixelVectorBinario[1], next(flujoBits)) b = self.utilidad.fusionarLSB(pixelVectorBinario[2], next(flujoBits)) a = self.utilidad.fusionarLSB(pixelVectorBinario[3], next(flujoBits)) # Ponemos el pixel generado en la imagen resultante pixelesGenerada[jVector, iVector] = ( self.utilidad.binarioDecimal(r), self.utilidad.binarioDecimal(g), self.utilidad.binarioDecimal(b), self.utilidad.binarioDecimal(a), ) self.__generador.establecerSemilla(None) if self._ruido: # Fase adición ruido for numeroPixelVectorRestante in posicionesRuido: # Tranformar la posicion 1D del vector aplanado a 2D iVector = numeroPixelVectorRestante // self.imagenPIL.size[ 0] # formulas con ANCHO jVector = numeroPixelVectorRestante % self.imagenPIL.size[0] # Fase de añadido de ruido # Convertir tripleta de decimal a binario pixelVectorBinario = (self.utilidad.decimalBinario( pixelesVector[jVector, iVector][0]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][1]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][2]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][3])) # Mezclar pixel del vector menos significativo aleatorio pixelMezcladoBinario = ( self.utilidad.fusionarLSB( pixelVectorBinario[0], self.__generador.obtenerBitAleatorio()), self.utilidad.fusionarLSB( pixelVectorBinario[1], self.__generador.obtenerBitAleatorio()), self.utilidad.fusionarLSB( pixelVectorBinario[2], self.__generador.obtenerBitAleatorio()), self.utilidad.fusionarLSB( pixelVectorBinario[3], self.__generador.obtenerBitAleatorio())) # Ponemos el pixel generado en la imagen resultante pixelesGenerada[jVector, iVector] = (self.utilidad.binarioDecimal( pixelMezcladoBinario[0]), self.utilidad.binarioDecimal( pixelMezcladoBinario[1]), self.utilidad.binarioDecimal( pixelMezcladoBinario[2]), self.utilidad.binarioDecimal( pixelMezcladoBinario[3])) else: for numeroPixelVectorRestante in posicionesRuido: # Transformar la posición 1D del vector aplanado a 2D iVector = numeroPixelVectorRestante // self.imagenPIL.size[0] jVector = numeroPixelVectorRestante % self.imagenPIL.size[0] pixelesGenerada[jVector, iVector] = pixelesVector[jVector, iVector] def extraer(self): if self.modo == "1": print("No se puede") elif self.modo in self.modosSoportados: self.__extraer() else: print("Modo:", self.modo, "no soportado") def __extraer(self): # Cargar la imagen print("\nRuta vector:", self.rutaVector) print("Imagen vector:", self.imagenPIL.format, self.imagenPIL.size, self.imagenPIL.mode) # Crear el mapa de pixeles del vector print("Cargando imagen vector\n") pixelesVector = self.imagenPIL.load() # Posiciones de pixeles aleatorias (Generador) print("Semilla:", self.__semilla) print("Generando", self.numeroPixelesVector, "posiciones aleatorias\n") posiciones = self.__generador.generarListaPosicionesAleatorias( self.numeroPixelesVector) # Extrar bits enmascarados en la imagen vector print("Extrayendo bits") listaBits = self.__extraerBits((posiciones, pixelesVector)) # Convertir cadena de bits a cadena de bytes print("Convirtiendo a bytes") bytes = self.utilidad.convertirBytes(listaBits) print("Cabecera:", bytes[:25], "\n") # Escribir los bytes resultantes nombre = self.utilidad.escribirBytes(bytes) print("Generando archivo:", nombre, "\n") def __extraerBits(self, argumentos): if self.modo == "L": return self.__extraerBitsL(*argumentos) elif self.modo == "RGB": return self.__extraerBitsRGB(*argumentos) elif self.modo == "RGBA": return self.__extraerBitsRGBA(*argumentos) def __extraerBitsL(self, posiciones, pixelesVector): listaBits = "" for numeroPixelSecreto in posiciones: iVector = numeroPixelSecreto // self.imagenPIL.size[0] jVector = numeroPixelSecreto % self.imagenPIL.size[0] pixelVectorBinario = self.utilidad.decimalBinario( pixelesVector[jVector, iVector]) listaBits += pixelVectorBinario[-1] return listaBits def __extraerBitsRGB(self, posiciones, pixelesVector): listaBits = "" for numeroPixelSecreto in posiciones: iVector = numeroPixelSecreto // self.imagenPIL.size[0] jVector = numeroPixelSecreto % self.imagenPIL.size[0] pixelVectorBinario = (self.utilidad.decimalBinario( pixelesVector[jVector, iVector][0]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][1]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][2])) listaBits += pixelVectorBinario[0][-1] listaBits += pixelVectorBinario[1][-1] listaBits += pixelVectorBinario[2][-1] return listaBits def __extraerBitsRGBA(self, posiciones, pixelesVector): listaBits = "" for numeroPixelSecreto in posiciones: iVector = numeroPixelSecreto // self.imagenPIL.size[0] jVector = numeroPixelSecreto % self.imagenPIL.size[0] pixelVectorBinario = (self.utilidad.decimalBinario( pixelesVector[jVector, iVector][0]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][1]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][2]), self.utilidad.decimalBinario( pixelesVector[jVector, iVector][3])) listaBits += pixelVectorBinario[0][-1] listaBits += pixelVectorBinario[1][-1] listaBits += pixelVectorBinario[2][-1] listaBits += pixelVectorBinario[3][-1] return listaBits
class Motor: """ Motor de simulacio, s'encarrega de crear els primers esdeveniments que encadenaren la resta. """ # Esdeveniments no processats esdevenimentsPendents = None # Temps actual de simulacio currentTime = 0 #Elements del sistema generador = None agrupador1 = None agrupador2 = None agrupador3 = None area_espera1 = 0 area_espera2 = 0 area_espera3 = 0 #Traça dels esdeveniments del sistema traza = [] #Estadistics de l'execució del sistema cnt_capses = [0, 0, 0] mitjana_temps_omplir_capsa = [0.0, 0.0, 0.0] temps_inici_capsa = [0, 0, 0] def __init__(self): """ Constructora per defecte """ self.generador = Generador() self.area_espera1 = 0 self.area_espera2 = 0 self.area_espera3 = 0 self.agrupador1 = Agrupador(1) self.traza.append(self.agrupador1.presentacio()) self.agrupador2 = Agrupador(2) self.traza.append(self.agrupador2.presentacio()) self.agrupador3 = Agrupador(3) self.traza.append(self.agrupador3.presentacio()) self.traza.append("") self.esdevenimentsPendents = [] self.currentTime = 0 self.cnt_capses = [0, 0, 0] self.mitjana_temps_omplir_capsa = [0.0, 0.0, 0.0] self.temps_inici_capsa = [0, 0, 0] self.inicialitzaLlistaEsdeveniments() def inicialitzaLlistaEsdeveniments(self): self.generador.changeState() esd = Esdeveniment(self.generador.nextArrival(), estats.AlimentRecaptat, self.generador) self.esdevenimentsPendents.append(esd) self.traza.append("0") self.traza.append(esd.programat()) # Arranca la simulacio def run(self): continuar = True #TODO mirar de treure-ho while len(self.esdevenimentsPendents) and continuar: esdeveniment = self.esdevenimentsPendents.pop(0) continuar = self.tractarEsdeveniment(esdeveniment) self.generador.changeState() self.generar_traça() self.generar_estadistics() self.mostrar_estadistics() # Controla el temps de simulacio i gestiona l'execucio de la rutina associada a cada esdeveniment def tractarEsdeveniment(self, esdeveniment): self.currentTime = esdeveniment.timestamp self.traza.append(esdeveniment.executat()) if esdeveniment.tipus == estats.AlimentRecaptat: nextTime = self.generador.nextArrival() if nextTime >= 0: self.programar_esdeveniment_arribada(nextTime) if esdeveniment.tipus_aliment == 1: if self.agrupador1.isFree(): nextTime = self.agrupador1.nextEndService() nextTime += self.currentTime self.traza.append( self.agrupador1.iniciServei(self.currentTime)) esd2 = Esdeveniment(nextTime, estats.AlimentProcessat, self.agrupador1) esd2.set_tipus_aliment(1) self.agrupador1.changeState(estats.AgrupadorProcessant) self.esdevenimentsPendents.append(esd2) if self.agrupador1.get_cnt_aliments() == 0: self.temps_inici_capsa[0] = self.currentTime self.traza.append(esd2.programat()) else: self.area_espera1 += 1 self.traza.append(esdeveniment.encuar(self.area_espera1)) elif esdeveniment.tipus_aliment == 2: if self.agrupador2.isFree(): nextTime = self.agrupador2.nextEndService() nextTime += self.currentTime self.traza.append( self.agrupador2.iniciServei(self.currentTime)) esd2 = Esdeveniment(nextTime, estats.AlimentProcessat, self.agrupador2) esd2.set_tipus_aliment(2) self.agrupador2.changeState(estats.AgrupadorProcessant) self.esdevenimentsPendents.append(esd2) if self.agrupador2.get_cnt_aliments() == 0: self.temps_inici_capsa[1] = self.currentTime self.traza.append(esd2.programat()) else: self.area_espera2 += 1 self.traza.append(esdeveniment.encuar(self.area_espera2)) else: if self.agrupador3.isFree(): nextTime = self.agrupador3.nextEndService() nextTime += self.currentTime self.traza.append( self.agrupador3.iniciServei(self.currentTime)) esd2 = Esdeveniment(nextTime, estats.AlimentProcessat, self.agrupador3) esd2.set_tipus_aliment(3) self.agrupador3.changeState(estats.AgrupadorProcessant) self.esdevenimentsPendents.append(esd2) if self.agrupador3.get_cnt_aliments() == 0: self.temps_inici_capsa[2] = self.currentTime self.traza.append(esd2.programat()) else: self.area_espera3 += 1 self.traza.append(esdeveniment.encuar(self.area_espera3)) if esdeveniment.tipus == estats.AlimentProcessat: if esdeveniment.tipus_aliment == 1: self.tractar_esdeveniment_alimentProcessat( self.agrupador1, esdeveniment) elif esdeveniment.tipus_aliment == 2: self.tractar_esdeveniment_alimentProcessat( self.agrupador2, esdeveniment) else: self.tractar_esdeveniment_alimentProcessat( self.agrupador3, esdeveniment) self.esdevenimentsPendents.sort() return True def programar_esdeveniment_arribada(self, nextTime): nextTime += self.currentTime esd = Esdeveniment(nextTime, estats.AlimentRecaptat, self.generador) self.esdevenimentsPendents.append(esd) self.traza.append(esd.programat()) def tractar_esdeveniment_alimentProcessat(self, agrupador, esdeveniment): if agrupador.augmentar_cnt_aliments(): esd2 = Esdeveniment(self.currentTime, estats.AlimentFinalitzat, agrupador) esd2.decr_cnt() self.traza.append(esd2.finalitzat()) if agrupador.name() == "Agrupador1": self.actualitzar_estadistics(0) elif agrupador.name() == "Agrupador2": self.actualitzar_estadistics(1) else: self.actualitzar_estadistics(2) esdeveniment.element.Free() if esdeveniment.tipus_aliment == 1 and self.area_espera1 > 0: self.area_espera1 -= 1 nextTime = esdeveniment.element.nextEndService() nextTime += self.currentTime self.traza.append( esdeveniment.element.iniciServei(self.currentTime)) esd3 = Esdeveniment(nextTime, estats.AlimentProcessat, esdeveniment.element) esd3.set_tipus_aliment(1) self.esdevenimentsPendents.append(esd3) if self.agrupador1.get_cnt_aliments() == 0: self.temps_inici_capsa[0] = self.currentTime self.traza.append(esd3.programat()) elif esdeveniment.tipus_aliment == 2 and self.area_espera2 > 0: self.area_espera2 -= 1 nextTime = esdeveniment.element.nextEndService() nextTime += self.currentTime self.traza.append( esdeveniment.element.iniciServei(self.currentTime)) esd3 = Esdeveniment(nextTime, estats.AlimentProcessat, esdeveniment.element) esd3.set_tipus_aliment(2) self.esdevenimentsPendents.append(esd3) if self.agrupador2.get_cnt_aliments() == 0: self.temps_inici_capsa[1] = self.currentTime self.traza.append(esd3.programat()) elif esdeveniment.tipus_aliment == 3 and self.area_espera3 > 0: self.area_espera3 -= 1 nextTime = esdeveniment.element.nextEndService() nextTime += self.currentTime self.traza.append( esdeveniment.element.iniciServei(self.currentTime)) esd3 = Esdeveniment(nextTime, estats.AlimentProcessat, esdeveniment.element) esd3.set_tipus_aliment(3) self.esdevenimentsPendents.append(esd3) if self.agrupador3.get_cnt_aliments() == 0: self.temps_inici_capsa[2] = self.currentTime self.traza.append(esd3.programat()) def actualitzar_estadistics(self, tipus): self.cnt_capses[tipus] += 1 if self.cnt_capses[tipus] == 1: mitjana = (self.currentTime - self.temps_inici_capsa[tipus]) / self.cnt_capses[tipus] elif self.cnt_capses[tipus] == 2: mitjana = (self.mitjana_temps_omplir_capsa[tipus] + self.currentTime - self.temps_inici_capsa[tipus]) / self.cnt_capses[tipus] else: mitjana = (self.mitjana_temps_omplir_capsa[tipus] * (self.cnt_capses[tipus] - 1) + (self.currentTime - self.temps_inici_capsa[tipus]) ) / self.cnt_capses[tipus] self.mitjana_temps_omplir_capsa[tipus] = mitjana def generar_estadistics(self): f = open("estadistics.txt", "w") f.write("Capses generades per l'Agrupador1: " + str(self.cnt_capses[0]) + "\n") f.write("Capses generades per l'Agrupador2: " + str(self.cnt_capses[1]) + "\n") f.write("Capses generades per l'Agrupador3: " + str(self.cnt_capses[2]) + "\n") f.write("\n") f.write("Mitjana del temps en omplir una capsa de l'Agrupador1: " + str(round(self.mitjana_temps_omplir_capsa[0], 2)) + "\n") f.write("Mitjana del temps en omplir una capsa de l'Agrupador2: " + str(round(self.mitjana_temps_omplir_capsa[1], 2)) + "\n") f.write("Mitjana del temps en omplir una capsa de l'Agrupador3: " + str(round(self.mitjana_temps_omplir_capsa[2], 2)) + "\n") f.close() def mostrar_estadistics(self): plt.figure(figsize=(5, 7)) plt.subplot(2, 1, 1) plt.xlabel("Tipus d'aliment") plt.ylabel("Numero capses") noms1 = ['Pasta', 'Arros', 'Llegums'] plt.bar(noms1, self.cnt_capses, width=0.5) plt.subplot(2, 1, 2) plt.xlabel("Tipus d'aliment") plt.ylabel("Temps mitjà en omplir") noms2 = ['Pasta', 'Arros', 'Llegums'] plt.bar(noms2, self.mitjana_temps_omplir_capsa, width=0.5) plt.show() def generar_traça(self): f = open("sortida.txt", "w") for i in range(0, len(self.traza)): f.write(self.traza[i] + "\n") f.close()
def index(self): text = ''' <!DOCTYPE html> <html lang="en"> <head> <script src="static/js/jav.js"></script> <link rel="stylesheet" href="static/css/st.css"> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <title>G&D</title> <link href="static/css/bootstrap.min.css" rel="stylesheet"> <link href="static/css/stylish-portfolio.css" rel="stylesheet"> <link href="static/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css"> </head> <body> <script language="javascript"> function doSearch() { var tableReg = document.getElementById('tabla'); var searchText = document.getElementById('searchTerm').value.toLowerCase(); var cellsOfRow=""; var found=false; var compareWith=""; for (var i = 1; i < tableReg.rows.length; i++) { cellsOfRow = tableReg.rows[i].getElementsByTagName('td'); found = false; for (var j = 0; j < cellsOfRow.length && !found; j++) { compareWith = cellsOfRow[j].innerHTML.toLowerCase(); if (searchText.length == 0 || (compareWith.indexOf(searchText) > -1)) { found = true; } } if(found) { tableReg.rows[i].style.display = ''; } else { tableReg.rows[i].style.display = 'none'; } } } </script> <a id="menu-toggle" href="#" class="btn btn-dark btn-lg toggle"><i class="fa fa-bars"></i></a> <nav id="sidebar-wrapper"> <ul class="sidebar-nav"> <a id="menu-close" href="#" class="btn btn-light btn-lg pull-right toggle"><i class="fa fa-times"></i></a> <li class="sidebar-brand"> <a href="#top" onclick=$("#menu-close").click();>Good and Devil</a> </li> <li> <a href="#top" onclick=$("#menu-close").click();>Home</a> </li> </ul> </nav> <!-- Header --> <header id="top" class="header"> <div class="text-vertical-center"> <h1>GOOD & DEVIL</h1> <!-- <h3>A Game for known your Real Personality</h3> --> <br> <a href="#about" class="btn btn-dark btn-lg">Coming soon</a> </div> </header> ''' text1 = """<!-- About --> <section id="about" class="about"> <div > <div> <div class="col-lg-12 text-center"> """ text2 = """ </div> </div> <!-- /.row --> </div> <!-- /.container --> </section> <div id="demo" class="demo"> <li> <ul> Estadisticas </> <ul> Partidas Jugadas : 10 </ul> <ul> Experiencia : 1500 xp </ul> <ul> Nivel: Destrozador </ul> <ul> Tiempo Jugado : 10 Horas </ul> <ul> Logros Conseguidos : 75/200 </ul> <ul> Estrellas encontradas : 4/5</ul> <ul> <img src="/static/img/rey3.png" style="width:250px;height:250px;"></ul> </li> <div id="cerrar" class="cerrar" onclick="clic1()"> x </div> </div> <div id="demo1" class="demo1"> <li> <ul> Estadisticas </> <ul> Partidas Jugadas : 8 </ul> <ul> Experiencia : 1300 xp </ul> <ul> Nivel: Fulminante </ul> <ul> Tiempo Jugado : 10 Horas </ul> <ul> Logros Conseguidos : 40/200 </ul> <ul> Estrellas encontradas : 3/5</ul> <ul> <img src="/static/img/rey1.png" style="width:250px;height:250px;"></ul> </li> <div id="cerrar1" class="cerrar1" onclick="clic4()"> x </div> </div> <div id="demo2" class="demo2"> <li> <ul> Estadisticas </> <ul> Partidas Jugadas : 7 </ul> <ul> Experiencia : 1250 xp </ul> <ul> Nivel: Arrasador </ul> <ul> Tiempo Jugado : 11 Horas </ul> <ul> Logros Conseguidos : 37/200 </ul> <ul> Estrellas encontradas : 3/5</ul> <ul> <img src="/static/img/rey.png" style="width:250px;height:250px;"></ul> </li> <div id="cerrar2" class="cerrar2" onclick="clic5()"> x </div> </div> <div id="img1" class="log1" > <img src="/static/img/espadas.png" style="width:260px;height:260px;"></div> <div id="img2" class="log2" > <img src="/static/img/espada1.png" style="width:260px;height:260px;"></div> <div id="img3" class="log3" ><img src="/static/img/toma.png" style="width:260px;height:260px;"></div> <div id="imgc" class="logc" ><img src="/static/img/cupido.png" style="width:260px;height:260px;"></div> <!-- jQuery --> <script src="static/js/jquery.js"></script> <!-- Bootstrap Core JavaScript --> <script src="static/js/bootstrap.min.js"></script> <!-- Custom Theme JavaScript --> <script> // Closes the sidebar menu $("#menu-close").click(function(e) { e.preventDefault(); $("#sidebar-wrapper").toggleClass("active"); }); // Opens the sidebar menu $("#menu-toggle").click(function(e) { e.preventDefault(); $("#sidebar-wrapper").toggleClass("active"); }); // Scrolls to the selected menu item on the page $(function() { $('a[href*=#]:not([href=#],[data-toggle],[data-target],[data-slide])').click(function() { if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') || location.hostname == this.hostname) { var target = $(this.hash); target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); if (target.length) { $('html,body').animate({ scrollTop: target.offset().top }, 1000); return false; } } }); }); //#to-top button appears after scrolling var fixed = false; $(document).scroll(function() { if ($(this).scrollTop() > 250) { if (!fixed) { fixed = true; // $('#to-top').css({position:'fixed', display:'block'}); $('#to-top').show("slow", function() { $('#to-top').css({ position: 'fixed', display: 'block' }); }); } } else { if (fixed) { fixed = false; $('#to-top').hide("slow", function() { $('#to-top').css({ display: 'none' }); }); } } }); // Disable Google Maps scrolling // See http://stackoverflow.com/a/25904582/1607849 // Disable scroll zooming and bind back the click event var onMapMouseleaveHandler = function(event) { var that = $(this); that.on('click', onMapClickHandler); that.off('mouseleave', onMapMouseleaveHandler); that.find('iframe').css("pointer-events", "none"); } var onMapClickHandler = function(event) { var that = $(this); // Disable the click handler until the user leaves the map area that.off('click', onMapClickHandler); // Enable scrolling zoom that.find('iframe').css("pointer-events", "auto"); // Handle the mouse leave event that.on('mouseleave', onMapMouseleaveHandler); } // Enable map zooming with mouse scroll when the user clicks the map $('.map').on('click', onMapClickHandler); </script> </body> </html> """ migenerador = Generador() archivo = open("nombres.txt", "r") tabla = migenerador.Tabla(archivo) return text + text1 + tabla + text2