Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Serapis

#2051
Desiste.
Este es el ejemplo claro de un mal ejercicio de ejemplo para aprender a programar.

Al tratarse de aprender recursividad, se debe ir al grano con la recursividad... aquí el problema más que resolver la propia recursividad se trata de resolver un problema linguístico, es decir de lógica que puede resutar más complejo si cabe que el propio problema que se trata de aprender.

Es como si a alguien que quiere aprender mecánica, y está aprendiendo a distinguir tornillos y darle el apriete exacto, le piden que apriete uno, tal que para hacerlo debe desmontar por completo un motor...

Si se está aprendiendo con cosas básicas, los problemas a resolver deben estar al mismo nivel de dificultad que tales cosas que se están aprendiendo.



De todos modos, ya te aleccioné para que saltaras a árboles y grafos, donde se trata más ampliamente la recursividad y donde el nivel de dificultad viene adecuado justo a lo que se está aprendiendo. Hazme caso... y salta a árboles y grafos.

..que se te queda algo en el tintero (por ejemplo listas enlazadas construídas sobre arrays), no te preocupes, no te atasques, avanza y ya volverás atrás... a veces, no están debidamente ordenados los problemas, a veces para resolver ciertos problemas necesitas saber temas que se dan más adelante, o que habiendo dado temas de más adelante, luego esos resultan más entendibles.
#2052
No es nada nuevo. Incluso Microsoft, ha venido haciendo prácticas abusivas para similares propósitos...
#2053
Haz preguntas concretas para poder tener respuestas concretas.
A preguntas generales o con vaguedades... nadie va a aperder su tiempo.

Por otro lado, quizás tu mensaje fuera más acertado que estuviere ubicado en "Anáslisis y Diseño de Malware"
https://foro.elhacker.net/analisis_y_diseno_de_malware-b17.0/
#2054
Vaya tontería...
Dejando la margen programas que específicamente tengan diseñada tales funcionalidades desde su diseño (es decir que se venden así en sus versiones).

El software puede ser el mismo y oficial (pongamos una base SQL que administra el sistema), simplemente con tener otra base de datos con determinadas funciones exprofeso, es más que suficiente.
Entran datos que pasan (por ejemplo) a una BD, luego ciertas funciones pueden filtrar la entrada y el resultado pasarlo a otra BD. La primera podría se rla 'negra' la segunda la que se muestre a Hacienda.
Es más dichas funciones podrían permenecer ocultas y solo ser activadas por el propio administrador, bajo ciertas condiciones (similar a las puertas traseras, pero siendo 'delanteras'). Es decir no requiere un software aparte ni exprofeso, y salvo que el propio programa (la instalación) sea confiscado para ser investigado por expertos, uno en dases de datos (que dilucide qué hace cada función instalada) y otro de Hacienda que por su parte dirima si eso que hace es legal o ilegal, no va a servir de nada.
La BD 'negra', siempre te la puedes llevar contigo, conectarla cada día o tenerla en remoto y excusarte  (si se dan cuenta y preguntasen), que es una duplicada de seguridad de la BD del negocio (y al caso tener efectivamente también un duplicado de seguridad, tanto por su propia función como para escamotear la posibilidad de que se percaten de la existencia de una segunda BD ausente).
#2055
Yo pensaba que la miniaturización de sistemas que precisan una interfaz de usuario digital (que necesite ser usada con el dedo), había terminado... que no se podían seguir reduciendo en medidas, porque al final... lo tendrían que usar bebés.

Los japoneses después de todo (y un poco genérico en Asia), son de talla más pequeña y muchos tienen manos muy pequeñas, así que imagino que una miniatuzicación al tamaño de tarjeta de crédito, todavía puede valerles y si se une al escaso peso, puede resultar ideal para mucha gente que no tengas necesidad de grandes prestacones en su tf. móvil y en cambio valore más su portabilidad.
#2056
Pués yo opino como Elektro... Veo una estupidez total, andar con representaciones artísticas de acá para allá, pero no dejar constancia "in situ" de ello... por ejemplo al publicar la imagen de referencia, creo que no costaba nada decir: "Celebramos el encuentro de las naves Apollo y Soyuz, y traigo esta imagen realizada en Lego, para recordar como fue aquel instante..."  y listo...

Del mismo modo que los científicos en sus escritos, dedican al final del mismo la relación de la bibliografía utilizada, de igual modo, deberían acreditar las imagenes y montajes que realicen.

Sobretodo, porque a gente torpona y a niños, sí que les están engañando, ya que ellos sí confían ciegamente en la palabra dada por "los cientificos"...

En fin, si en un envase de eljía debe ponerse obligatoriamente: "Mantener fuera del alcance de los niños", los de la NASA, también debieran poner obligatoriamente (cuando así es, o sea el 90% de las veces :laugh: :laugh: ): "Esto es un montaje cualquier parecido con la realidad, nos alegra mucho".

