elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 ... 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 [338] 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 ... 431
3371  Programación / Programación C/C++ / Re: Mejorar el codigo en: 20 Diciembre 2017, 18:26 pm
Yo no lo haría de forma ligeramente diferente a como lo resuelve engel lex

Básicamente sabemos que solo tiene posibilidades de ser primo si acaba en 1,3,7 ó 9, luego esa debería ser la primera condición a verificar.
Luego, en efecto basta con llegar a la raíz cuadrada del número más alto, ya que a*b = b*a, con lo que al llegar al punto donde 'a' sea la raíz cuadrada, luego los valores de 'a', irán tomando los de 'b' y viceversa...



Código:
buleano = funcion EsPrimo(entero Valor)
     entero unidades, max, k

    unidades = (valor modulo 10)

    Si ((unidades and 1) = 1) luego  // primer filtro  (eliminamos los acabados en 0,2,4,6 y 8, es decir aceptamos solo los impares
        Si (unidades = 5) luego   // y ahora descartamos el impar 5
            Si (valor=5) luego
                Devolver TRUE
            Sino
                Devolver FALSE  // cualquier otro múltiplo de 5 no es primo.
            Fin si
        Sino
            max = RaizCuadrada(valor) +1  // segundo filtro,
            bucle para k desde 7 hasta max en incrementos de 2
                  Si ((valor modulo k) = 0) Devolver FALSE
            Fin bucle

            Devolver TRUE
        Fin si
    Sino  // todavía podría ser 2 que es el único par que es primo (divisible sólo: por sí mismo y la unidad)
        Si (valor = 2) luego
            Devolver TRUE
        Sino
            Devolver FALSE
        Fin si
    Fin si
Fin funcion
Este código es óptimo para saber si un número cualquiera (aleatorio) es primo, pero si vas a operar con una lista seguida de valores, puede ser optimizada, toda vez que determinadas comprobaciones pueden moverse al bucle principal de la lista, evitando la llamada a esta función.

Aparte de eso, el bucle puede mejorarse toda vez que sabemos que si acaba en 5, no será primo, y también porque muchos impares son múltiplos de 3 (esto es cada 3 impares seguidos, 1 es múltiplo de 3): 11,13->15;  17,19->21; 23,25->27; 29,31->33 . 

Queda a tu esfuerzo optimizar dichos casos...
3372  Foros Generales / Noticias / Re: El gobierno de Venezuela quiere tener localizado a todos los mineros de Bitcoin en: 19 Diciembre 2017, 21:29 pm
...
en venezuela ... aquel que quiera emprender una empresa, deberá "compartir" sus ganancias con el gobierno si o si,...
Más o menos como en todas partes. Se llaman impuestos, pero con la notable diferencia de que son porcentajes establecidos de forma pactada y razonada (no siempre, por supuesto).
 
Entre 'compartir' y 'hacerse con el control' está la diferencia. Si arriesgas y te sale bien, que luego se quieran quedar con TODO tu beneficio, y si arriegas, lo pierdes  y TE JODES, ante esa perspectiva no habrá ningún inversor. No existe interés en arriesgar tu economía para que los resultados sin son buenos pasen a manos del gobierno y son malos, sacudan tu bolsillo. Habrá interés en arriesgar, invertir, cuando exista una posibilidad razonable de obtener beneficios.

...pero algunos parecen no entender las matemáticas más simples ni la psicología más elemental...



Cuando el gobierno 'chavista' acabe (sea cuando sea que ocurra), a buen seguro empezarán a saltar muchos 'peces gordos' fuera del 'estanque' para que no les pillen... En cada gobierno autocrático, acaban asentándose parásitos que por sus labios desbordan idealismo barato por los 4 costados, pero por detrás están desfalcando todo cuanto llega a sus manos, y todo el control que realizan no acaba sino en información privilegiada para sus fechorías... se los ha visto en todas partes a lo largo de la Historia. Venezuela no va a ser ninguna excepción a este respecto.
3373  Foros Generales / Noticias / Re: El gobierno de Venezuela quiere tener localizado a todos los mineros de Bitcoin en: 19 Diciembre 2017, 15:52 pm
Estos jerifaltes como de costumbre con sus tonterías sin sentido.

El único impuesto razonablemente exigible es que si se benefician de un subsidio por el consumo energético, por el mero hecho de minar biutcoin, les exigieran el pago completo del consumo energético, asumiendo que no es un gasto para la 'supervivencia' per sé del núcleo familiar.

Querer tener un listado de 'mineros de bitcoin', no es más legal que querer tener un listadod e todas las personas que cada día pronuncian la palabra 'veremos' (o cualquier otra), una solemne idiotez propia como no, de gobiernos totalitarios repletos de inútiles idealistas...
3374  Informática / Software / Re: Recuperar contraseña archivos .RAR en: 17 Diciembre 2017, 17:15 pm
Puedes intentar algo simple...

A menudo algunas web publican/publicaban contenido con contraseña, pero la contraseña solía ser trivial en esos casos... del tipo: la contraseña es el nombre de la web, bien que no exactamente, espacios en blanco, puntos, etc... podrían no ir, así como  no respetar las mayúsculas (todo en minúculas o viceversa)... en casos m
ás extraños, he llegado a ver que de un año a otro, la contraseña era la misma, excepto porque al final la contraseña acababa en los caracteres del año en que se estaba.

...ergo, yo intentaría esto mínimo: Si sabes como se llama la web de la que provenía, prueba con contraseñas consistiendo en variaciones del nombre de la web... al modo que te he comentado.
3375  Sistemas Operativos / Windows / Re: Nuevo Icono en la barra de inicio. en: 17 Diciembre 2017, 17:09 pm
Ese es el icono típico de shell.

De hecho, cuando abres una ventana de comandos (cmd), solía ser el símbolo que aparece a la izquierda a mo do de indicador de 'esperando entrada de datos' (se podía cambiar, por supuesto).
Powershell, es por decirlo de modo simple una versión muchísimo más potente del vetusto cmd (a su vez sucesor del command.com).

Para más inri, ahí mismo te muestra la opción: "Desanclar de la barra de tareas", ¿luego... qué entiendes de lo que lees?.

3376  Programación / Programación C/C++ / Re: matriz de movimiento del caballo en c++ en: 14 Diciembre 2017, 17:34 pm
Yo veo más interesante que una función devuelve un valor indicando cuales de las 8 posibles movimientos del caballo son válidas.

Se pasa a la función las cordenadas del caballo y el estado del tablero.
Con estado del tablero, se indica que contiene uno de estos 3 tipos de valores (en cada casilla del array que lo mantiene):
---: =0; Casilla no ocupada.
---: >0; Casillas ocupadas por el contrincante (el valor define que figura es).
---: <0; Casillas ocupadas por tus propias figuras (el valor define que figura es).

Luego, como el caballo tiene 8 posibles movimientos, usaremos un byte como respuesta:
- Cada bit a 1 indica movimiento posible (casilla vacía o figura del enemigo que se puede comer).
- Cada bit a 0, movimiento no posible (esto es, fuera del tablero u ocupada por tus propias figuras)

Código:
// Esta funcion devuelve un byte indicando en cada bit si la casilla correspondiente a dicho bit puede o no saltar el caballo a ella.
// Si el movimiento es posible y la casilla está vacía u ocupada por el enemigo, se pone el bit correspondiente a 1.
byte = funcion PosicionesValidas(entero x, entero y, array tablero() )
    byte n
    
    ' bit 0 y 5 (porque ambos comparten el x-1)
    Si (x-1) >= 0) luego
        Si (y-2) >= 0) luego // bit 0            
            Si Tablero(x-1, y-2) >= 0 luego n = 1 //previamente valía 0.
        fin si
        Si (y+2) >=0) luego //bit 5
            Si Tablero(x-1, y+2) >= 0 luego n= (n or 32)
        Fin si
    Fin si

    ' bit 1 y 4 (porque ambos comparten el x+1)
    Si (x+1) >= 0) luego
        Si (y-2) >= 0) luego // bit 1            
            Si Tablero(x+1, y-2) >= 0 luego n=(n or 2)
        fin si
        Si (y+2) >=0) luego //bit 4
            Si Tablero(x+1, y+2) >= 0 luego n= (n or 16)
        Fin si
    Fin si
