aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hamlin <1197072+myrrhlin@users.noreply.github.com>2019-07-14 23:02:35 -0400
committerMichael Hamlin <1197072+myrrhlin@users.noreply.github.com>2019-07-14 23:02:35 -0400
commitb690a2d14d660bdc88bc1e9fde871ddbbbf71f4b (patch)
treec56a2c23ff536f41f783ec01573ac74369512578
parent912732e159464fc541dd1b48b50d13221b08b867 (diff)
downloadperlweeklychallenge-club-b690a2d14d660bdc88bc1e9fde871ddbbbf71f4b.tar.gz
perlweeklychallenge-club-b690a2d14d660bdc88bc1e9fde871ddbbbf71f4b.tar.bz2
perlweeklychallenge-club-b690a2d14d660bdc88bc1e9fde871ddbbbf71f4b.zip
replace prior PR
my previous PR had some changes from the original code you'd seen, mohammad. you tossed that PR because you thought it was the same. this PR merges those changes back in.
-rw-r--r--challenge-015/michael-hamlin/perl5/GetPrime.pm4
-rw-r--r--challenge-015/michael-hamlin/perl5/Vigenere.pm (renamed from challenge-015/michael-hamlin/perl5/Vignere.pm)1
l---------[-rw-r--r--]challenge-015/michael-hamlin/perl5/ch-1.pl29
l---------[-rw-r--r--]challenge-015/michael-hamlin/perl5/ch-2.pl24
-rw-r--r--challenge-015/michael-hamlin/perl5/task1.txt15
-rw-r--r--challenge-015/michael-hamlin/perl5/task2.txt2
-rw-r--r--challenge-016/michael-hamlin/perl5/ch-1.pl33
-rw-r--r--challenge-016/michael-hamlin/perl5/task1.txt6
8 files changed, 62 insertions, 52 deletions
diff --git a/challenge-015/michael-hamlin/perl5/GetPrime.pm b/challenge-015/michael-hamlin/perl5/GetPrime.pm
index 17559ce4ea..9812b88ed2 100644
--- a/challenge-015/michael-hamlin/perl5/GetPrime.pm
+++ b/challenge-015/michael-hamlin/perl5/GetPrime.pm
@@ -13,7 +13,7 @@ use integer;
my @primes = (2, 3, 5);
sub getprime ($) {
- my $n = shift || die "must give an ordinal number to getprime";
+ my $n = shift || die "must give an ordinal integer to getprime";
push @primes, _nextprime() while @primes < $n;
return $primes[$n - 1];
}
@@ -41,8 +41,10 @@ sub _hasfactor {
1;
__END__
+
#foreach (1..20) {
# printf "%2u: %u\n", $_, getprime($_);
#}
+
say 'the hundredth prime is ', getprime(100);
diff --git a/challenge-015/michael-hamlin/perl5/Vignere.pm b/challenge-015/michael-hamlin/perl5/Vigenere.pm
index 494c322f5a..bc54f2d23b 100644
--- a/challenge-015/michael-hamlin/perl5/Vignere.pm
+++ b/challenge-015/michael-hamlin/perl5/Vigenere.pm
@@ -62,5 +62,6 @@ sub vdecode ($@) {
}
return $msg;
}
+
1;
diff --git a/challenge-015/michael-hamlin/perl5/ch-1.pl b/challenge-015/michael-hamlin/perl5/ch-1.pl
index bbbf14099c..97193b3d16 100644..120000
--- a/challenge-015/michael-hamlin/perl5/ch-1.pl
+++ b/challenge-015/michael-hamlin/perl5/ch-1.pl
@@ -1,28 +1 @@
-#! /usr/bin/env perl
-
-use 5.18.0;
-use GetPrime;
-use integer;
-
-my $n = shift @ARGV || 10;
-
-my (@strong, @weak);
-
-for (my $i = 2; @strong < $n && @weak < $n; $i++) {
- my $prime = getprime($i);
- # avoiding division for speed
-
- my $doubled = 2 * $prime; # saves an op later
- my $neighbor_sum = getprime($i-1) + getprime($i+1);
-
- if ($doubled > $neighbor_sum) {
- push @strong, $prime;
- } elsif ($doubled < $neighbor_sum) {
- push @weak, $prime;
- } else {
- say "zomg prime #$i ($prime) is neither!"
-}
-}
-
-say "Strongs are: @strong";
-say "Weaks are: @weak";
+t1-prime-types.pl \ No newline at end of file
diff --git a/challenge-015/michael-hamlin/perl5/ch-2.pl b/challenge-015/michael-hamlin/perl5/ch-2.pl
index 9d30e5e5a1..036430d10c 100644..120000
--- a/challenge-015/michael-hamlin/perl5/ch-2.pl
+++ b/challenge-015/michael-hamlin/perl5/ch-2.pl
@@ -1,23 +1 @@
-#! /usr/bin/env perl
-
-use 5.18.0;
-use Vigenere;
-
-use Getopt::Long;
-
-my %opt;
-GetOptions(\%opt,
- 'key|k=s@',
- 'msg|m=s',
-);
-
-my $plaintext = $opt{msg} || 'attack at dawn';
-my @keys = $opt{key} ? @{ $opt{key} } : 'lemon';
-
-my $cipher = vencode($plaintext, @keys);
-my $decoded = vdecode($cipher, reverse @key
-s);
-
-print "ciphertext: $cipher\n";
-print "decoded: $decoded\n";
-
+t2-vig-cipher.pl \ No newline at end of file
diff --git a/challenge-015/michael-hamlin/perl5/task1.txt b/challenge-015/michael-hamlin/perl5/task1.txt
new file mode 100644
index 0000000000..50cc038091
--- /dev/null
+++ b/challenge-015/michael-hamlin/perl5/task1.txt
@@ -0,0 +1,15 @@
+
+
+ Write a script to generate first 10 strong and weak prime numbers.
+
+ For example, 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
+
diff --git a/challenge-015/michael-hamlin/perl5/task2.txt b/challenge-015/michael-hamlin/perl5/task2.txt
new file mode 100644
index 0000000000..1c00f90e2b
--- /dev/null
+++ b/challenge-015/michael-hamlin/perl5/task2.txt
@@ -0,0 +1,2 @@
+Write a script to implement Vigenère cipher. The script should be able encode and decode. Checkout wiki page for more information.
+https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher
diff --git a/challenge-016/michael-hamlin/perl5/ch-1.pl b/challenge-016/michael-hamlin/perl5/ch-1.pl
new file mode 100644
index 0000000000..f172617f68
--- /dev/null
+++ b/challenge-016/michael-hamlin/perl5/ch-1.pl
@@ -0,0 +1,33 @@
+#! /usr/bin/env perl
+#
+use 5.18.0;
+use List::Util qw<sum>;
+use Getopt::Std;
+
+my %opt;
+getopts('v', \%opt);
+
+# each piece is a percent. the sum must equal 100.
+my @pieces;
+my $biggest;
+
+# given the conditions, and the nature of the problem,
+# we can surmise the function must have a single maximum.
+# with this knowledge, we can skip calculating once we
+# pass the largest value.
+
+my $remaining = 100;
+for my $p (1..100) {
+ my $this = $remaining * $p/100;
+ printf "piece %3u: %.2f\n", $p, $this if $opt{v};
+ push @pieces, $this;
+ $remaining -= $this;
+ # once we passed the peak, we can stop
+ last if $biggest && $this < $pieces[$biggest - 1];
+ # otherwise we just found a new maximum:
+ $biggest = $p;
+}
+
+printf "biggest was #%2u, at %.2f of the pie\n", $biggest, $pieces[$biggest - 1];
+# say 'checking our math, sum is ', List::Util::sum @pieces if $opt{v};
+
diff --git a/challenge-016/michael-hamlin/perl5/task1.txt b/challenge-016/michael-hamlin/perl5/task1.txt
new file mode 100644
index 0000000000..d2b904c7ed
--- /dev/null
+++ b/challenge-016/michael-hamlin/perl5/task1.txt
@@ -0,0 +1,6 @@
+
+ Pythagoras Pie Puzzle, proposed by Jo Christian Oterhals.
+
+ At a party a pie is to be shared by 100 guest. The first guest gets 1% of the pie, the second guest gets 2% of the remaining pie, the third gets 3% of the remaining pie, the fourth gets 4% and so on.
+
+ Write a script that figures out which guest gets the largest piece of pie.