http://www.perlmonks.org?node_id=1057006


in reply to Challenge: 8 Letters, Most Words

Another brute force method that puts all words in 2of12inf.txt in 8 letter classes and counts their members. Runs 40mins on my machine.

use strict; use warnings; use Data::Dumper; sub fits { my( $class, $subclass ) = @_; return 0 if length( $class ) < length( $subclass ); $class =~ s/$_// or return 0 for split //, $subclass; return 1; } open my $dict, "<", "2of12inf.txt" or die "Cannot open dictionary!\n"; my $words = do { local $/; <$dict> }; close $dict; my @words = sort { length($b) <=> length($a) } sort $words =~ /\b(\w{1 +,8})\b/g; my %classes; my $cnt = 0; for my $w (@words) { my $ws = join '', sort split //, $w; my $fitted = 0; for my $class (keys %classes) { if( fits( $class, $ws ) ) { $classes{$class}{$w}++; $fitted++; } } $classes{$ws}{$w}++ unless $fitted; } my @sorted = sort { scalar keys %{$classes{$b}} <=> scalar keys %{$cla +sses{$a}} } keys %classes; for( @sorted ) { print "$_: ", scalar keys %{$classes{$_}}, "\n"; }

and here are my top ten:

aeinprst: 346 aeilprst: 344 adeiprst: 332 aeimprst: 328 adeilrst: 319 adeoprst: 316 aeilnpst: 314 adeinrst: 313 aeloprst: 313 aeilnrst: 312