diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-06-30 21:18:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-06-30 21:18:53 +0100 |
| commit | 6440ecaa2ce94f8940e9fbad6bdfeea0f80b5921 (patch) | |
| tree | 0c989e147d66a9ba6597c1c930a4d2894cbcf5af /challenge-014 | |
| parent | 99bae84f30f579dc9120ce0dbe2391130ed9e00f (diff) | |
| parent | 7d807be4f347c82d688fb5417aacb3a8095435ab (diff) | |
| download | perlweeklychallenge-club-6440ecaa2ce94f8940e9fbad6bdfeea0f80b5921.tar.gz perlweeklychallenge-club-6440ecaa2ce94f8940e9fbad6bdfeea0f80b5921.tar.bz2 perlweeklychallenge-club-6440ecaa2ce94f8940e9fbad6bdfeea0f80b5921.zip | |
Merge pull request #322 from jaldhar/challenge-014
Challenge 14 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-014')
| -rw-r--r-- | challenge-014/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-014/jaldhar-h-vyas/perl5/ch-1.pl | 25 | ||||
| -rwxr-xr-x | challenge-014/jaldhar-h-vyas/perl5/ch-2.pl | 50 | ||||
| -rwxr-xr-x | challenge-014/jaldhar-h-vyas/perl5/getpostcodes.pl | 35 | ||||
| -rwxr-xr-x | challenge-014/jaldhar-h-vyas/perl6/ch-1.p6 | 22 | ||||
| -rwxr-xr-x | challenge-014/jaldhar-h-vyas/perl6/ch-2.p6 | 42 |
6 files changed, 175 insertions, 0 deletions
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 |
