Lun May 07, 2007 9:26 pm
|
 |
patito
Perlero Nuevo

|
Registrado: 07 May 2007
Mensajes: 15
|
|
| rand |
|
|
| Cómo crear números aleatorios rand sin que se dupliquen. |
|
|
|
Mar May 08, 2007 12:47 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Mar May 08, 2007 6:41 am
|
 |
patito
Perlero Nuevo

|
Registrado: 07 May 2007
Mensajes: 15
|
|
|
|
|
| Algún código ayudaría mucho. |
|
Mar May 08, 2007 11:44 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
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 |
|
Mar May 08, 2007 12:27 pm
|
 |
patito
Perlero Nuevo

|
Registrado: 07 May 2007
Mensajes: 15
|
|
|
|
|
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";
} |
|
|
Mar May 08, 2007 1:57 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 478
Ubicación: Frente al monitor
|
|
|
|
|
| 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";
}
} |
|
|
Powered by phpBB © 2001, 2005 phpBB Group
|