diff options
| author | Walt Mankowski <waltman@pobox.com> | 2020-07-13 21:09:08 -0400 |
|---|---|---|
| committer | Walt Mankowski <waltman@pobox.com> | 2020-07-13 21:09:08 -0400 |
| commit | 6c0e47ff52802e8003f1a5bf88c658f8ee5918f6 (patch) | |
| tree | d4445de4ebef023e4f461a7f6f3b8d016f646ec9 | |
| parent | d61da005cfaf95cc969a39c7792184eb6e5a932c (diff) | |
| download | perlweeklychallenge-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.pl | 18 |
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; } |
