diff options
| author | Steven Wilson <steven1170@zoho.eu> | 2019-07-03 22:25:27 +0100 |
|---|---|---|
| committer | Steven Wilson <steven1170@zoho.eu> | 2019-07-03 22:25:27 +0100 |
| commit | 4238efb2ed473fbb06b912b3c2c0eac7652d82cf (patch) | |
| tree | f9b5a37ad6ce47e7304a69c70e251db93559b060 | |
| parent | 05e96cba9ec7a4b3369202dd79b7873fba04f416 (diff) | |
| download | perlweeklychallenge-club-4238efb2ed473fbb06b912b3c2c0eac7652d82cf.tar.gz perlweeklychallenge-club-4238efb2ed473fbb06b912b3c2c0eac7652d82cf.tar.bz2 perlweeklychallenge-club-4238efb2ed473fbb06b912b3c2c0eac7652d82cf.zip | |
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; + }, +}); |
