diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-07-04 11:47:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-04 11:47:53 +0100 |
| commit | d9d3699f2a35b76d4876aaf5a8f85aa6be407678 (patch) | |
| tree | 731b0a2f67e05c2acc04403fd71d91f9bb83a284 | |
| parent | 82928c850d265318b8892a0cf93679c86cdd365c (diff) | |
| parent | 4238efb2ed473fbb06b912b3c2c0eac7652d82cf (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-015/steven-wilson/perl5/bmark-ch2.pl | 58 |
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; + }, +}); |
