RosettaCodeData/Task/Visualize-a-tree/Elena/visualize-a-tree.elena

67 lines
1.3 KiB
Text
Raw Permalink Normal View History

2020-02-17 23:21:07 -08:00
/// a program to produce a visual representation of some tree.
2019-09-12 10:33:56 -07:00
import system'routines;
import extensions;
2016-12-05 22:15:40 +01:00
2017-09-23 10:01:46 +02:00
class Node
2016-12-05 22:15:40 +01:00
{
2019-09-12 10:33:56 -07:00
string theValue;
Node[] theChildren;
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
constructor new(string value, Node[] children)
{
theValue := value;
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
theChildren := children;
}
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
constructor new(string value)
<= new(value, new Node[](0));
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
constructor new(Node[] children)
<= new(emptyString, children);
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
get() = theValue;
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
Children = theChildren;
2016-12-05 22:15:40 +01:00
}
2017-09-23 10:01:46 +02:00
extension treeOp
2016-12-05 22:15:40 +01:00
{
2019-09-12 10:33:56 -07:00
writeTree(node, prefix)
{
var children := node.Children;
var length := children.Length;
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
children.zipForEach(new Range(1, length), (child,index)
{
self.printLine(prefix,"|");
self.printLine(prefix,"+---",child.get());
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
var nodeLine := prefix + (index==length).iif(" ","| ");
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
self.writeTree(child,nodeLine);
});
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
^ self
}
2016-12-05 22:15:40 +01:00
2019-09-12 10:33:56 -07:00
writeTree(node)
= self.writeTree(node,"");
2016-12-05 22:15:40 +01:00
}
2019-09-12 10:33:56 -07:00
public program()
{
var tree := Node.new(
2020-02-17 23:21:07 -08:00
new Node[]::(
Node.new("a", new Node[]::
(
Node.new("b", new Node[]::(Node.new("c"))),
2019-09-12 10:33:56 -07:00
Node.new("d")
2020-02-17 23:21:07 -08:00
)),
2019-09-12 10:33:56 -07:00
Node.new("e")
2020-02-17 23:21:07 -08:00
));
2019-09-12 10:33:56 -07:00
console.writeTree(tree).readChar()
}