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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11
81  Programación / Scripting / Re: Eliminar lineas que no cumplan cierta condición en: 4 Febrero 2015, 22:19 pm
Pues entonces, con Perl:

Código
  1. perl -nE "/^(lote|vta)/ and print" file.txt > output.txt
82  Programación / Scripting / Re: Eliminar lineas que no cumplan cierta condición en: 4 Febrero 2015, 16:59 pm
Lo puedes ejecutar desde la línea de comandos o shell.
Código:
egrep "^(lote|vta)" file.txt > outputfile.txt
83  Programación / Scripting / Re: Eliminar lineas que no cumplan cierta condición en: 4 Febrero 2015, 15:26 pm
Código:
egrep "^(lote|vta)" file.txt
84  Programación / Scripting / Re: Programar Python a tiempo real varias personas en: 17 Enero 2015, 14:16 pm
Tienes una lista de software colaborativo en tiempo real en esta página de la Wikipedia inglesa: Collaborative real-time editor: List of collaborative text editing software packages
85  Programación / Scripting / Re: Problema de Monthy Hall en: 26 Diciembre 2014, 03:36 am
Como también se comenta en la página de Wikipedia referido al problema de Monty Hall, una forma de verlo mejor es pensado que hay cien puertas.

Entonces, tienes 1/100 de probabilidad de conseguir el carro. Entonces, en el resto de puertas, hay un 99/100 de probabilidad de que esté el carro.

Va el presentador y abre 98 puertas. En todas ellas hay una cabra. Quedan la puerta escogida por el jugador y una puerta más. Y viene la famosa pregunta de que si quiere cambiar.

Se puede pensar que el 98/100 de probabilidades que había entre las puertas abiertas se ha repartida entre las dos puertas que quedan cerradas, así que estamos hablando de un 50 % de probabilidad, pero no es así.

La puerta del jugador sigue teniendo 1/100 de probabilidad (la original), y la puerta que ha dejado cerrada el presentador, "ha recibido" todas las probabilidades de las 98 puertas abiertas. Mejor dicho: las 99 puertas restantes tenían el 99/100 de probabilidad de tener el carro. Al abrir 98 puertas, y ver que no hay carro, cada puerta abierta confirma tener un 0/100 de probabilidad de tener un carro, y van "trasladando" la probabilidad de tener un carro hacia la puerta que queda cerrada.

En ese momento, la puerta escogida tiene un 1/100 y la puerta restante, un 99/100, así que es lógico hacer el cambio, ya que ganaremos 99 de cada 100 veces que lo intentemos.

La siguiente versión del programa permite ejecutar con un número arbitrario de puertas (tres o más). Jugando con 100 puertas, ganaremos casi siempre.
Código
  1. #!/usr/bin/python
  2. from random import randint
  3.  
  4. VACIA  = 0
  5. CABRA  = 2
  6. PREMIO = 1
  7.  
  8. def colocarPremio():
  9.  puertas = [] # establecemos las puertas
  10.  for i in range(numero):
  11.     puertas.append(VACIA)
  12.  
  13.  puertas[ randint(0,numero-1) ] = PREMIO # colocamos premio en una
  14.  return puertas
  15.  
  16. def seleccionJugador():
  17.  return randint(0,numero-1) # el jugador escoge una puerta
  18.  
  19. def mostrarPuerta(jugador, puertas):
  20.  presentador = 0 # el presentador entra y saluda a todos
  21.  puertas_abiertas = 0
  22.  for i in range(numero):
  23.    if i != jugador and puertas[i] != PREMIO: # el presentador escoge una puerta que no sea la del jugador y no tenga premio
  24.      puertas[i] = CABRA # y muestra la cabra
  25.      puertas_abiertas += 1
  26.  
  27.      if puertas_abiertas == numero-2: # dejamos cerradas solo dos puertas
  28.        break
  29.  return presentador
  30.  
  31. def cambiarPuerta(puertas,presentador, jugador):
  32.  for i in range(numero):
  33.    if i != jugador and puertas[i] != CABRA: # el jugador escoge la otra puerta cerrada
  34.      jugador = i # y se queda con esa
  35.      break # porque no tiene que seguir buscando
  36.  return jugador
  37.  
  38. def juego(cambiar):
  39.  puertas = colocarPremio() # ponemos las puertas y el premio
  40.  jugador = seleccionJugador() # el jugador escoge
  41.  presentador = mostrarPuerta(jugador, puertas) # el presentador muestra
  42.  if cambiar: jugador = cambiarPuerta(puertas, presentador, jugador) # debo cambiar o no
  43.  return puertas[jugador] # tendra premio o no
  44.  
  45. numero  = 100 # numero de puertas
  46. jugadas = 100 # cuantas veces te lo tengo que repetir para convencerte?
  47. cambio  = True # cambiar o no cambiar, he alli el dilema
  48.  
  49. contador = 0 # contador victorias
  50. for i in range(jugadas): contador += (juego(cambio) == PREMIO) # el momento de la verdad... juguemos
  51.  
  52. if not cambio: cambio = 'no ' # formateo cadena bonita
  53. else:  cambio = '' # y por si...
  54.  
  55. print 'en {} jugadas hubo {} victorias si el jugador {}cambiaba de puerta'.format(jugadas,contador,cambio) #resultado
  56.  