// -----------------------------
     ' bit 6 y 7 (porque ambos comparten el x-2)
    Si (x-2) >= 0) luego
        Si (y-1) >= 0) luego // bit 6            
            Si Tablero(x-2, y-1) >= 0 luego n=(n or 64)
        fin si
        Si (y+1) >=0) luego //bit 7
            Si Tablero(x-2, y+1) >= 0 luego n= (n or 128)
        Fin si
    Fin si

    ' bit 2 y 3 (porque ambos comparten el x+2)
    Si (x+2) >= 0) luego
        Si (y-1) >= 0) luego // bit 2            
            Si Tablero(x+2, y-1) >= 0 luego n= (n or 4)
        fin si
        Si (y+1) >=0) luego //bit 3
            Si Tablero(x+2, y+1) >= 0 luego n= (n or 8)
        Fin si
    Fin si

    devolver n
fin funcion

- Otra función debiera admitir a qué cordenadas refiere un bit 'n' del byte (que devuelve la función anterior) dada la posición actual del caballo.
- Se añade además  a la función otro parámetro; el array del tablero, y así la función retorna un byte, que es indicadtivo de si se mueve a dicha casilla y si además 'se come' una ficha del enemigo, ó si no es posible moverse a ella...  
Código:
// Una enumeración para la devolución de la función así resulta útil saber que pasó.
//  igualmente bastaría un sByte y acordar que este
enumeracion PosibilidadesDeMovimiento
     Movimiento_No_Mueve = -1 //No se puede mover a esa posición (están tus figuras o apunta fuera del tablero)
     Movimiento_Vacio = 0 //se posiciona en OTRA casilla vacía, no pasa nada más.
     // Al comer se podría prescindir de qué figura come (y en todos estos casos devolver simplemente 1) aunque resulta más interesante así...
     // Estos valores deberían coincidir con los valores asignados a las figuras (en otra enumeración, para el tablero)
     Movimiento_Come1 = 1  // come a un peón
     Movimiento_Come2 = 2  //come a una torre
     Movimiento_Come3 = 3  //come a un caballo
     Movimiento_Come4 = 4  //come a un alfil
     Movimiento_Come5 = 5  // Come a la reina.
     Movimiento_Come6 = 6  //  Mata al rey, fin de partida (el rey no tiene movimientos)
fin enumeracion

Y ahora que queda claramente definida lo que tiene que hace rla función su pseudocódigo resultante:
- Posibles es el byte que se devolvió en la función anterior, y bitposición la elección de movimiento del jugador.
- 'x' e 'y' son las cordenadas actuales y a la devolución contendrán las cordenadas de destino del caballo (solo si fue posible moverse).
Código:
PosibilidadesDeMovimiento = funcion PosicionarCaballoSobre(byte x, byte y, byte Posibles, byte BitPosicion, array sByte Tablero() ) 
    sbyte dx, dy
    PosibilidadesDeMovimiento n

    Si ((2^BitPosicion) and posibles) luego  // ¿realmente ese bit está a uno (casilla aceptable donde mover el caballo) ?
        Seleccionar BitPosicion
            caso 0
                dx = x-1
                dy = y-2          
            caso 1
                dx = x+1
                dy = y-2
            caso 2
                ...  // a rellenar por ti...
            caso 3
                ...
            caso 4
                ...
            caso 5
                ...
            caso 6
                ...
            caso 7
                ...
        Fin seleccionar
  
        // no hace falta comprobar dx y dy dentro del tablero, ya que eso se comprobó en la función anterior y se garantiza al inicio de esta función...
        n = Tablero(dx, dy)
        Si (n>0) luego
            x = dx
            y = dy
            devolver n
        Osi (n=0)
            devolver n
        fin si
    Fin si

    devolver -1
fin funcion


Luego el código de las llamadas sería algo como:
Código:
array sByte tablero(0 a 7, 0 a 7)  //el array del estado del tablero está definidio a nivel del módulo/clase

