diff options
| author | andrezgz <andrezgz@gmail.com> | 2019-06-24 20:29:42 -0300 |
|---|---|---|
| committer | andrezgz <andrezgz@gmail.com> | 2019-06-24 20:29:42 -0300 |
| commit | a494c0d97a3afcb18e4481173bf590f6d0706766 (patch) | |
| tree | e5cb2ca02c964d2886fbbc21ff02b452b51ce5a0 | |
| parent | ad39658bba41950a0c9c66b20e4440ae25c3f3f2 (diff) | |
| download | perlweeklychallenge-club-a494c0d97a3afcb18e4481173bf590f6d0706766.tar.gz perlweeklychallenge-club-a494c0d97a3afcb18e4481173bf590f6d0706766.tar.bz2 perlweeklychallenge-club-a494c0d97a3afcb18e4481173bf590f6d0706766.zip | |
challenge-014 andrezgz solution
| -rw-r--r-- | challenge-014/andrezgz/perl5/ch-1.pl | 26 | ||||
| -rw-r--r-- | challenge-014/andrezgz/perl5/ch-2.pl | 113 |
2 files changed, 139 insertions, 0 deletions
diff --git a/challenge-014/andrezgz/perl5/ch-1.pl b/challenge-014/andrezgz/perl5/ch-1.pl new file mode 100644 index 0000000000..be17b16c5e --- /dev/null +++ b/challenge-014/andrezgz/perl5/ch-1.pl @@ -0,0 +1,26 @@ +#!/usr/bin/perl + +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-014/ +# Challenge #1 +# Write a script to generate Van Eck's sequence starts with 0. +# For more information, please check out wikipedia page. +# This challenge was proposed by team member Andrezgz. +# https://en.wikipedia.org/wiki/Van_Eck%27s_sequence + +use strict; +use warnings; + +my $upto = $ARGV[0] || 50; + +my $n_1 = 0; #sequence start +my %last; #last position for each number + +print $n_1; +for my $pos (1 .. $upto-1) { + + my $n = exists $last{$n_1} ? $pos - $last{$n_1} : 0; + print ', '.$n; + + $last{$n_1} = $pos; + $n_1 = $n; +} diff --git a/challenge-014/andrezgz/perl5/ch-2.pl b/challenge-014/andrezgz/perl5/ch-2.pl new file mode 100644 index 0000000000..b5bd49b867 --- /dev/null +++ b/challenge-014/andrezgz/perl5/ch-2.pl @@ -0,0 +1,113 @@ +#!/usr/bin/perl + +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-012/ +# Challenge #2 +# Using only the official postal (2-letter) abbreviations for the 50 U.S. states, +# write a script to find the longest English word you can spell? +# Here is the list of U.S. states abbreviations as per wikipedia page. +# https://en.wikipedia.org/wiki/List_of_U.S._state_abbreviations +# This challenge was proposed by team member Neil Bowers. +# +# For example, +# Pennsylvania + Connecticut = PACT +# Wisconsin + North Dakota = WIND +# Maine + Alabama = MEAL +# California + Louisiana + Massachusetts + Rhode Island = Calamari + +use strict; +use warnings; + +die "Usage: $0 <words_file>" unless $ARGV[0]; + +my $words_file = $ARGV[0]; +open(my $fh, "<", $words_file) or die "Could not open words file '$words_file': $!"; + +my %usps = ( + AL => 'Alabama', + AK => 'Alaska', + AZ => 'Arizona', + AR => 'Arkansas', + CA => 'California', + CO => 'Colorado', + CT => 'Connecticut', + DE => 'Delaware', + FL => 'Florida', + GA => 'Georgia', + HI => 'Hawaii', + ID => 'Idaho', + IL => 'Illinois', + IN => 'Indiana', + IA => 'Iowa', + KS => 'Kansas', + KY => 'Kentucky', + LA => 'Louisiana', + ME => 'Maine', + MD => 'Maryland', + MA => 'Massachusetts', + MI => 'Michigan', + MN => 'Minnesota', + MS => 'Mississippi', + MO => 'Missouri', + MT => 'Montana', + NE => 'Nebraska', + NV => 'Nevada', + NH => 'New Hampshire', + NJ => 'New Jersey', + NM => 'New Mexico', + NY => 'New York', + NC => 'North Carolina', + ND => 'North Dakota', + OH => 'Ohio', + OK => 'Oklahoma', + OR => 'Oregon', + PA => 'Pennsylvania', + RI => 'Rhode Island', + SC => 'South Carolina', + SD => 'South Dakota', + TN => 'Tennessee', + TX => 'Texas', + UT => 'Utah', + VT => 'Vermont', + VA => 'Virginia', + WA => 'Washington', + WV => 'West Virginia', + WI => 'Wisconsin', + WY => 'Wyoming' +); + +my @max = (''); +while( my $word = <$fh> ) { + chomp $word; # remove new line trailing string + + next if length $word < length $max[0]; # shorter than max + next if $word !~ /^[a-z]+$/i; # non-alphabetic characters + next if length($word) % 2 != 0; # odd number of characters + next if grep { !$usps{uc $_} } $word =~ m/../g; # non usps pair of alphabetic characters + + ( length $word > length $max[0] ) + ? @max = ($word) #reset the list + : push @max,$word; #add to the list + +} +close $fh; + +print 'Longest words: '. join(', ', @max)."\n\n"; + +print "Sum of states for each word:\n"; #Just for fun +print join(' + ', map { $usps{uc $_} } map { $_ =~ m/../g } $_ ) .' = '. $_ ."\n" for @max ; + + +__END__ + +Longest words: Concorde, Ganymede, Mandarin, calamine, mainland, malarial, mandarin, memorial, moorland + +Sum of states for each word: +Colorado + North Carolina + Oregon + Delaware = Concorde +Georgia + New York + Maine + Delaware = Ganymede +Massachusetts + North Dakota + Arkansas + Indiana = Mandarin +California + Louisiana + Michigan + Nebraska = calamine +Massachusetts + Indiana + Louisiana + North Dakota = mainland +Massachusetts + Louisiana + Rhode Island + Alabama = malarial +Massachusetts + North Dakota + Arkansas + Indiana = mandarin +Maine + Missouri + Rhode Island + Alabama = memorial +Missouri + Oregon + Louisiana + North Dakota = moorland |