Para completar, aquí está la misma versión del programa, en Perl:
Código
  1. #!/usr/bin/perl
  2. #
  3. # Monty Hall
  4. #
  5. # https://es.wikipedia.org/wiki/Problema_de_Monty_Hall
  6. #
  7. use Modern::Perl 2014;
  8. use utf8::all;
  9.  
  10. ## Constantes
  11. use constant {
  12.    CERRADA => 0,
  13.    CABRA   => 1,
  14.    COCHE   => 2,
  15.    False => 0,
  16.    True  => 1,
  17. };
  18. my $número_de_puertas = 3;
  19. my $número_de_jugadas = 100;
  20. my $hace_el_cambio    = True;
  21.  
  22. ## Variables
  23. my @puertas;
  24. my $puerta_elegida;
  25. my $victorias = 0;
  26.  
  27. ## Proceso
  28. for (1 .. $número_de_jugadas) {
  29.    $victorias++ if juego() == COCHE;
  30. }
  31.  
  32. say "En $número_de_jugadas jugadas con $número_de_puertas puertas "
  33.  . "hubo $victorias victorias si el jugador "
  34.  . ($hace_el_cambio ? 'sí':'no')
  35.  . " cambiaba de puerta"
  36.  ;
  37.  
  38. ## subrutinas
  39. sub juego {
  40.  
  41.    inicializar_puertas();
  42.    colocar_premio();
  43.    jugador_selecciona_puerta();
  44.    mostrar_puertas_con_cabras();
  45.  
  46.    if ($hace_el_cambio) {
  47.        jugador_cambia_de_puerta();
  48.    }
  49.  
  50.    return $puertas[$puerta_elegida];
  51. }
  52.  
  53. sub inicializar_puertas {
  54.    @puertas = (CERRADA) x $número_de_puertas;
  55. }
  56.  
  57. sub colocar_premio {
  58.    $puertas[ rand @puertas ] = COCHE;
  59. }
  60.  
  61. sub jugador_selecciona_puerta {
  62.    $puerta_elegida = int rand @puertas;
  63. }
  64.  
  65. sub mostrar_puertas_con_cabras {
  66.  
  67.    for my $i (1 .. $número_de_puertas - 2) { # abrir todas menos la del coche y la elegida
  68.  
  69.        my $j = $i-1; # los índices en los array empiezan en 0
  70.  
  71.        $j++ until $puertas[$j] == CERRADA  and  $j != $puerta_elegida;
  72.  
  73.        $puertas[$j] = CABRA; # ¡Bééééé-ééé!
  74.    }
  75. }
  76.  
  77. sub jugador_cambia_de_puerta {
  78.  
  79.    # Buscar la siguiente puerta que esté cerrada
  80.    for my $i (0 .. $#puertas) {
  81.  
  82.        if ($puerta_elegida != $i  and  $puertas[$i] != CABRA) {
  83.            $puerta_elegida  = $i; # será la nueva elegida
  84.            last;
  85.        }
  86.    }
  87. }
  88.  
