For your original format, with a transition matrix to simplify finding
"catenaries" for each column:
tm=:3 4 $ 0 1 0 1 2 2 2 2 3 1 3 1
start=: 0,~ = + 2*(=>:) NB. same height = 1, direct children = 2, others = 0
step=: {::&tm@, NB. apply tm
nub=: ] ,:~ 4* 2= ] NB. '-' before 'o'
pt=: [: }:@|:@}. [: ,/ [ (' |o+-' {~ [: nub [: step/\. start)"_ 0 ~.
pt 0 1 2 2 1 1 2 3 2 3 3 2 3 3
As a long-liner:
pt=:[: }:@|:@}. [: ,/ [ (' |o+-' {~ [: (,:~ 4* 2= ])~ [: {::&(3 4 $ 0 1 0 1
2 2 2 2 3 1 3 1)@,/\. 0,~ = + 2*(=>:))"_ 0 ~.
On Fri, 07 Aug 2020 22:19:07 +0900
ethiejiesa via Programming <[email protected]> wrote:
> Do you know a slick way of pretty-printing a tree given its depth vector
> representation?
>
> A vector represents a tree if and only if it satisfies the following:
>
> NB. Tree valid? First node is root node (depth 0), only one root node,
> NB. and all nodes are exactly one deeper than their parent
> tv=: 0&=@{. *. *./@(>&0)@}. *. 1 *./@:>: +/\^:_1
>
> The goal is to produce a nice visualization given a valid depth vector. For
> example, given (d=: 0 1 2 2 1 1 2 2 3), something like this would be ideal:
>
> o
> |-o
> | |-o
> | +-o
> |-o
> +-o
> |-o
> +-o
> +-o
>
> About the best I can do in a single line is this:
>
> NB. Tree print
> tp=: (, LF&,)/@({&' |o-')@((3&*@=/ |:@}.@(,/)@(,:"1&|:) 2&*@=/ +. >/)
> ~.)
> tp d
> o
> |-o
> | |-o
> | | |-o
> |-o
> | |-o
> | | |-o
> |-o
> | |-o
> | | |-o
>
> Trimming the branches, however, is giving me a lot of grief. Can you do
> better?
> I am looking for terse one-liners but am open to alternative visualizations.
>
> Producing segments of "trimmed branches" is a nice little sub-problem. It
> corresponds to finding finding "catenaries", i.e. runs of integers capped on
> the left and right by n, where the intervening integers "droop below" n, i.e.
> satisfy (>:n).
>
>
> Looking forward to your ideas!
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm