code: def _destroy(self, target_position_groups):
          
          target_position_groups = list(target_position_groups)  # work on a copy
          destroyed_tile_groups = list()
          blank = Tile.singleton('.')
          a = self._array
          while target_position_groups:  # continue as long as more targets exist
              # delay actual clearing of destroyed tiles until all claiming
              # groups have been stored (e.g. overlapping matches, bombs)
              clear_after_storing = list()
              new_target_position_groups = list()
              for target_position_group in target_position_groups:
                  destroyed_tile_group = list()
                  for target_position in target_position_group:
                      target_tile = a[target_position]
                      # no handling for blanks that appear in destruction
                      if target_tile.is_blank():
                          continue
                      destroyed_tile_group.append(target_tile)
                      clear_after_storing.append(target_position)
                      # skull bombs require further destructions
                      if target_tile.is_skullbomb():
                          new_positions = self.__skullbomb_radius(target_position)
                          # convert individual positions to position groups
                          new_position_groups = [(new_position,) for new_position
                                                 in new_positions]
                          new_target_position_groups.extend(new_position_groups)
                  if destroyed_tile_group:
                      destroyed_tile_groups.append(destroyed_tile_group)
              # Finally clear positions after all records have been made
              for position in clear_after_storing:
                  a[position] = blank
              # Replace the completed target position groups with any new ones
              target_position_groups = new_target_position_groups
          return destroyed_tile_groups
docs: Destroy indicated position groups, handle any chain destructions,
          and return all destroyed groups.