code: def _fall(self):
          
          a = self._array
          for column in [a[:, c] for c in range(a.shape[1])]:
              # find blanks and fill them with tiles above them
              target_p = column.shape[0] - 1  # start at the bottom
              fall_distance = 1  # increases every time a new gap is found
              while target_p - fall_distance >= 0:  # step up the target position
                  if column[target_p].is_blank():
                      blank = column[target_p]  # move the blank
                      #find the next nonblank position
                      while target_p - fall_distance >= 0:
                          next_p = target_p - fall_distance
                          if column[next_p].is_blank():
                              fall_distance += 1
                          else:
                              break  # stop expanding blank space when nonblank
                      if target_p - fall_distance >= 0:
                          #move the nonblank position to the target if gap exists
                          source_position = target_p - fall_distance
                          column[target_p] = column[source_position]
                          column[source_position] = blank
                          #in any case, move on to the next target position
                  target_p -= 1
docs: Cause tiles to fall down to fill blanks below them.