diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-03 11:04:48 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-03 11:04:48 +0100 |
| commit | 348b3659c0568020f74f932a414e77c87e70ecb7 (patch) | |
| tree | 7ac82093a4b76bed14d5975426c13b28861bba5c | |
| parent | d88b8e77e9948bb4d8c04cb7bf61948863522559 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-076/neil-bowers/perl/ch-2.pl | 53 | ||||
| -rw-r--r-- | challenge-076/neil-bowers/perl/pwc.txt | 19 |
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 |
