Hi,
In the script below, I have an array @datas with its elements consisting of 
numbers like this :-

my @datas = (
    '1 2 3',  '1 2 4', '1 2 7',  '1 2 8', '1 2 9', '1 6 7',
    '1 7 12', '2 6 7', '4 5 10', '4 5 15'
);

Out of the above list, I wish to generate a seperate array so that among their 
elements, there should not be any 2 numbers that can match and so the output 
should be :-     1 2 3  
            1 6 7
            4 5 10

I therefore have written the script below and have tested the script to be 
working. What is the easier way to write this script?
Thanks

##### start of script ##############
use strict;
use warnings;

my @datas = (
    '1 2 3',  '1 2 4', '1 2 7',  '1 2 8', '1 2 9', '1 6 7',
    '1 7 12', '2 6 7', '4 5 10', '4 5 15'
);
my $numbers_wanted = 2;

my @datawanted     = ();
my $marker         = scalar @datas;
my $splice_counter = 0;
my @datas_iterator = ();

while ($marker) {
    $splice_counter = 0;
    push @datawanted, splice @datas, 0, 1;
    my @comparator1         = split / /, $datawanted[-1];
    my $temp_datas_iterator = scalar @datas - 1;

    foreach ( 0 .. $temp_datas_iterator ) {
        my $counter     = 0;
        my @comparator2 = split / /, $datas[ $_ - $splice_counter ];

        foreach (@comparator2) {
            my $a = $_;
            foreach (@comparator1) {
                if ( $a == $_ ) {
                    $counter++;
                }
            }
        }
        if ( $counter >= $numbers_wanted ) {
            splice @datas, $_ - $splice_counter, 1;
            $splice_counter++;
        }
    }
    $marker = scalar @datas;
}

foreach (@datawanted) {
    print "$_\n";
}

Reply via email to