aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-07-01 18:46:34 +0100
committerGitHub <noreply@github.com>2019-07-01 18:46:34 +0100
commit2c9e9f10632aa48e0a299a3091edf62740dd2726 (patch)
tree698b78955af006ec15e4902c0b643c4db7c29305
parent2d947f6d8d7f4ccfc3af19af400c008457e63854 (diff)
parent1c0c9efd334b02c66d7367a9c9c16a52c48be53a (diff)
downloadperlweeklychallenge-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.pl52
-rw-r--r--challenge-015/walt-mankowski/perl5/ch-2.pl42
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"
+}