bannor> cat 1056884.pl #!/usr/bin/env perl use Modern::Perl; open my $wf, '<', '2of12.txt' or die $!; my @words; while (<$wf>) { chomp; push @words, lc($_) if length($_) > 1 and length($_) < 9 and ! /-/; } @words = keys { map { $_ => 1 } @words }; say "Working with @{[scalar @words]} words"; my @z; for my $w (@words) { my @letters = split //, $w; for my $e (@z) { my $quick = join '', sort split //, $w . $e->[0]; $quick =~ s/(.)\1+/$1/g; next if length($quick) > 8; # bail out early if no chance my $fill = $e->[0]; my $save = $fill; my $new = ''; for my $l (@letters) { unless( $fill =~ s/$l// ){ $new .= $l; } } $save .= $new; if ( length($save) < 9 ) { push @$e, $w; $e->[0] = $save; } } push @z, [$w, $w]; # start a new stack with this word } my $e = ( sort { @$b <=> @$a } @z )[0]; say "Letters: ", shift @$e; say "Number of words: ", scalar @$e; say " $_" for sort @$e; bannor> time perl 1056884.pl Working with 21664 words Letters: soartple Number of words: 198 perl 1056884.pl 3628.31s user 0.14s system 99% cpu 1:00:34.69 total ## Words found: ale, alert, aloe, alp, also, alter, alto, ape, apostle, apse, apt, are, arose, art, arts, as, asp, aster, ate, atop, ear, earl, east, eat, eats, era, eta, la, lap, lapse, laser, last, late, later, lea, leap, leapt, lest, let, lo, lop, lope, lore, lose, loser, lost, lot, lots, oar, oat, ole, opal, opera, opt, or, oral, orate, ore, pa, pal, pale, par, pare, parole, parse, past, paste, pastel, pastor, pat, patrol, pea, peal, pear, peat, pelt, per, pert, peso, pest, pet, petal, petrol, plat, plate, plea, pleat, plot, pol, polar, pole, polestar, pore, port, pose, poser, post, postal, poster, pot, prate, presto, pro, pros, prose, rap, rape, rasp, rate, re, real, reap, rep, repast, rest, roast, roe, role, rope, ropes, rose, rot, rote, sale, salt, sap, sat, sate, sea, seal, sear, seat, sepal, septa, sera, slap, slat, slept, sloe, slop, slope, slot, so, soap, soar, sol, solar, sole, sop, sore, sort, sorta, sot, spa, spar, spare, spat, spate, spear, spelt, splat, spore, sport, spot, sprat, stale, staple, stapler, star, stare, step, stop, store, strap, strep, strop, tale, tape, taper, taps, tar, tare, taro, tarp, tea, teal, tear, to, toe, tole, top, tops, tor, tore, trap, traps, trope, tsar