NB. Utilities for playing with trees of numbers v0.01 NB. (c) 2007 K.L. Metlov NB. All rights Reserved. NB. An example tree atree =: (1;(2;(4;(<12);(<<13));6);(<3);(7;(<10);(<15);(<<11));(<8);(<<9)) output=: 2&((1!:2)~) dl =: 4 : 0 NB. draw level NB. Phrase book idioms ls =. 2 /\ 0 , ] NB. locate trailing 1s (m61) li =. ] e.~ [: i. [: >: >./ NB. locate indices (m52) ll =. y NB. merge sub-level tx =. ":x NB. current label if. (ps =. -: (2 + # tx) - # {. s) > 0 do. NB. label is long s =. (>. (([ ,"1 s ,"1 ])&(#&' ')) <.) ps NB. pad sub-level end. v =. <. _2 A\ I. (ls +. le) (' ' ~: {.) s v =. (# {. s) $!.0 li v NB. vertical links pt =. <. A I. v NB. label position h=. (+ (cr +. cl)&.:-. + ll + 2 * ll&.|.) v h=. h + (-pt)&|. (1, <: #v) # 4 0 NB. connect to label h=. ((h ,: 9 * v) { 0 11 2 1 3 8 5 4 6 10) { ' ',(9!:6)'' h=. (((-pt)&+@<.@-:@# |. (#v) $!.' ' ]) tx) , h h , s ) drawtree =: (([: ,: ' ' ,~ ":@>)`(>@{. dl [: $:&.> }.))@.(1 < #)