From 15e2258cebbeb2fb0adbfe1aae37af3f243ec681 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Wed, 3 Jul 2019 21:00:55 +1000 Subject: Perl 5 solution to ch2 --- challenge-015/ruben-westerberg/perl5/ch-2.pl | 31 ++++++++++++++++++++++++++++ challenge-015/ruben-westerberg/perl6/ch-2.pl | 14 +++++-------- 2 files changed, 36 insertions(+), 9 deletions(-) create mode 100755 challenge-015/ruben-westerberg/perl5/ch-2.pl diff --git a/challenge-015/ruben-westerberg/perl5/ch-2.pl b/challenge-015/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..dcb7487b35 --- /dev/null +++ b/challenge-015/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Getopt::Long; + +my $decode; +GetOptions("decode"=>\$decode); +die "please specify a key\n" unless $ARGV[0]; +$|=1; + +my @alpha=("a".."z","A".."Z", " ", qw); +my @a=0..@alpha-1; +my @k; +for my $c (split "", $ARGV[0]) { + push @k, grep { $c eq $alpha[$_] } @a; +} + +my $f=$decode? 1 : -1; +while () { + my (@in, @out); + for my $c (split "") { + push @in, grep { $c eq $alpha[$_]} @a; + } + my $i=0; + for my $c (@in) { + push @out, ($c+$f*$k[$i++])%@a; + $i%=@k; + } + print @alpha[@out],"\n"; +} + diff --git a/challenge-015/ruben-westerberg/perl6/ch-2.pl b/challenge-015/ruben-westerberg/perl6/ch-2.pl index acf493a209..51a8eb082d 100755 --- a/challenge-015/ruben-westerberg/perl6/ch-2.pl +++ b/challenge-015/ruben-westerberg/perl6/ch-2.pl @@ -1,18 +1,14 @@ #!/usr/bin/env perl6 -sub MAIN ( - Str $key, - Bool :$decode, - Str :$file -) { +sub MAIN ( Str $key, Bool :$decode, Str :$file ) { + my $f=$decode??1!!-1; $*OUT.out-buffer=0; my @alpha=("a".."z","A".."Z"," ", )[*;*]; my @a=@alpha.keys; my @k=$key.comb.map(-> $c {|@alpha.grep($c,:k)}); for $*IN.lines -> $line { - my @in= $line.comb.map(->$c {|@alpha.grep($c,:k)}); - my @t= $decode?? @in >>+>> @k !!@in >>->> @k;; - @t >>%=>> @a.elems; - put join "", @alpha[@t]; + my @in= $line.comb.map(->$c {|@alpha.grep($c,:k)}); + my @t= (@in >>+>> (@k >>*>> $f)) >>%>> @a.elems; + put join "", @alpha[@t]; } } -- cgit