#! perl -slw use strict; my %stats; while( <> ) { chomp; next if length > 8; my $word = $_; push @{ $stats{ $_ } }, $word for split '', $word; } my @freq = sort{ @{ $stats{ $b } } <=> @{ $stats{ $a } }; } keys %stats; my %letters; ++$letters{ $_ } for @freq[ 0 .. 7 ]; my %uniq; for my $l ( keys %letters ) { WORD: for my $word ( @{ $stats{ $l } } ) { my %letters = %letters; for my $c ( split '', $word ) { unless( exists $letters{ $c } and --$letters{ $c } >= 0 ) { #print( "rejected: $word" ); delete $uniq{ $word }; next WORD ; } } ++$uniq{ $word } ; } } print "@{[ sort keys %letters ]}: ", scalar keys %uniq;