Visualize a tree: Difference between revisions

Added Wren
(C# made it into an extension method.)
(Added Wren)
Line 4,091:
├─b
└─c
</pre>
 
=={{header|Wren}}==
{{trans|C}}
{{libheader|Wren-dynamic}}
<lang ecmascript>import "/dynamic" for Struct
import "random" for Random
 
var Stem = Struct.create("Stem", ["str", "next"])
 
var SDOWN = " |"
var SLAST = " `"
var SNONE = " "
 
var rand = Random.new()
 
var tree // recursive
tree = Fn.new { |root, head|
var col = Stem.new(null, null)
var tail = head
while (tail) {
System.write(tail.str)
if (!tail.next) break
tail = tail.next
}
System.print("--%(root)")
if (root <= 1) return
if (tail && tail.str == SLAST) tail.str = SNONE
if (!tail) {
tail = head = col
} else {
tail.next = col
}
while (root != 0) { // make a tree by doing something random
var r = 1 + rand.int(root)
root = root - r
col.str = (root != 0) ? SDOWN : SLAST
tree.call(r, head)
}
tail.next = null
}
 
var n = 8
tree.call(n, null)</lang>
 
{{out}}
Sample output:
<pre>
--8
|--7
| |--6
| | |--4
| | | |--1
| | | `--3
| | | |--1
| | | `--2
| | | |--1
| | | `--1
| | `--2
| | `--2
| | |--1
| | `--1
| `--1
`--1
</pre>
 
9,487

edits