Same fringe: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (Thundergnat moved page Same Fringe to Same fringe: Follow normal task title capitalization policy) |
m (→{{header|Sidef}}: minor code clean-up) |
||
Line 2,428: | Line 2,428: | ||
# and this one's different! |
# and this one's different! |
||
[ [ [ [ [ [ 'a' ], 'b' ], 'c', ], 'd', ], 'e', ], 'f' ], |
[ [ [ [ [ [ 'a' ], 'b' ], 'c', ], 'd', ], 'e', ], 'f' ], |
||
] |
] |
||
func get_tree_iterator(*rtrees) { |
func get_tree_iterator(*rtrees) { |
||
var tree |
var tree |
||
func { |
func { |
||
tree = rtrees.pop |
tree = rtrees.pop |
||
while (defined(tree) && tree. |
while (defined(tree) && tree.kind_of(Array)) { |
||
rtrees.append(tree[1]) |
rtrees.append(tree[1]) |
||
tree = tree[0] |
tree = tree[0] |
||
} |
} |
||
return tree |
return tree |
||
} |
} |
||
} |
} |
||
func cmp_fringe(a, b) { |
func cmp_fringe(a, b) { |
||
var ti1 = get_tree_iterator(a) |
var ti1 = get_tree_iterator(a) |
||
var ti2 = get_tree_iterator(b) |
var ti2 = get_tree_iterator(b) |
||
loop { |
loop { |
||
var (L, R) = (ti1(), ti2()) |
var (L, R) = (ti1(), ti2()) |
||
defined(L) && defined(R) && (L == R) && next |
defined(L) && defined(R) && (L == R) && next |
||
!defined(L) && !defined(R) && return "Same" |
|||
return "Different" |
return "Different" |
||
} |
} |
||
} |
} |
||
for idx in ^(trees.end) { |
|||
say ("tree[#{ |
say ("tree[#{idx}] vs tree[#{idx+1}]: ", |
||
cmp_fringe(trees[ |
cmp_fringe(trees[idx], trees[idx+1])) |
||
}</lang> |
}</lang> |
||