Si quieren seriedad, deben mostrarse serios porque en efecto hay 'proyectos' ridículos... sin sentido alguno. No resultaría extraño que los que tengan que aprobar presupuestos, después de leer proyectos soeces, se acaben preguntando: "¿...y para estas tonterías vamos a dedicar dinero... para que éstos pierdan el tiempo, como si fuéramos a costerar sus fantasías de ciencia ficción?"... y hale hop, grifo cerrado...

Otra cosa es que una sección de la NASA, estuviere dedicado por ejemplo a niños escolares, donde las cosas se expliquen con más claridad, existieren herramientas a disposición de profesores, y tal... en un área así, perfectamente tienen cabida chorrocientas intepretaciones artísticas y ya el mismo sitio, viene a reflejar eso mismo. ...ahora, pretender que todo el mundo es igual de inocente o ignorante como un niño, acaba en insulto a tu inteligencia, o te lo tomas a risa (es decir asumiendo que los ignorantes son ellos).
#2057
mmm... no estoy seguro de haberte entendido, del todo... luego copio el código y mañana trato de ejecutarlo y ya veré... pero de entrada me parece que intentas contar colores?. o intentas contar áreas que tienen un color (esto último luego de abrir el fichero 'texture-Color.png".


Así que ateniéndome solo a tus comentarios.
Con el algoritmo counting-sort, puedes tener la cantidad de colores únicos que contienen una imagen... necesitas un array de 17Mb.
Después puedes clasificarlos. Si solo aparecen por ejemplo 1millón de colores distintos, solo tienes que reclasificar 1 millons (hacer tu comparación de similaridad, en vez de hacerlo con toda los 7.000x5.000 = 35millones)... counting sort, es el algoritmo más rápido de ordenamiento para números enteros, además tampoco es exactamente dicho algorimo, sino una simplificación pués nos basta saber la existencia de cada único elemento (sin duplicados)

Así que si precisas una clasificación basada en el parecido, es más práctico (que lo que has hecho) aplicar una función que derive los colores que tu dés por sentado que pertenecen a una categoría al color que representa esa categoría... (quiero decir, es más práctico si no te basta con saber qué colores aparecen, si no que además debas hacer algo con ellos después en la imagen). Así al final toda la imagen tendría solo tantos colores como categorías tengas. Por supuesto debe quedar claro previamente que pasa con los colores que pudieran correponder por igual a más de una categoría (el gris puede llevarse a la categoría de negro, lo mismo que a la del blanco, pués equidista de ambos). Es decir, un color no debe estar en mas de una categoría...

Aquí las funciones que harían todo lo antedicho...

// la función recibe el array de píxeles (4bytes por píxel) y devuelve la cantidad de únicos por referencia y el array de colores únicos.
// es una simplificación de counting-sort (ya que no requerimos ordenarlos, sólo conocer los únicos).
array entero = funcion GetColoresUnicos(in array entero pixeles(), out entero Cantidad)
    array de entero ColoresUnicos(0 a 1677725) //255 para señalar que existe y 0 para no.
    entero k

    bucle para k desde 0 hasta pixeles.length -1
          ColoresUnicos(pixeles(k)) = 255 // por si se quiere hace rpasar por bleao en alguna operación posterior.
    siguiente 
   
    devolver ColoresUnicos 
fin funcion

Listo ya tienes un array donde el índice es el propio color del píxel, y si el valor contenido es 1, dicho color (el valor del índice) existe en la imagen, si vale 0, no.
por ejemplo sea: ColoresUnicos(10145634) que vale 255, ese color (el 10145634, en Hex:9ACF62), existe en la imagen.

Ahora clasificas estos colores únicos según tu criterio de similaridad... y será enormemente más rápido que todo ese código que tienes...
Veamos por ejemplo que tienes 25 categorías... asignas un color a ellos... y pongamos que descansan en un array ColCategorias(0 a 24)

// Ahora el array de colores únicos se truncará para que cada color existente (valor 255),
//    pase a tener el color de la categoría a la que pertenece
funcion ReclasificarColores(in-out array entero colUnicos() )
    entero k, byte x

    bucle para k desde 0 hasta 16777215
        Si colUnicos(k) > 0)  // es decir si existe en la imagen
            // esta función debe devolver un valor en el rango 0-24, que es el índice de un color de la categoría...           
            x = Similaridad(colUnicos(k))
            colUnicos(k) = colCategoria(x)
            // o bien devolver directamente el color y se asigna entonces a
            // colUnicos(k) = Similaridad(colUnicos(k))
        fin si
     fin bucle
fin funcion


Ahora que ya están todos los colores (únicos) existentes en la imagen, modificado al color de cuya categoría es reepresentativo.... solo resta aplicarlo a la imagen (si fuera el caso)...

