aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWalt Mankowski <waltman@pobox.com>2020-07-13 21:09:08 -0400
committerWalt Mankowski <waltman@pobox.com>2020-07-13 21:09:08 -0400
commit6c0e47ff52802e8003f1a5bf88c658f8ee5918f6 (patch)
treed4445de4ebef023e4f461a7f6f3b8d016f646ec9
parentd61da005cfaf95cc969a39c7792184eb6e5a932c (diff)
downloadperlweeklychallenge-club-6c0e47ff52802e8003f1a5bf88c658f8ee5918f6.tar.gz
perlweeklychallenge-club-6c0e47ff52802e8003f1a5bf88c658f8ee5918f6.tar.bz2
perlweeklychallenge-club-6c0e47ff52802e8003f1a5bf88c658f8ee5918f6.zip
Sped up the code tremendously:
* unrolled recursion * use tr instead of map * use scalar reverse instead of join/map/split
-rw-r--r--challenge-069/walt-mankowski/perl/ch-2.pl18
1 files changed, 7 insertions, 11 deletions
diff --git a/challenge-069/walt-mankowski/perl/ch-2.pl b/challenge-069/walt-mankowski/perl/ch-2.pl
index 9e9a9a023d..135251b3c7 100644
--- a/challenge-069/walt-mankowski/perl/ch-2.pl
+++ b/challenge-069/walt-mankowski/perl/ch-2.pl
@@ -29,25 +29,21 @@ use experimental qw(signatures);
# SN = SN-1 + “0” + switch(reverse(SN-1))
my $n = $ARGV[0];
-# printf "S(%d) = %s\n", $n, S($n);
say S($n);
-
sub S($n) {
- if ($n == 0) {
- return "";
- } else {
- my $sn1 = S($n-1);
- return $sn1 . "0" . switch(rev($sn1));
+ my $S = '';
+ for my $i (1..$n) {
+ $S .= '0' . switch(rev($S));
}
+ return $S;
}
sub switch($s) {
- state @swap = (1, 0);
-
- return join '', map { $swap[$_] } split //, $s;
+ $s =~ tr/01/10/;
+ return $s;
}
sub rev($s) {
- return join '', reverse split //, $s;
+ return scalar reverse $s;
}