• Publicidad

Generar combinaciones de cadenas

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Generar combinaciones de cadenas

Notapor httpe » 2010-09-25 14:36 @650

Hola.

Necesito generar strings a partir de ciertos caracteres, pero no aleatoriamente, sino una combinación tras otra siguiendo el orden predefinido de los caracteres, hasta completar todas las posibles combinaciones.

Como no sé si me he explicado bien voy a intentar hacerlo con un ejemplo:

Tengo los siguientes caracteres
Código: Seleccionar todo
abc


Strings generadas a partir de los caracteres
Código: Seleccionar todo
Strings de 1 carácter de longitud
a
b
c
Strings de 2 caracteres de longitud
aa
ab
ac
ba
bb
bc
ca
cb
cc
Strings de 3 caracteres de longitud
...


No sé qué busco exactamente para hacer esto. Si alguien es tan amable de guiarme... :wink:

Gracias.
Un saludo.
httpe
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-08-04 12:59 @583

Publicidad

Re: Generar combinaciones de cadenas

Notapor explorer » 2010-09-25 19:37 @859

Bienvenido a los foros de Perl en Español, httpe.

Puedes usar el módulo Math::Combinatorics.

En este hilo tienes un ejemplo para obtener una salida prácticamente idéntica a lo que quieres obtener.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Generar combinaciones de cadenas

Notapor httpe » 2010-09-26 08:23 @390

Hola explorer, gracias por la bienvenida.

He estado mirando los enlaces que has puesto, pero al final he conseguido lo que quería con el módulo Algorithm::Combinatorics.

Siguiendo el ejemplo que ponía en el primer mensaje:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Algorithm::Combinatorics "variations_with_repetition";
my @combinaciones = variations_with_repetition([qw(a b c)], 2); #Carácteres "abc", 2 carácteres de longitud.
for $c (@combinaciones) {
    print @$c, "\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Salida:
Código: Seleccionar todo
aa
ab
ac
ba
bb
bc
ca
cb
cc


Gracias.
Saludos.
httpe
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-08-04 12:59 @583


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 40 invitados