aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWalt Mankowski <waltman@pobox.com>2020-09-04 06:28:15 -0400
committerWalt Mankowski <waltman@pobox.com>2020-09-04 06:28:15 -0400
commitccff7d7e2cd398bc83ffb9833038c615d3ec982f (patch)
treec8c143a7ad6af85922ea5c5e6aaa514adfce4509
parenta1e3bd722a9fe8d2725998f18c59c0989a3e37aa (diff)
downloadperlweeklychallenge-club-ccff7d7e2cd398bc83ffb9833038c615d3ec982f.tar.gz
perlweeklychallenge-club-ccff7d7e2cd398bc83ffb9833038c615d3ec982f.tar.bz2
perlweeklychallenge-club-ccff7d7e2cd398bc83ffb9833038c615d3ec982f.zip
added code to scan the grid for words
This appears to be working but still needs testing and cleanup.
-rw-r--r--challenge-076/walt-mankowski/perl/ch-2.pl59
1 files changed, 53 insertions, 6 deletions
diff --git a/challenge-076/walt-mankowski/perl/ch-2.pl b/challenge-076/walt-mankowski/perl/ch-2.pl
index c7ab9b49cc..48436c9a0e 100644
--- a/challenge-076/walt-mankowski/perl/ch-2.pl
+++ b/challenge-076/walt-mankowski/perl/ch-2.pl
@@ -24,16 +24,45 @@ use autodie;
my $MIN_LEN = 5;
my ($grid_name, $dict_name) = @ARGV;
my $grid = read_grid($grid_name);
-for my $row ($grid->@*) {
- $, = ", ";
- say $row->@*;
-}
+my $rows = $grid->@*;
+my $cols = $grid->[0]->@*;
+
+# for my $row ($grid->@*) {
+# $, = ", ";
+# say $row->@*;
+# }
my ($words, $prefixes) = parse_dict($dict_name, $MIN_LEN);
-for my $k (sort keys %$prefixes) {
- say $k;
+# for my $k (sort keys %$prefixes) {
+# say $k;
+# }
+# for my $k (sort keys %$words) {
+# say $k;
+# }
+
+my @dirs = ([ 0, 1], # e
+ [-1, 1], # ne
+ [-1, 0], # n
+ [-1, -1], # nw
+ [ 0, -1], # w
+ [ 1, -1], # sw
+ [ 1, 0], # s
+ [ 1, 1], # se
+ );
+
+my @found;
+for my $row (0..$rows-1) {
+ for my $col (0..$cols-1) {
+ next if $grid->[$row][$col] eq ' ';
+ for my $dir (@dirs) {
+ push @found, search_grid($grid, $row, $col, $dir, $words, $prefixes);
+ }
+ }
}
+for my $word (sort @found) {
+ say $word;
+}
sub read_grid($grid_name) {
my @grid;
@@ -75,6 +104,7 @@ sub parse_dict($dict_name, $min_len) {
chomp $word;
next unless length($word) >= $min_len;
next unless $word =~ /^[a-z]+$/;
+ $word =~ tr/a-z/A-Z/;
$words{$word} = 1;
for my $len (1..length($word)) {
@@ -83,3 +113,20 @@ sub parse_dict($dict_name, $min_len) {
}
return (\%words, \%prefixes);
}
+
+sub search_grid($grid, $row, $col, $dir, $words, $prefixes) {
+# say "$row $col @$dir";
+ my @found;
+ my $s = $grid->[$row][$col];
+ while (defined $prefixes->{$s}) {
+ $row += $dir->[0];
+ $col += $dir->[1];
+ $s .= $grid->[$row][$col];
+ push @found, $s if defined $words->{$s};
+ }
+ # if (@found) {
+ # say "found @found";
+ # }
+
+ return @found;
+}