aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-07-04 11:47:53 +0100
committerGitHub <noreply@github.com>2019-07-04 11:47:53 +0100
commitd9d3699f2a35b76d4876aaf5a8f85aa6be407678 (patch)
tree731b0a2f67e05c2acc04403fd71d91f9bb83a284
parent82928c850d265318b8892a0cf93679c86cdd365c (diff)
parent4238efb2ed473fbb06b912b3c2c0eac7652d82cf (diff)
downloadperlweeklychallenge-club-d9d3699f2a35b76d4876aaf5a8f85aa6be407678.tar.gz
perlweeklychallenge-club-d9d3699f2a35b76d4876aaf5a8f85aa6be407678.tar.bz2
perlweeklychallenge-club-d9d3699f2a35b76d4876aaf5a8f85aa6be407678.zip
Merge pull request #336 from oWnOIzRi/week015
add blog and benchmarking
-rw-r--r--challenge-015/steven-wilson/blog.txt1
-rw-r--r--challenge-015/steven-wilson/perl5/bmark-ch2.pl58
2 files changed, 59 insertions, 0 deletions
diff --git a/challenge-015/steven-wilson/blog.txt b/challenge-015/steven-wilson/blog.txt
new file mode 100644
index 0000000000..ede4c2e597
--- /dev/null
+++ b/challenge-015/steven-wilson/blog.txt
@@ -0,0 +1 @@
+http://tilde.town/~wlsn/pwc015.html
diff --git a/challenge-015/steven-wilson/perl5/bmark-ch2.pl b/challenge-015/steven-wilson/perl5/bmark-ch2.pl
new file mode 100644
index 0000000000..734bed0017
--- /dev/null
+++ b/challenge-015/steven-wilson/perl5/bmark-ch2.pl
@@ -0,0 +1,58 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use List::MoreUtils qw/ first_index /;;
+use Benchmark::Forking qw/ cmpthese /;
+
+my @alphabet = ("A".."Z");
+
+cmpthese(-10, {
+ 'initial_encode' => sub{
+ my ( $plaintext, $keyword ) = ("MMEZQTBJDGNQKYPURWZMWOIUOC", "LEMON");
+ my $cyphertext;
+ for my $i (0..((length $plaintext) - 1)){
+ (my $mi) = grep { $alphabet[$_] eq substr($plaintext, $i, 1) } (0..@alphabet-1);
+ (my $ki) = grep { $alphabet[$_] eq substr($keyword, ($i % length $keyword), 1)} (0..@alphabet-1);
+ $cyphertext .= $alphabet[($mi + $ki) % 26];
+ }
+ return $cyphertext;
+ },
+
+ 'substr_out_grep' => sub{
+ my ( $plaintext, $keyword ) = ("MMEZQTBJDGNQKYPURWZMWOIUOC", "LEMON");
+ my $cyphertext;
+ for my $i (0..((length $plaintext) - 1)){
+ my $plaintext_chr = substr($plaintext, $i, 1);
+ my $keyword_chr = substr($keyword, ($i % length $keyword), 1);
+ (my $mi) = grep { $alphabet[$_] eq $plaintext_chr } (0..@alphabet-1);
+ (my $ki) = grep { $alphabet[$_] eq $keyword_chr } (0..@alphabet-1);
+ $cyphertext .= $alphabet[($mi + $ki) % 26];
+ }
+ return $cyphertext;
+ },
+
+ 'use_first_index' => sub{
+ my ( $plaintext, $keyword ) = ("MMEZQTBJDGNQKYPURWZMWOIUOC", "LEMON");
+ my $cyphertext;
+ for my $i (0..((length $plaintext) - 1)){
+ my $plaintext_chr = substr($plaintext, $i, 1);
+ my $keyword_chr = substr($keyword, ($i % length $keyword), 1);
+ (my $mi) = first_index { $alphabet[$_] eq $plaintext_chr } (0..@alphabet-1);
+ (my $ki) = first_index { $alphabet[$_] eq $keyword_chr } (0..@alphabet-1);
+ $cyphertext .= $alphabet[($mi + $ki) % 26];
+ }
+ return $cyphertext;
+ },
+
+ 'use_ord_chr' => sub{
+ my ( $plaintext, $keyword ) = ("MMEZQTBJDGNQKYPURWZMWOIUOC", "LEMON");
+ my $cyphertext;
+ for my $i (0..((length $plaintext) - 1)){
+ my $mi = ord( substr( $plaintext, $i, 1 ) ) - 65;
+ my $ki = ord( substr( $keyword, ($i % length $keyword), 1)) - 65;
+ $cyphertext .= chr((($mi + $ki) % 26) + 65);
+ }
+ return $cyphertext;
+ },
+});