aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-06-18 08:42:29 +0100
committerGitHub <noreply@github.com>2021-06-18 08:42:29 +0100
commit2d4f93dc6ed835f7c41f14bd18ab90f95a32e10c (patch)
treeac7ba061b0739f189486189bc40646e9d1046119
parentf49a0b2a1d0df68404c0d1b1e92015e6a3b371e7 (diff)
parent6939f51f9085bb0af3f721e1d47fac3b5a705ec1 (diff)
downloadperlweeklychallenge-club-2d4f93dc6ed835f7c41f14bd18ab90f95a32e10c.tar.gz
perlweeklychallenge-club-2d4f93dc6ed835f7c41f14bd18ab90f95a32e10c.tar.bz2
perlweeklychallenge-club-2d4f93dc6ed835f7c41f14bd18ab90f95a32e10c.zip
Merge pull request #4287 from drbaggy/master
Update README.md
-rw-r--r--challenge-117/james-smith/README.md24
-rw-r--r--challenge-117/james-smith/blog.txt1
-rw-r--r--challenge-117/james-smith/perl/ch-2.pl7
3 files changed, 29 insertions, 3 deletions
diff --git a/challenge-117/james-smith/README.md b/challenge-117/james-smith/README.md
index aa4a62c493..e17e38bcbc 100644
--- a/challenge-117/james-smith/README.md
+++ b/challenge-117/james-smith/README.md
@@ -53,7 +53,12 @@ sub triangle {
}
```
-### Now the counts... Schroder numbers
+Note we don't "collect" routes in a datastructure and then print them all at the end, but instead render directly from within the
+function. For `$N` larger than `10` the memory requirements for storing this information increases significantly, so this code is limited purely by disk rather than memory.
+
+### Now the counts... Schröder numbers
+
+*It's amazing what you find out about when you google the answers you get!*
Due to the "memory" storage issues we can change the problem to one of counting rather than listing...
The first approach is to just convert the `triangle` method above to count - we introduce a cache
@@ -72,8 +77,14 @@ sub schroder_cache_array {
}
```
-But as we've said before recursion is a curse - so to remove the function
-overhead of recursion we can re-write this like this:
+But as we've said before recursion is a curse - but we notice that
+```
+ T0,m = 1
+ Tn,0 = Tn-1,0 + Tn-1,1
+ Tn,m = Tn-1,m + Tn-1,m+1 + Tn,m-1
+```
+We can use that to define each row of a triangle with `Sn` as the last
+value.
```perl
sub schroder_non_recursive {
@@ -88,6 +99,13 @@ sub schroder_non_recursive {
}
```
+We again use the row "flip" as we only need one row and the previous
+one to get values...
+
+Googling for `2, 6, 22, 90, 394` came up with https://en.wikipedia.org/wiki/Schröder_number, a page
+about Schröder numbers - which gives up the following faster (about twice as fast as above) solution -
+as Scrhoder numbers can be written as a recurrence relation:
+
```perl
sub schroder_recurrence_rel {
my( $size, @S ) = ( shift, 1, 2 );
diff --git a/challenge-117/james-smith/blog.txt b/challenge-117/james-smith/blog.txt
new file mode 100644
index 0000000000..8d12b20b58
--- /dev/null
+++ b/challenge-117/james-smith/blog.txt
@@ -0,0 +1 @@
+https://github.com/drbaggy/perlweeklychallenge-club/blob/master/challenge-117/james-smith/
diff --git a/challenge-117/james-smith/perl/ch-2.pl b/challenge-117/james-smith/perl/ch-2.pl
index 854c9244b2..248d8d2dfe 100644
--- a/challenge-117/james-smith/perl/ch-2.pl
+++ b/challenge-117/james-smith/perl/ch-2.pl
@@ -142,3 +142,10 @@ sub schroder_recurrence_rel {
}
return $S[ $size ];
}
+
+##
+# 1, 2, 6, 22, 90, 394,
+# 1806, 8558, 41586, 206098, 1037718,
+# 5293446, 27297738, 142078746, 745387038, 3937603038,
+# 20927156706, 111818026018, 600318853926, 3236724317174, 17518619320890,
+# 95149655201962, 518431875418926, 2832923350929742, 15521467648875090