//examples x denotes black, . denotes white .x + .. = .x .. x. x. xx.x + .... = xx.x xx.. .... xx.. .... ..xx ..xx .... ..xx ..xx i.e.: ? + x = x ? + . = ?In-place is faster than creating a copy of region (especially regiongroup).
// objects iregion: // nothing region: iregion color //black or white regiongroup: iregion iregions[] //always 4 // in-place merge(r1, r2): if r1 == null || r2 == null: throw "invalid args" if r1 is region: return ((region)r1, r2) if r2 is region: return ((region)r2, r1) if r1 is regiongroup && r2 is regiongroup: rg1 = (regiongroup)r1 rg2 = (regiongroup)r2 if rg1.regions == null || rg2.regions == null || rg1.regions.count() != 4 || rg2.regions.count() != 4: throw "invalid args" rg = rg1 for i = 0, i < 4, i++: rg.regions[i] = merge(rg1.regions[i], rg2.regions[i]) return rg throw "out of range" (region r, iregion rother): if r.color == color.black: return r if r.color == color.white: return rother throw "color out of range"
[Hat tip to V]
No comments:
Post a Comment