aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2021-08-09 18:28:34 +0100
committerRoger Bell_West <roger@firedrake.org>2021-08-09 18:28:34 +0100
commit7114102c500fcc0ce6e7d9340bad7ba3407b175b (patch)
tree23de69ec4d77b65fcce48d5f169d772517793477
parentdae33f10b00beaf02883597401ede84ddcc3b77f (diff)
downloadperlweeklychallenge-club-7114102c500fcc0ce6e7d9340bad7ba3407b175b.tar.gz
perlweeklychallenge-club-7114102c500fcc0ce6e7d9340bad7ba3407b175b.tar.bz2
perlweeklychallenge-club-7114102c500fcc0ce6e7d9340bad7ba3407b175b.zip
Addendum, PostScript answer to part 2
-rw-r--r--challenge-125/roger-bell-west/postscript/ch-2.ps73
1 files changed, 73 insertions, 0 deletions
diff --git a/challenge-125/roger-bell-west/postscript/ch-2.ps b/challenge-125/roger-bell-west/postscript/ch-2.ps
new file mode 100644
index 0000000000..94731bac34
--- /dev/null
+++ b/challenge-125/roger-bell-west/postscript/ch-2.ps
@@ -0,0 +1,73 @@
+%! no DSC
+
+% def btd(tree)
+% st=tree.length
+% depth=Array.new(st,0)
+% diameter=Array.new(st,0)
+% (st-1).downto(0) do |i|
+% if tree[i] != 0 then
+% a=i*2+1
+% b=a+1
+% if b < st then
+% depth[i]=1+[depth[a],depth[b]].max
+% diameter[i]=[
+% 1+depth[a]+depth[b],
+% diameter[a],
+% diameter[b],
+% ].max
+% else
+% depth[i]=1
+% diameter[i]=1
+% end
+% end
+% end
+% return diameter[0]
+% end
+
+/max2 {
+ dup % a b b
+ 3 2 roll % b b a
+ dup % b b a a
+ 3 1 roll % b a b a
+ lt { exch} if
+ pop
+} def
+
+/btd {
+ /tree exch def
+ /st tree length def
+ /depth st array def
+ /diameter st array def
+ 0 1 st 1 sub {
+ dup
+ depth exch 0 put
+ diameter exch 0 put
+ } for
+ st 1 sub 1 neg 0 {
+ /i exch def
+ tree i get 0 ne {
+ /a i 2 mul 1 add def
+ /b a 1 add def
+ b st lt {
+ depth i depth a get depth b get max2 1 add put
+ diameter i
+ depth a get depth b get 1 add add
+ diameter a get
+ diameter b get
+ max2 max2 put
+ } {
+ depth i 1 put
+ diameter i 1 put
+ } ifelse
+ } if
+ } for
+ diameter 0 get
+} def
+
+[ 1
+ 2 5
+ 3 4 6 7
+ 0 0 0 0 0 0 8 10
+ 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 ]
+btd
+=