From 4238efb2ed473fbb06b912b3c2c0eac7652d82cf Mon Sep 17 00:00:00 2001 From: Steven Wilson Date: Wed, 3 Jul 2019 22:25:27 +0100 Subject: add blog and benchmarking --- challenge-015/steven-wilson/blog.txt | 1 + challenge-015/steven-wilson/perl5/bmark-ch2.pl | 58 ++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 challenge-015/steven-wilson/blog.txt create mode 100644 challenge-015/steven-wilson/perl5/bmark-ch2.pl 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; + }, +}); -- cgit