// Cambia cada color d ela imagen, por el que corresponde a su categoría.
funcion SegmentarImagenEnColores(in array entero pixeles(), in array entero colUnicos() )
    entero k

    bucle para k desde 0 hasta pixeles.lenght -1
        pixeles(k) = colUnicos(pixeles(k))
    siguiente
fin funcion


Y fin... vuelves a depositar el array de píxeles en la imagen (si no interceptaste directamente su puntero en memoria), y refrescas la imagen. Ya la tienes segmentada en tus 25 colores (de ejemplo).
Aparte de las 3 funciones dadas en pseudocódigo, te falta solo incorporar la función de similaridad, la cual dependerá de ciertos parámetros, que deenden de lo que uno aya a hacer... y que queda a tu esfuerzo, aunque creo haber visto que en el código pudieras tenerla ya implementada.
Y queda evidentemente la parte del código que carga la imagen y toma su array de píxeles y al final la devuelve (y si procede la guarda a disco)...

aquí lo que sería la función general...

funcion SegemtarImagenEnCategorias(string Ruta)
   entero cantidadColUnicos
   array entero pixeles()
   array entero colUnicos()
   array entero colCategoria()
   bitmap Imagen

   imagen = ReadImagen(ruta)
   pixeles = GetPixeles(Imagen))
   cantidadColUnicos = GetColoresUnicos(pixeles, colUnicos)
   imprimir cantidadColUnicos // solo por cuirosidad, aunque puede usarse para determinar cuando terminar en un bucle
   // se supone que estos colores ya está definidos de antemano, pueden tomarse desde
   //    fichero, desde recursos, insertos en el código como constantes, etc...
   colCategoria= RadFromFile(Ruta)
   ReclasificarColores(colUnicos)
   SegmentarImagenEnColores(pixeles, colUnicos)
   SetPixeles(Imagen, pixeles)
   WriteImagen(ruta, imagen)
fin funcion


<hr>
Otra opción es simplemente aplicar funciones de segmentación, por ejemplo una convolución con un kernel como el siguiente (-1,1,-1, 1,0,1, -1,1,-1) genera la imagen que pongo justo bajo estas líneas...


O una función de 'relieve' donde realza el contraste cuando encuentra un cambio brusco de luminancia, y apaga-diluye el resto... la siguiente imagen corresponde a ese caso.


Ambas partiendo de la siguiente imagen (se hecha en falta spoilers en el foro). Claro que al hablar de edificios, pensaba que eran en 3 dimensiones, vamos como una ciudad, sin embargo, luego de ver la imagen png, veo que es más una imágen aérea de edificios, lo que sin duda arrojaría un mejor resultado que una en 3d, como esta de la que he partido...




Mañana con más tiempo le hecho un ojo al código...
#2058

char x  //carácter que ingresa el jugador
entero ancho //ancho del mapa
entero alto   // alto del mapa
entero fila  // la fila actual donde está
entero columna // la columna actual donde está.

funcion MoverJugador (char x)
   entero tmpFila, tmpColumna

   si x="d" //derecha
       Si (columna < (ancho-1))  // si no está en la última casilla de dicha fila.
           tmpColumna = (columna +1)
       fin si
   Osi x="a" // izquierda
       si (columna > 0)
           tmpColumna= (columna -1)
       fin si
   Osi x="w"   // arriba
       Si (fila > 0)
           tmpFila= (fila -1)
       fin si
   Osi x="s" // abajo
       Si (fila < (alto-1))  
           tmpFila= (fila +1)
       fin si
   YSino  // cualquier otro carácter sale... incluído los previos en mayúsculas.
       devolver
   fin si

   BorrarJugador(fila, columna)  // bora el jugador donde esta (redibuja esa casilla vacía)
   fila = tmpFila
   columna = tmpColumna
   DibujarJugador(fila, columna)   // dibuja el jugador 'encima' de la casilla
fin funcion


Hale, listo... te toca a tí pasar el pseudocódigo...
#2059
qué tiene que ver una cosa con la otra... dónde está la conexión entre unos hashes que aparecen en mensajes en twitter, con la caída de otro servicio de una compañía que nada tiene que ver???.

Yo guardaría esos mensajes. Quién sabe si alguien ha logrado burlar el sistema y ha decidido compartir con todo el mundo trapos sucuios de algún sitio, y se le pasa algo, decida explicar a todo el mundo qué hacer con esos hashes para reverlar quién sabe qué?...
#2060
Igualmente hay que cerrarlas, consumen tu memoria... una cosa es tener abiertas 4-5 aplicaciones y otra distinta 40-50.

Si nunca las cierras, esa cifra se acabará alcanzando y si nunca las cierras, una vez alcanzado esa cifra, seguirá siendo esa cifra, aunque habitualmente solo uses 4 ó 5...

Así que sí, al menos las aplicaciones que usas ocasionalmente debes cerrarlas, especialmente si la memoria de tu tf, no va sobrada o utilizas aplicaciones que consumen demasiada memoria (como juegos en 3D)...