Guest User

Untitled

a guest
Jul 20th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #
  3. # Bulk of the load credited to tybalt89 on irc.perl.org
  4. #
  5. use strict;
  6. use Getopt::Std;
  7.  
  8.  
  9. my @words;
  10. my $given;
  11. my @matches;
  12. my %sizes;
  13. my %opt;
  14. my $wordlist = "/usr/share/dict/words";
  15.  
  16. getopts('c:s:e:w:a:', \%opt);
  17.  
  18. if (!$opt{'c'}) {
  19. print "Usage: $0 -c <chars> [-s <start chars>] [-e <end chars>] [-w <path to wordlist>] [-a <anywhere chars>]\n";
  20. exit;
  21. }
  22. if ($opt{'w'}) {
  23. $wordlist = $opt{'w'};
  24. }
  25.  
  26. open(my $WL_FP, $wordlist) || die "Could not open wordlist \"$wordlist\": $!\n";
  27. @words = <$WL_FP>;
  28. close($WL_FP);
  29. map (s/[\r\n]$//, @words);
  30.  
  31. $given = $opt{'c'};
  32. if ($opt{'s'}) { $given .= $opt{'s'}; }
  33. if ($opt{'e'}) { $given .= $opt{'e'}; }
  34. if ($opt{'a'}) { $given .= $opt{'a'}; }
  35.  
  36. $given = join '', sort split //, $given;
  37.  
  38. foreach my $word (@words) {
  39. if ($opt{'a'} && $word !~ /$opt{'a'}/) { next; }
  40. if ($opt{'s'} && $word !~ /^$opt{'s'}/) { next; }
  41. if ($opt{'e'} && $word !~ /$opt{'e'}$/) { next; }
  42.  
  43. my $pat = join '.*', sort split //, $word;
  44.  
  45. if ($given =~ $pat) {
  46. my $word_len = length($word);
  47. if ($word_len < 2) { next; }
  48. if (!defined $sizes{$word_len}) {
  49. my @tmp;
  50. $sizes{$word_len} = \@tmp;
  51. }
  52. push @{$sizes{$word_len}}, $word;
  53. }
  54. }
  55.  
  56. foreach my $size (sort keys %sizes) {
  57. print "$size: " . join(', ',@{$sizes{$size}}) . "\n" ;
  58. }
Add Comment
Please, Sign In to add comment