86  Programación / Scripting / Re: Substitución de texto a partir de etiquetas en: 3 Diciembre 2014, 13:08 pm
Con el módulo Chess::Png de Perl lo tienes muy sencillo:

Código
  1. use Chess::Pgn;
  2. $p = new Chess::Pgn("2KTSDEF.PGN" ) || die "2KTSDEF.PGN not found";
  3. while ( $p->ReadGame )
  4. {
  5.  print $p->white ,"<=>",$p->black, "\n";
  6. }
  7. $p->quit();
  8.  
  9. $p->white(Kouatly);
  10. $p->black(Kasparov);

Por ejemplo, para sacar el resultado, sería tan sencillo como

Código
  1. print $p->result;
87  Programación / Scripting / Re: Repetir Encabezado delante de lineas que encabeza en: 11 Noviembre 2014, 01:06 am
Esta es mi versión, en Perl.

Suponemos que la cabecera comienza con un número.
Código
  1. #!/usr/bin/perl
  2. use autodie;
  3.  
  4. my $encabezado;
  5.  
  6. open my $entrada, '<', 'kk.txt';
  7. open my $salida,  '>', 'kk1.txt';
  8.  
  9. while (<$entrada>) {
  10.    chomp;
  11.  
  12.    if (/^\d+/) { # si es la primera línea, es el encabezado
  13.        $encabezado = $_;
  14.    }
  15.    elsif (/^$/) { # si es la última, solo una línea en blanco
  16.        print $salida "\n";
  17.    }
  18.    else { # si no, es una línea normal
  19.        print $salida "$encabezado, $_\n";
  20.    }
  21. }
  22.  
  23. close $entrada;
  24. close $salida;
88  Programación / Programación General / Re: Perl, Python o Ruby en: 19 Octubre 2014, 02:53 am
Debes aprender los tres, en el siguiente orden: Perl, Ruby, Python.
89  Programación / Scripting / Granada Perl Worshop 2014 en: 16 Junio 2014, 04:06 am
El próximo día 27 de junio, nos juntaremos los perleros españoles (y quien más quiera venir) en el ETSIIT de Granada, para celebrar el primer Granada Perl Workshop 2014.

La asistencia es gratuita, pero antes debéis apuntaros (o no tendréis la correspondiente camiseta  ;-) ).

Consejo: traed preparados vuestros currículum.
90  Programación / Scripting / Re: problema con switch en perl en: 16 Junio 2014, 03:57 am
Ya que estás aprendiendo Perl, te recomiendo que no uses el módulo Switch.

Siempre ha tenido errores. En estos momentos, marca que sólo tiene 4 errores denunciados, pero seguro que tiene más.

Fíjate lo que dice en su descripción:

Switch - A switch statement for Perl, do not use if you can use given/when

"No lo uses si puedes usar given/when".

given/when forma parte de los nuevos intérpretes de Perl, desde la versión v5.10. Para hacer uso de él (si tienes un Perl moderno), te vale con poner al principio del programa

use v5.10;

o también

use feature 'switch';

(Tienes más información sobre esto en perldoc perlsyn. Busca por la sección Switch statements)


La comparación de caracteres, efectivamente se hace con 'eq', pero... no te funciona porque en la línea 59, al leer desde el teclado, estás incluyendo el carácter de nueva línea (cuando el usuario pulsa la tecla de Entrar o Retorno).

Antes de hacer la comparación, debes asegurarte de que has eliminado esos caracteres, y sólo te quedas con la opción que el usuario ha elegido. Para ello, usa la función chomp(). Quedaría así:

Código
  1. $opcion = <stdin>;
  2.                                 chomp $opcion; # quitar caracteres de nueva línea

Páginas: 1 2 3 4 5 6 7 8 [9] 10 11
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines