perl, v5.8.0 built for MSWin32-x86-multi-thread
####
#!/usr/bin/perl
use strict;
use warnings;
sub dump_ref
{
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = ((ref $_[0]) =~ /ARRAY/i)?0:1;
$Data::Dumper::Sortkeys = sub{no warnings; return [ sort{$a<=>$b || $a cmp $b} keys %{$_[0]} ]; use warnings;};
$_[1] = "Var" if(!defined $_[1]);
print "$_[1] = \n";
print Dumper($_[0]);
print "\n";
}
##
##
my @array1 = (1 .. 20);
my @array2 = (10 .. 30);
my @array3 = (19 .. 40);
my @unique_numbers = do{
local %_;
undef @_{@array1, @array2, @array3};
sort {$a<=>$b} keys %_;
};
dump_ref(\@unique_numbers, '@unique_numbers');
__OUTPUT__
@unique_numbers =
['1','2','3','4','5','6','7','8','9','10',
'11','12','13','14','15','16','17','18','19','20',
'21','22','23','24','25','26','27','28','29','30',
'31','32','33','34','35','36','37','38','39','40']
##
##
my %unique_sets;
push @{$unique_sets{$_}},$_ for(@array1, @array2, @array3);
dump_ref(\%unique_sets, '%unique_sets');
__OUTPUT__
%unique_sets =
{
'1' => [1],
'2' => [2],
'3' => [3],
'4' => [4],
'5' => [5],
'6' => [6],
'7' => [7],
'8' => [8],
'9' => [9],
'10' => [10,10],
'11' => [11,11],
'12' => [12,12],
'13' => [13,13],
'14' => [14,14],
'15' => [15,15],
'16' => [16,16],
'17' => [17,17],
'18' => [18,18],
'19' => [19,19,19],
'20' => [20,20,20],
'21' => [21,21],
'22' => [22,22],
'23' => [23,23],
'24' => [24,24],
'25' => [25,25],
'26' => [26,26],
'27' => [27,27],
'28' => [28,28],
'29' => [29,29],
'30' => [30,30],
'31' => [31],
'32' => [32],
'33' => [33],
'34' => [34],
'35' => [35],
'36' => [36],
'37' => [37],
'38' => [38],
'39' => [39],
'40' => [40]
}
##
##
my %unique_counts = do{
local %_;
$_{$_}++ for(@array1, @array2, @array3);
%_;
};
dump_ref(\%unique_counts, '%unique_counts');
__OUTPUT__
%unique_counts =
{
'1' => 1,
'2' => 1,
'3' => 1,
'4' => 1,
'5' => 1,
'6' => 1,
'7' => 1,
'8' => 1,
'9' => 1,
'10' => 2,
'11' => 2,
'12' => 2,
'13' => 2,
'14' => 2,
'15' => 2,
'16' => 2,
'17' => 2,
'18' => 2,
'19' => 3,
'20' => 3,
'21' => 2,
'22' => 2,
'23' => 2,
'24' => 2,
'25' => 2,
'26' => 2,
'27' => 2,
'28' => 2,
'29' => 2,
'30' => 2,
'31' => 1,
'32' => 1,
'33' => 1,
'34' => 1,
'35' => 1,
'36' => 1,
'37' => 1,
'38' => 1,
'39' => 1,
'40' => 1
}
##
##
my %duplicates = do{
local %_;
$_{$_}++ for(@array1, @array2, @array3);
delete @_{ (map{ ($_{$_}==1) ? $_ : () ; } keys %_ ) };
%_;
};
dump_ref(\%duplicates, '%duplicates');
__OUTPUT__
%duplicates =
{
'10' => 2,
'11' => 2,
'12' => 2,
'13' => 2,
'14' => 2,
'15' => 2,
'16' => 2,
'17' => 2,
'18' => 2,
'19' => 3,
'20' => 3,
'21' => 2,
'22' => 2,
'23' => 2,
'24' => 2,
'25' => 2,
'26' => 2,
'27' => 2,
'28' => 2,
'29' => 2,
'30' => 2
}
##
##
my %non_duplicates = do{
local %_;
$_{$_}++ for(@array1, @array2, @array3);
delete @_{ (map{ ($_{$_}>1) ? $_ : () ; } keys %_ ) };
%_;
};
dump_ref(\%non_duplicates, '%non_duplicates');
__OUTPUT__
%non_duplicates =
{
'1' => 1,
'2' => 1,
'3' => 1,
'4' => 1,
'5' => 1,
'6' => 1,
'7' => 1,
'8' => 1,
'9' => 1,
'31' => 1,
'32' => 1,
'33' => 1,
'34' => 1,
'35' => 1,
'36' => 1,
'37' => 1,
'38' => 1,
'39' => 1,
'40' => 1
}
##
##
my %unique_descriptive = do {
local %_;
for(@array1, @array2, @array3){
$_{$_}->{count}++ ;
push @{$_{$_}->{values}},$_;
}
%_;
};
dump_ref(\%unique_descriptive, '%unique_descriptive');
__OUTPUT__
%unique_descriptive =
{
'1' => {
'count' => 1,
'values' => [1]
},
'2' => {
'count' => 1,
'values' => [2]
},
...clipped for brevity...
'11' => {
'count' => 2,
'values' => [11,11]
},
'12' => {
'count' => 2,
'values' => [12,12]
},
...clipped for brevity...
'19' => {
'count' => 3,
'values' => [19,19,19]
},
'20' => {
'count' => 3,
'values' => [20,20,20]
},
'21' => {
'count' => 2,
'values' => [21,21]
},
...clipped for brevity...
'40' => {
'count' => 1,
'values' => [40]
}
}
##
##
my %max = do{
local %_ = %unique_descriptive;
%{
shift @{[
map{$_->[2]}
sort{$b->[0] <=> $a->[0] || $b->[1] <=> $a->[1]}
map{[$_{$_}->{count}, $_, $_{$_}]} keys %_
]}
};
};
dump_ref(\%max,'%max');
__OUTPUT__
%max =
{
'count' => 3,
'values' => [20,20,20]
}
##
##
my %min = do{
local %_ = %unique_descriptive;
%{$_{shift @{[
sort{ $_{$a}->{count} <=> $_{$b}->{count} || $b <=> $a} keys %_
]}}};
};
dump_ref(\%min,'%min');
__OUTPUT__
%min =
{
'count' => 1,
'values' => [40]
}
##
##
shift @{[
map{$_->[2]}
sort{$a->[0] <=> $b->[0] || $a->[1] <=> $b->[1]}
map{[$_{$_}->{count}, $_, $_{$_}]} keys %_
]}
##
##
... = do {
local %_ = %unique_descriptive;
%{$_{shift @{[
sort{ $_{$a}->{count} <=> $_{$b}->{count} || $b <=> $a} keys %_
]}}};
};
##
##
#!/usr/bin/perl -w
use strict;
my %d = map{
#cleanup the line
chomp;
#does it match
/^([\d\.]+) \w+/ ? ($1, $_) : ();
}map{
#use @ARGV and <> magic to
#read in each line from each file.
local @ARGV = ($_);
<>;
}; #glob in all files that match
open(OUTPUT, ">unique.dat") or die "a horrible death... $!";
print OUTPUT, $d{$_}."\n" for(sort keys %d);
close OUTPUT;