diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-07-01 18:46:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-01 18:46:34 +0100 |
| commit | 2c9e9f10632aa48e0a299a3091edf62740dd2726 (patch) | |
| tree | 698b78955af006ec15e4902c0b643c4db7c29305 | |
| parent | 2d947f6d8d7f4ccfc3af19af400c008457e63854 (diff) | |
| parent | 1c0c9efd334b02c66d7367a9c9c16a52c48be53a (diff) | |
| download | perlweeklychallenge-club-2c9e9f10632aa48e0a299a3091edf62740dd2726.tar.gz perlweeklychallenge-club-2c9e9f10632aa48e0a299a3091edf62740dd2726.tar.bz2 perlweeklychallenge-club-2c9e9f10632aa48e0a299a3091edf62740dd2726.zip | |
Merge pull request #325 from waltman/branch-for-challenge-015
solutions for challenge 15
| -rw-r--r-- | challenge-015/walt-mankowski/perl5/ch-1.pl | 52 | ||||
| -rw-r--r-- | challenge-015/walt-mankowski/perl5/ch-2.pl | 42 |
2 files changed, 94 insertions, 0 deletions
diff --git a/challenge-015/walt-mankowski/perl5/ch-1.pl b/challenge-015/walt-mankowski/perl5/ch-1.pl new file mode 100644 index 0000000000..0776cd2503 --- /dev/null +++ b/challenge-015/walt-mankowski/perl5/ch-1.pl @@ -0,0 +1,52 @@ +#!/usr/bin/env perl + +# Write a script to generate first 10 strong and weak prime numbers. +# +# For example, if the nth prime number is represented by p(n): +# +# p(1) = 2 +# p(2) = 3 +# p(3) = 5 +# p(4) = 7 +# p(5) = 11 +# +# Strong Prime number p(n) when p(n) > [ p(n-1) + p(n+1) ] / 2 +# Weak Prime number p(n) when p(n) < [ p(n-1) + p(n+1) ] / 2 +# +# In other words, a prime is "strong" if it's closer to the next +# larger prime than the next smaller prime, and it's "weak" if it's +# closer to the next smaller prime than the next larger prime. + +use strict; +use warnings; +use feature 'say'; +use experimental qw(signatures); + +my @primes = (2, 3); +my @strong; +my @weak; + +my $n = 5; +while (@strong < 10 || @weak < 10) { + if (is_prime($n)) { + push @primes, $n; + my $avg = ($primes[-1] + $primes[-3]) / 2; + if ($primes[-2] > $avg) { + push @strong, $primes[-2]; + } elsif ($primes[-2] < $avg) { + push @weak, $primes[-2]; + } + } + $n += 2; +} + +$" = ", "; +say "Weak primes: @weak[0..9]"; +say "Strong primes: @strong[0..9]"; + +sub is_prime($n) { + for my $i (3..sqrt($n)) { + return 0 if $n % $i == 0; + } + return 1; +} diff --git a/challenge-015/walt-mankowski/perl5/ch-2.pl b/challenge-015/walt-mankowski/perl5/ch-2.pl new file mode 100644 index 0000000000..5fba04bdee --- /dev/null +++ b/challenge-015/walt-mankowski/perl5/ch-2.pl @@ -0,0 +1,42 @@ +#!/usr/bin/env perl + +# Write a script to implement the Vigenère cipher. The script should +# be able encode and decode. For more information see +# https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; + +my $encrypt = 0; +my $decrypt = 0; +my $text; +my $key; + +# parse command line parameters +GetOptions("encrypt" => \$encrypt, + "decrypt" => \$decrypt, + "text=s" => \$text, + "key=s" => \$key) + or usage(); + +usage() unless ($encrypt ^ $decrypt); +usage() unless $key; + +my $out; +for my $i (0..length($text) - 1) { # index into $text + my $j = $i % length($key); # index into $key + my $c1 = ord(substr $text, $i, 1) - ord('A'); + my $c2 = ord(substr $key, $j, 1) - ord('A'); + if ($encrypt) { + $out .= chr(($c1 + $c2) % 26 + ord('A')); + } else { + $out .= chr(($c1 - $c2) % 26 + ord('A')); + } +} +say $out; + +sub usage { + die "ch-2.pl --encrypt|--decrypt --text text --key key\n" +} |