Funcion JugarCaballo(byte x, byte y)  //x, y son las cordenadas actuales del caballo.
    sByte n, p
    posibilidadesDeMovimiento j
    byte dx, dy

    n = PosicionesValidas(x, y, tablero() )
    Si (n> 0) luego //hay posiciones válidas para el caballo desde donde está actualmente
        dx= x
        dy = y
        Hacer
            mensajeAlJugador ""Elige una de los 8 posibles movimeintos del caballo (un valor en el rango: (0/7)" con imagen adjunta de las psoiciones que son 0-7)
            p = JugadorEligePosicion // para el caballo (en el rango 0-7
            j = PosicionarCaballoSobre(x, y, n, p, tablero() )
        Repetir mientras (j<0)

        Si (j>0)
            ComerFichaEnemiga(x, y, j) // allí se ve si la ficha comida es el rey en cuyo caso acaba la partida.
        Fin si
        MoverCaballoA(x, y)

        // Actualizar estado del tablero:
        tablero(dx, dy) = 0 // casilla libre, caballo retirado de ahí.
        tablero(x, y) = -3 // 'nuestro' caballo en dicha posición (hbiera o no una ficha del enemigo en ella).
    fin si
fin funcion
   

Los bits que definen la posición del movimiento serían así:
3377  Programación / Programación C/C++ / Re: Eliminar numero negativos de una matriz ( sin librerías) en: 14 Diciembre 2017, 14:30 pm
Ineficiente. La solución que pones usa dos bucles con cada negativo hallado, desplazas todo el contenido del array por encima de él, cada vez.

La solución que yo te ofrecí (que puedes ponerla en una función o no), solo requiere recorrer una única vez el bucle, luego necesita 'k-n' comparaciones y 'n' asginaciones. Incluso para poner a 0 los valores finales en el array (que entonces las asginaciones serían n+ (k-n)) ). Siendo k el tamaño del array y n los positivos encontrados (y k-n los negativos).
3378  Foros Generales / Noticias / Re: ¿Es malo apagar el ordenador del botón? en: 14 Diciembre 2017, 03:30 am
Es que debería ser así...
Los equipos deberían tener una batería pequeña y potente de tal modo que cuando detecte una caída de energía significativa, opere con la batería y mediando con el S.O. para entrar en estado de hibernación... ...más o menos una ayuda como los SAI, pero integrada en el equipo y con carga suficiente y al único propósito de hibernar el equipo cuando falte el suministro eléctrico.
3379  Foros Generales / Noticias / Re: Las páginas de streaming pirata como Openload minan criptomonedas cuando las ... en: 14 Diciembre 2017, 02:58 am
Sin duda la minería sobre tu equipo, sin tu permiso va en aumento... una nueva lacra de internet que crece sin control y ante lo cual los gobiernos callan como perros con bozal.

es más que probable que en lo sucesivo surjan webs, sin más intención que aprovecharse de la potencia de cálculo del os equipos de los usuarios que visiten sus páginas...

El mundo cada vez da más asco, está lleno de vampiros despiadados y nadie hace nada al respecto...
3380  Foros Generales / Noticias / Re: Hay gente hipotecando su casa para comprar Bitcoins en: 14 Diciembre 2017, 02:52 am
Curioso. Y yo que rechacé gastarme unos miles de euros cuando estaba entre 12 y 20 euros... y ahora hay gente que vende su casa para comprar un puñado de bitcoins a cuánto ¿miles de euros el bitcoin?.

El bitcoin, sería sensato que cualquiera lo comprara cuando apenas tenía valor, te gastabas unos cientos  o miles de euros y si salía mal, no sería el fin del mundo... solo una pequeña mala inversión. Arriesgar tu casa y todos tus ahorros, sin entender nada sobre el tema, es una locura... cuánto más va a seguir subiendo?. Todo lo que se pueda seguir manipulando.

Bitcoin, se enfrenta a un gran problema, el mismo problema que trataba de resolver... la manipulación del precio. Lo único que ha cambiado son las manos que lo manipulan... así que para mi, cada vez va perdiendo más crédito siguiendo por ese camino.

Y estoy de acuerdo con Orubatosu... es absurdo el gasto energético. Minar bitcoins, sale indudablemente mucho más caro que minar oro, pero el oro, aparte de moneda, y su uso en joyería, tiene uso industrial... el bitcoin, no deja de ser 'humo', si se achicharraran todos los ordenadores del planeta, sería la quiebra de todos los portadores de bitcoin...

Páginas: 1 ... 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 [338] 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 ... 431
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines