Something like this?
It takes more code to extract the required info from the provided data than to
solve the problem :)
#!/usr/bin/perl
use strict; # https://perlweeklychallenge.org/blog/perl-weekly-challen
+ge-038/
use warnings;
use Path::Tiny;
use List::Util qw( shuffle sum uniq );
my $config = join '', <DATA>; # extract configuration
my %points = map +( $_, $config =~ /(\d+) points?\n\n.*$_/ ), 'A' .. '
+Z';
my $tiles = join '', sort +
(shuffle map { $config =~ /$_ .x(\d+)/; ($_) x $1 } 'A' .. 'Z')[1 ..
+ 7];
my @best; # words indexed by score
$tiles =~ join '.*', sort split // and $best[sum @points{split //}] .=
+ " $_"
for uniq uc(path('/usr/share/dict/words')->slurp) =~ /^[A-Z]{1,7}$/g
+m;
print "Best for $tiles is$best[-1] score $#best\n";
__DATA__
1 point
A (x8), G (x3), I (x5), S (x7), U (x5), X (x2), Z (x5)
2 points
E (x9), J (x3), L (x3), R (x3), V (x3), Y (x5)
3 points
F (x3), D (x3), P (x5), W (x5)
4 points
B (x5), N (x4)
5 points
T (x5), O (x3), H (x3), M (x4), C (x4)
10 points
K (x2), Q (x2)
|