Tree from nesting levels: Difference between revisions
Content added Content deleted
(Added Go) |
|||
Line 29: | Line 29: | ||
:* <code>[3, 3, 3, 1, 1, 3, 3, 3]</code> |
:* <code>[3, 3, 3, 1, 1, 3, 3, 3]</code> |
||
=={{header|Go}}== |
|||
{{trans|Python}} |
|||
This is based on the Python recursive version. |
|||
<lang go>package main |
|||
import "fmt" |
|||
type any = interface{} |
|||
func toTree(list []int, index, depth int) (int, []any) { |
|||
var soFar []any |
|||
for index < len(list) { |
|||
t := list[index] |
|||
if t == depth { |
|||
soFar = append(soFar, t) |
|||
} else if t > depth { |
|||
var deeper []any |
|||
index, deeper = toTree(list, index, depth+1) |
|||
soFar = append(soFar, deeper) |
|||
} else { |
|||
index = index - 1 |
|||
break |
|||
} |
|||
index = index + 1 |
|||
} |
|||
if depth > 1 { |
|||
return index, soFar |
|||
} |
|||
return -1, soFar |
|||
} |
|||
func main() { |
|||
tests := [][]int{ |
|||
{}, |
|||
{1, 2, 4}, |
|||
{3, 1, 3, 1}, |
|||
{1, 2, 3, 1}, |
|||
{3, 2, 1, 3}, |
|||
{3, 3, 3, 1, 1, 3, 3, 3}, |
|||
} |
|||
for _, test := range tests { |
|||
_, nest := toTree(test, 0, 1) |
|||
fmt.Printf("%17s => %v\n", fmt.Sprintf("%v", test), nest) |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
[] => [] |
|||
[1 2 4] => [1 [2 [[4]]]] |
|||
[3 1 3 1] => [[[3]] 1 [[3]] 1] |
|||
[1 2 3 1] => [1 [2 [3]] 1] |
|||
[3 2 1 3] => [[[3] 2] 1 [[3]]] |
|||
[3 3 3 1 1 3 3 3] => [[[3 3 3]] 1 1 [[3 3 3]]] |
|||
</pre> |
|||
=={{header|Haskell}}== |
=={{header|Haskell}}== |