#!/usr/bin/perl use strict; # https://perlweeklychallenge.org/blog/perl-weekly-challenge-038/ use warnings; use Path::Tiny; use List::Util qw( shuffle sum uniq ); my $config = join '', ; # 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}$/gm; 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)