aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-09-03 11:04:48 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-09-03 11:04:48 +0100
commit348b3659c0568020f74f932a414e77c87e70ecb7 (patch)
tree7ac82093a4b76bed14d5975426c13b28861bba5c
parentd88b8e77e9948bb4d8c04cb7bf61948863522559 (diff)
downloadperlweeklychallenge-club-348b3659c0568020f74f932a414e77c87e70ecb7.tar.gz
perlweeklychallenge-club-348b3659c0568020f74f932a414e77c87e70ecb7.tar.bz2
perlweeklychallenge-club-348b3659c0568020f74f932a414e77c87e70ecb7.zip
- Added solutions by Neil Bowers.
-rw-r--r--challenge-076/neil-bowers/blog.txt1
-rw-r--r--challenge-076/neil-bowers/perl/ch-2.pl53
-rw-r--r--challenge-076/neil-bowers/perl/pwc.txt19
3 files changed, 73 insertions, 0 deletions
diff --git a/challenge-076/neil-bowers/blog.txt b/challenge-076/neil-bowers/blog.txt
new file mode 100644
index 0000000000..7efb982ec0
--- /dev/null
+++ b/challenge-076/neil-bowers/blog.txt
@@ -0,0 +1 @@
+http://neilb.org/2020/09/03/wordsearch.html
diff --git a/challenge-076/neil-bowers/perl/ch-2.pl b/challenge-076/neil-bowers/perl/ch-2.pl
new file mode 100644
index 0000000000..8f5d5338a6
--- /dev/null
+++ b/challenge-076/neil-bowers/perl/ch-2.pl
@@ -0,0 +1,53 @@
+#!/usr/local/bin/perl
+#
+# solve-wordsearch - search for words (from a word list) in a wordsearch grid
+#
+use strict;
+use warnings;
+use v5.20;
+use feature qw/ signatures /;
+no warnings qw/ experimental::signatures /;
+use File::Slurper qw/ read_lines /;
+
+die "usage: $0 <grid-file> <word-list>\n" unless @ARGV == 2;
+
+my @grid = map { [split('',lc($_))] } read_lines($ARGV[0]);
+my %is_a_word = map { lc($_) => 1 } read_lines($ARGV[1]);
+my $num_cols = int(@{ $grid[0] });
+my $num_rows = int(@grid);
+my %found;
+
+scan_grid_for_words();
+print_words();
+
+sub scan_grid_for_words {
+ for (my $row = 0; $row < $num_rows; ++$row) {
+ for (my $col = 0; $col < $num_cols; ++$col) {
+ foreach my $row_delta (-1, 0, 1) {
+ foreach my $col_delta (-1, 0, 1) {
+ next if $row_delta == 0 && $col_delta == 0;
+ scan_line_for_words($row, $col, $row_delta, $col_delta);
+ }
+ }
+ }
+ }
+}
+
+sub scan_line_for_words ($row, $col, $row_delta, $col_delta) {
+ my $word = "";
+
+ while (on_grid($row,$col)) {
+ $word .= $grid[$row][$col];
+ $found{$word}++ if $is_a_word{$word};
+ $row += $row_delta;
+ $col += $col_delta;
+ }
+}
+
+sub on_grid ($row, $col) {
+ return ($row < $num_rows && $row >= 0 && $col >= 0 && $col < $num_cols);
+}
+
+sub print_words {
+ print "$_\n" for sort keys %found;
+}
diff --git a/challenge-076/neil-bowers/perl/pwc.txt b/challenge-076/neil-bowers/perl/pwc.txt
new file mode 100644
index 0000000000..31cf2e0fd8
--- /dev/null
+++ b/challenge-076/neil-bowers/perl/pwc.txt
@@ -0,0 +1,19 @@
+B I D E M I A T S U C C O R S T
+L D E G G I W Q H O D E E H D P
+U S E I R U B U T E A S L A G U
+N G N I Z I L A I C O S C N U D
+T G M I D S T S A R A R E I F G
+S R E N M D C H A S I V E E L I
+S C S H A E U E B R O A D M T E
+H W O V L P E D D L A I U L S S
+R Y O N L A S F C S T A O G O T
+I G U S S R R U G O V A R Y O C
+N R G P A T N A N G I L A M O O
+E I H A C E I V I R U S E S E D
+S E T S U D T T G A R L I C N H
+H V R M X L W I U M S N S O T B
+A E A O F I L C H T O D C A E U
+Z S C D F E C A A I I R L N R F
+A R I I A N Y U T O O O U T P F
+R S E C I S N A B O S C N E R A
+D R S M P C U U N E L T E S I L