#!/usr/bin/perl

use 5.040;

# v2 - ahora se trata de que el número de sets efectivos pueda ser 1, 2 o 3
# pun intended: que nadie copie esta idea para los nuevos grupos de funcionarios

my @a = 0..9;
my $na = scalar(@a);
my @b = 'a'..'z';
my $nb = scalar(@b);
my @c = 'A'..'Z';
my $nc = scalar(@c);

my ($i,$j,$k);
my (%hash, $msg, $count);

alarm (30 * 60);   # media hora
my $iter = 0;
while (++$iter){
    $msg = generator2();              # generador indeseable que hace lo deseable
    $hash{$msg}++;
    if ($hash{$msg} == 1){
	$count++;
	say "$count -> $msg";
    }
}

exit 2;




sub generator2 {
    $i = $a[ int (rand()*$na) ];
    return $i if ($iter % ($na+$nb+$nc) == 0);
    
    $j = $b[ int (rand()*$nb) ];
    if ($iter % ($nb+$nc) == 0){
	return $i.$j;
    }elsif ($iter % ($na+$nc) == 0){
	return $j.$i;
    }
	
    $k = $c[ int (rand()*$nc) ];
    return (join '', jlm( ( $i, $j, $k ) ));
}
    
sub jlm {
    # An alternate shuffle
    my @deck = @_;
    my @deck2;
    my $n = scalar(@deck);
    while ($n){
	my $t = int ($n)*rand(); 
	push @deck2, splice(@deck,$t,1);
	$n--;
    }
    return @deck2;
}
    
    
