Same fringe: Difference between revisions

Content added Content deleted
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.is_an(Array)) {
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";
 !defined(L) && !defined(R) && return "Same"
return "Different";
return "Different"
}
}
}
}
 

range(1, trees.end).each { |tree_idx|
for idx in ^(trees.end) {
say ("tree[#{tree_idx-1}] vs tree[#{tree_idx}]: ",
say ("tree[#{idx}] vs tree[#{idx+1}]: ",
cmp_fringe(trees[tree_idx-1], trees[tree_idx]));
cmp_fringe(trees[idx], trees[idx+1]))
}</lang>
}</lang>