def delete_fragment(self, seed): """Deletes a random region""" if not seed.has_structure and seed.has_regions: regions = [r for r in seed.regions if len(seed.regions[r]) > 0] if len(regions) == 0: return seed key = random.choice(list(regions)) s, e = (0, 0) while (e - s < 2): s, e = random.choice(list(seed.regions[key])) new_seed = Seed(seed.data[:s] + seed.data[e:]) new_seed.has_structure = False new_seed.has_regions = False return new_seed else: return super().delete_fragment(seed)
def swap_fragment(self, seed): """Chooses a random region and swaps it with a fragment that starts with the same symbol""" if not seed.has_structure and seed.has_regions: regions = [ r for r in seed.regions if (len(seed.regions[r]) > 0 and len(self.fragments[r]) > 0) ] if len(regions) == 0: return seed key = random.choice(list(regions)) s, e = random.choice(list(seed.regions[key])) swap_structure = random.choice(self.fragments[key]) swap_string = tree_to_string(swap_structure) new_seed = Seed(seed.data[:s] + swap_string + seed.data[e:]) new_seed.has_structure = False new_seed.has_regions = False return new_seed else: return super().swap_fragment(seed)