code: def update(self, reseed):
          
          self._screen.print_at(" ", self._x, self._y)
          cell = None
          for _ in range(self._rate):
              self._y += 1
              cell = self._screen.get_from(self._x, self._y)
              if cell is None or cell[0] != 32:
                  break
  
          if ((cell is not None and cell[0] in [ord(x) for x in self._snow_chars + " "]) and
                  (self._y < self._screen.start_line + self._screen.height)):
              self._screen.print_at(self._char,
                                    self._x,
                                    self._y)
          else:
              if self._y > self._screen.start_line + self._screen.height:
                  self._y = self._screen.start_line + self._screen.height
  
              drift_index = -1
              if cell:
                  drift_index = self._drift_chars.find(chr(cell[0]))
              if 0 <= drift_index < len(self._drift_chars) - 1:
                  drift_char = self._drift_chars[drift_index + 1]
                  self._screen.print_at(drift_char, self._x, self._y)
              else:
                  self._screen.print_at(",", self._x, self._y - 1)
              if reseed:
                  self._reseed()
docs: Update that snowflake!
  
          :param reseed: Whether we are in the normal reseed cycle or not.