#!/usr/bin/perl -w
use strict;
my @AoA = (
['a','b','c'],
['a','b','c'],
['a','b','d'],
['a','b','d'],
);
my %combinations;
feedme(@AoA);
sub feedme {
my %uniques;
for my $ary ( @_ ) {
my $sample = join '', @$ary;
if ( exists $combinations{ $sample } ) { ++$uniques{ $combinations{ $sample } };
} else {
fill_combinations( @$ary );
++$uniques{ $combinations{ $sample } };
}
}
printf "%s found %d times\n", $_, $uniques{ $_ }; }
}
sub fill_combinations(@) {
# Note: this function needs to be reworked for >3 elements in an array
my $combination = join '', @_;
my $index = 0;
while ( $index < @_ ) {
my @left = split $_[$index], $combination; my $fw = join '', $_[$index], @left; $combinations{ $fw } = $combination;
$combinations{ $rv } = $combination;
$index++;
}
}
IyEvdXNyL2Jpbi9wZXJsIC13Cgp1c2Ugc3RyaWN0OwoKbXkgQEFvQSA9ICgKICAgIFsnYScsJ2InLCdjJ10sCiAgICBbJ2EnLCdiJywnYyddLAogICAgWydhJywnYicsJ2QnXSwKICAgIFsnYScsJ2InLCdkJ10sCiAgICBbIHF3KGEgYiBjKSBdLAogICAgWyBxdyhjIGIgYSkgXSwKICAgIFsgcXcoYiBjIGEpIF0sCiAgICBbIHF3KGEgYiBkKSBdLAopOwoKbXkgJWNvbWJpbmF0aW9uczsKZmVlZG1lKEBBb0EpOwoKCnN1YiBmZWVkbWUgewoJbXkgJXVuaXF1ZXM7CgkKCWZvciBteSAkYXJ5ICggQF8gKSB7CgkJbXkgJHNhbXBsZSA9IGpvaW4gJycsIEAkYXJ5OwoJCQoJCWlmICggZXhpc3RzICRjb21iaW5hdGlvbnN7ICRzYW1wbGUgfSApIHsKCQkJKyskdW5pcXVlc3sgJGNvbWJpbmF0aW9uc3sgJHNhbXBsZSB9IH07CgkJfSBlbHNlIHsKCQkJZmlsbF9jb21iaW5hdGlvbnMoIEAkYXJ5ICk7CgkJCSsrJHVuaXF1ZXN7ICRjb21iaW5hdGlvbnN7ICRzYW1wbGUgfSB9OwoJCX0KCX0KCQoJZm9yIChrZXlzICV1bmlxdWVzKSB7CgkJcHJpbnRmICIlcyBmb3VuZCAlZCB0aW1lc1xuIiwgJF8sICR1bmlxdWVzeyAkXyB9OwoJfQp9CgpzdWIgZmlsbF9jb21iaW5hdGlvbnMoQCkgewoJIyBOb3RlOiB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld29ya2VkIGZvciA+MyBlbGVtZW50cyBpbiBhbiBhcnJheQoJbXkgJGNvbWJpbmF0aW9uID0gam9pbiAnJywgQF87CgkKCW15ICRpbmRleCA9IDA7Cgl3aGlsZSAoICRpbmRleCA8IEBfICkgewoJCW15IEBsZWZ0ID0gc3BsaXQgJF9bJGluZGV4XSwgJGNvbWJpbmF0aW9uOwoJCW15ICRmdyA9IGpvaW4gJycsICRfWyRpbmRleF0sIEBsZWZ0OwoJCW15ICRydiA9IGpvaW4gJycsICRfWyRpbmRleF0sIHNjYWxhciByZXZlcnNlIEBsZWZ0OwoJCSRjb21iaW5hdGlvbnN7ICRmdyB9ID0gJGNvbWJpbmF0aW9uOwoJCSRjb21iaW5hdGlvbnN7ICRydiB9ID0gJGNvbWJpbmF0aW9uOwoJCSRpbmRleCsrOwoJfQp9Cg==