Проходим циклом по оси X, и в каждой клетке (по оси Х) проверяем все ячейки по оси У (снизу вверх). Считаем кол-во пустых клеток до квадрата и опускаем квадрат вниз на подсчитанное кол-во пустых клеток.
Зачем вы опускаете столбцы? Опускайте строки, проходите циклом снизу вверх и итерируйте до тех пор, пока будут изменения.