aboutsummaryrefslogtreecommitdiff
path: root/challenge-014
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-06-30 21:18:53 +0100
committerGitHub <noreply@github.com>2019-06-30 21:18:53 +0100
commit6440ecaa2ce94f8940e9fbad6bdfeea0f80b5921 (patch)
tree0c989e147d66a9ba6597c1c930a4d2894cbcf5af /challenge-014
parent99bae84f30f579dc9120ce0dbe2391130ed9e00f (diff)
parent7d807be4f347c82d688fb5417aacb3a8095435ab (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-014/jaldhar-h-vyas/perl5/ch-1.pl25
-rwxr-xr-xchallenge-014/jaldhar-h-vyas/perl5/ch-2.pl50
-rwxr-xr-xchallenge-014/jaldhar-h-vyas/perl5/getpostcodes.pl35
-rwxr-xr-xchallenge-014/jaldhar-h-vyas/perl6/ch-1.p622
-rwxr-xr-xchallenge-014/jaldhar-h-vyas/perl6/ch-2.p642
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