Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

rand

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Lun May 07, 2007 9:26 pm
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
rand Responder citando

Cómo crear números aleatorios rand sin que se dupliquen.
Mensaje Mar May 08, 2007 12:47 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español.

Generar números aleatorios es algo muy complicado. A la larga, se van a repetir. Más información en la página de Wikipedia.

En Perl, se podría hacer algo como recordar los números que han salido, en una hash, y repetir la tirada en el caso de repetir algún número.

O al revés: tener los números o elementos a elegir dentro de un array y con la ayuda de splice sacarlos de forma aleatoria.

Hay módulos en CPAN sobre este tema. Por ejemplo, también, para barajar cartas.
Mensaje Mar May 08, 2007 6:41 am
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
Responder citando

Algún código ayudaría mucho.
Mensaje Mar May 08, 2007 11:44 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

Hola, antes de queres ver código deberías de pensar bien que es lo que deseas hacer, por ejemplo para hacer lo que dice explorer de usar los datos de un array puedes hacer:

Perl:
my @data = (1,2,3,4,5,6,7,8,9);
my $rand = int(rand(@data));

print "Content-type: text/html\n\n";
print "$data[$rand]";
exit;


Esa función te tirará rand del 1 al 9 podrías almacenar esos valores en una base de datos e ir sacando los números que ya salieron... hasta que se quede con 1 solo, y ahí a recargar...

Saludos
Mensaje Mar May 08, 2007 12:27 pm
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
Responder citando

Agradezco el apoyo, y es por eso que comparto el código:

Perl:
for $j (1..30) {
    do {
        $sol = int(rand 30)+1;
    } while $used[$sol]++;

    print "$sol\n";
}
Mensaje Mar May 08, 2007 1:57 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 478
Ubicación: Frente al monitor
Responder citando

Perl:
#!/usr/bin/env perl
use Config;

print "Your random number generator repeats itself after\n";
print "no more than ", 2 ** $Config{randbits}, " numbers.\n";

srand(1);

if (int(rand() * (2 ** $Config{randbits})) == 16838){
  print "Uh oh! Looks like your computer uses the ANSI example.\n";
  print "I bet the next three rands are 5758, 10113 and 17515.\n";

 foreach (1, 2, 3){
  print rand() * (2 ** $Config{randbits}), "\n";
 }
}
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group