aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2019-07-03 21:00:55 +1000
committerRuben Westerberg <drclaw@mac.com>2019-07-03 21:00:55 +1000
commit15e2258cebbeb2fb0adbfe1aae37af3f243ec681 (patch)
treedaf9d7d4bcd4144d359bc27d5cdfbe1745af3ec5
parent2691b15ae16bde92d5c1b4d9d521b6d50eb9ee89 (diff)
downloadperlweeklychallenge-club-15e2258cebbeb2fb0adbfe1aae37af3f243ec681.tar.gz
perlweeklychallenge-club-15e2258cebbeb2fb0adbfe1aae37af3f243ec681.tar.bz2
perlweeklychallenge-club-15e2258cebbeb2fb0adbfe1aae37af3f243ec681.zip
Perl 5 solution to ch2
-rwxr-xr-xchallenge-015/ruben-westerberg/perl5/ch-2.pl31
-rwxr-xr-xchallenge-015/ruben-westerberg/perl6/ch-2.pl14
2 files changed, 36 insertions, 9 deletions
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 (<STDIN>) {
+ 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];
}
}