From 7d807be4f347c82d688fb5417aacb3a8095435ab Mon Sep 17 00:00:00 2001 From: "Jaldhar H. Vyas" Date: Sun, 30 Jun 2019 15:59:32 -0400 Subject: Challenge 14 by Jaldhar H. Vyas --- challenge-014/jaldhar-h-vyas/blog.txt | 1 + challenge-014/jaldhar-h-vyas/perl5/ch-1.pl | 25 +++++++++++ challenge-014/jaldhar-h-vyas/perl5/ch-2.pl | 50 ++++++++++++++++++++++ challenge-014/jaldhar-h-vyas/perl5/getpostcodes.pl | 35 +++++++++++++++ challenge-014/jaldhar-h-vyas/perl6/ch-1.p6 | 22 ++++++++++ challenge-014/jaldhar-h-vyas/perl6/ch-2.p6 | 42 ++++++++++++++++++ 6 files changed, 175 insertions(+) create mode 100644 challenge-014/jaldhar-h-vyas/blog.txt create mode 100755 challenge-014/jaldhar-h-vyas/perl5/ch-1.pl create mode 100755 challenge-014/jaldhar-h-vyas/perl5/ch-2.pl create mode 100755 challenge-014/jaldhar-h-vyas/perl5/getpostcodes.pl create mode 100755 challenge-014/jaldhar-h-vyas/perl6/ch-1.p6 create mode 100755 challenge-014/jaldhar-h-vyas/perl6/ch-2.p6 diff --git a/challenge-014/jaldhar-h-vyas/blog.txt b/challenge-014/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..2f15579e1e --- /dev/null +++ b/challenge-014/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2019/06/perl_weekly_challenge_week_14.html \ No newline at end of file diff --git a/challenge-014/jaldhar-h-vyas/perl5/ch-1.pl b/challenge-014/jaldhar-h-vyas/perl5/ch-1.pl new file mode 100755 index 0000000000..2180ba518e --- /dev/null +++ b/challenge-014/jaldhar-h-vyas/perl5/ch-1.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl +use warnings; +use strict; +use 5.010; + +sub backtrack { + my ($n, $vanEcks) = @_; + + for (my $i = scalar @{$vanEcks} - 1; $i > 0; $i--) { + if ($vanEcks->[$i - 1] == $n) { + return scalar @{$vanEcks} - $i; + } + } + return 0; +} + +my @vanEcks = (0); +my $n = 0; + +while (scalar @vanEcks <= 100) { + push @vanEcks, $n; + $n = backtrack($n, \@vanEcks); +} + +say join ", ", @vanEcks; diff --git a/challenge-014/jaldhar-h-vyas/perl5/ch-2.pl b/challenge-014/jaldhar-h-vyas/perl5/ch-2.pl new file mode 100755 index 0000000000..08f8275374 --- /dev/null +++ b/challenge-014/jaldhar-h-vyas/perl5/ch-2.pl @@ -0,0 +1,50 @@ +#!/usr/bin/perl +use warnings; +use strict; +use 5.010; +use English qw/ -no_match_vars /; + +sub makeWords { + my ($list) = @_; + + open my $wordList, '<', $list or die "$list: $!\n"; + local $RS; + my $contents = <$wordList>; + close $wordList; + return sort + map { lc } + grep { /^[[:alpha:]]+$/ } + split /\n/, + $contents; +} + +my $wordList = shift // '/usr/share/dict/words'; + +my @words = makeWords($wordList); +my %spelled = map { $_ => $_ } @words; + +my @abbrevs = qw/ + al ak az ar ca co ct de fl ga hi id il in ia ks ky la me md ma mi mn ms mo + mt ne nv nh nj nm ny nc nd oh ok or pa ri sc sd tn tx ut vt va wa wv wi wy +/; + +for my $word (@words) { + for my $abbrev (@abbrevs) { + if ($spelled{$word} eq q{}) { + last; + } + if ($word =~ /$abbrev/) { + $spelled{$word} =~ s/$abbrev//; + } + } +} + +my $answer = q{}; + +for my $word (sort grep {$spelled{$_} eq q{}} keys %spelled) { + if (length $word >= length $answer) { + $answer = $word; + } +} + +say $answer; diff --git a/challenge-014/jaldhar-h-vyas/perl5/getpostcodes.pl b/challenge-014/jaldhar-h-vyas/perl5/getpostcodes.pl new file mode 100755 index 0000000000..be44280925 --- /dev/null +++ b/challenge-014/jaldhar-h-vyas/perl5/getpostcodes.pl @@ -0,0 +1,35 @@ +#!/usr/bin/perl +use warnings; +use strict; +use 5.010; +use English qw/ -no_match_vars /; +use LWP::Simple; +use HTML::TableParser; +use constant FEDERAL_STATE => 1; +use constant USPS => 5; + +my @abbrevs; + +sub row { + my ($columns) = $_[2]; + if ($columns->[FEDERAL_STATE] =~ /State/) { + push @abbrevs, lc $columns->[USPS]; + } +} + +my $page = + get('https://en.wikipedia.org/wiki/List_of_U.S._state_abbreviations') // + die "Couldn't fetch page: $OS_ERROR\n"; + +my $tableParser = HTML::TableParser->new ( + [ + { + id => 'DEFAULT', + row => \&row + } + ], +); + +$tableParser->parse($page); + +say 'my @abbrevs = ( qr/', (join q{/, qr/}, @abbrevs), '/ );' \ No newline at end of file diff --git a/challenge-014/jaldhar-h-vyas/perl6/ch-1.p6 b/challenge-014/jaldhar-h-vyas/perl6/ch-1.p6 new file mode 100755 index 0000000000..807a93a03f --- /dev/null +++ b/challenge-014/jaldhar-h-vyas/perl6/ch-1.p6 @@ -0,0 +1,22 @@ +#!/usr/bin/perl6 + +sub backtrack($n, @vanEcks) { + loop (my $i = @vanEcks.elems - 1; $i > 0; $i--) { + if @vanEcks[$i - 1] == $n { + return @vanEcks.elems - $i; + } + } + return 0; +} + +multi sub MAIN() { + my @vanEcks = (0); + my $n = 0; + + while @vanEcks.elems <= 100 { + @vanEcks.push($n); + $n = backtrack($n, @vanEcks); + } + + @vanEcks.join(", ").say; +} diff --git a/challenge-014/jaldhar-h-vyas/perl6/ch-2.p6 b/challenge-014/jaldhar-h-vyas/perl6/ch-2.p6 new file mode 100755 index 0000000000..859a03163d --- /dev/null +++ b/challenge-014/jaldhar-h-vyas/perl6/ch-2.p6 @@ -0,0 +1,42 @@ +#!/usr/bin/perl6 + +sub makeWords(Str $wordList) { + return $wordList.IO.lines + .grep({ /^<:alpha>+$/ }) + .map({ .lc }) + .sort; +} + +multi sub MAIN( + Str $wordList = '/usr/share/dict/words' +) { + + my @words = makeWords($wordList); + my %spelled = @words.map({ $_ => $_ }); + + my @abbrevs = qw/ + al ak az ar ca co ct de fl ga hi id il in ia ks ky la me md ma mi mn ms mo + mt ne nv nh nj nm ny nc nd oh ok or pa ri sc sd tn tx ut vt va wa wv wi wy + /; + + for @words -> $word { + for @abbrevs -> $abbrev { + if %spelled{$word} eq q{} { + last; + } + if $word.contains($abbrev) { + %spelled{$word} ~~ s/$abbrev//; + } + } + } + + my $answer = q{}; + + for %spelled.keys.grep({ %spelled{$_} eq q{} }).sort -> $word { + if ($word.chars >= $answer.chars) { + $answer = $word; + } + } + + say $answer; +} \ No newline at end of file -- cgit