Tree datastructures: Difference between revisions
Content added Content deleted
m (Withdrew the examples which use other sample outlines. I don't feel comfortable reproducing jokes about mocking and trolling.) |
(→{{header|Go}}: Changed 'golfing' to 'trolling'. Also round trip test now programmatic rather than just visual.) |
||
Line 45: | Line 45: | ||
import ( |
import ( |
||
"fmt" |
"fmt" |
||
"io" |
|||
"os" |
|||
"strings" |
"strings" |
||
) |
) |
||
Line 58: | Line 60: | ||
} |
} |
||
func printNest(n nNode, level int) { |
func printNest(n nNode, level int, w io.Writer) { |
||
if level == 0 { |
if level == 0 { |
||
fmt. |
fmt.Fprintln(w, "\n==Nest form==\n") |
||
} |
} |
||
fmt. |
fmt.Fprintf(w, "%s%s\n", strings.Repeat(" ", level), n.name) |
||
for _, c := range n.children { |
for _, c := range n.children { |
||
fmt. |
fmt.Fprintf(w, "%s", strings.Repeat(" ", level+1)) |
||
printNest(c, level+1) |
printNest(c, level+1, w) |
||
} |
} |
||
} |
} |
||
Line 84: | Line 86: | ||
} |
} |
||
func printIndent(iNodes []iNode) { |
func printIndent(iNodes []iNode, w io.Writer) { |
||
fmt. |
fmt.Fprintln(w, "\n==Indent form==\n") |
||
for _, n := range iNodes { |
for _, n := range iNodes { |
||
fmt. |
fmt.Fprintf(w, "%d %s\n", n.level, n.name) |
||
} |
} |
||
} |
} |
||
Line 101: | Line 103: | ||
n1 := nNode{"RosettaCode", nil} |
n1 := nNode{"RosettaCode", nil} |
||
n2 := nNode{"rocks", []nNode{{"code", nil}, {"comparison", nil}, {"wiki", nil}}} |
n2 := nNode{"rocks", []nNode{{"code", nil}, {"comparison", nil}, {"wiki", nil}}} |
||
n3 := nNode{"mocks", []nNode{{" |
n3 := nNode{"mocks", []nNode{{"trolling", nil}}} |
||
n1.children = append(n1.children, n2, n3) |
n1.children = append(n1.children, n2, n3) |
||
⚫ | |||
var sb strings.Builder |
|||
⚫ | |||
s1 := sb.String() |
|||
fmt.Print(s1) |
|||
var iNodes []iNode |
var iNodes []iNode |
||
toIndent(n1, 0, &iNodes) |
toIndent(n1, 0, &iNodes) |
||
printIndent(iNodes) |
printIndent(iNodes, os.Stdout) |
||
var n nNode |
var n nNode |
||
toNest(iNodes, 0, 0, &n) |
toNest(iNodes, 0, 0, &n) |
||
sb.Reset() |
|||
printNest(n, 0, &sb) |
|||
s2 := sb.String() |
|||
fmt.Print(s2) |
|||
fmt.Println("\nRound trip test satisfied? ", s1 == s2) |
|||
}</lang> |
}</lang> |
||
Line 122: | Line 135: | ||
wiki |
wiki |
||
mocks |
mocks |
||
trolling |
|||
==Indent form== |
==Indent form== |
||
Line 132: | Line 145: | ||
2 wiki |
2 wiki |
||
1 mocks |
1 mocks |
||
2 trolling |
|||
2 golfing |
|||
==Nest form== |
==Nest form== |
||
Line 142: | Line 155: | ||
wiki |
wiki |
||
mocks |
mocks |
||
trolling |
|||
⚫ | |||
Round trip test satisfied? true |
|||
⚫ | |||
=={{header|Python}}== |
=={{header|Python}}== |