🧮 Задача: Abelian sandpiles



Смоделируйте гравитацию, действующую на кучу песка.



Напишите функцию apply_gravity, которая, учитывая двумерный массив numpy, представляющий песок, будет "применять гравитацию" к нему (и ничего не вернет):



1. Каждый элемент массива представляет собой целое число, отражающее высоту кучи песка.



2. Любая "куча", в которой находится 4 или более частиц песка, разрушается, в результате чего четыре частицы вычитаются из кучи и распределяются между ее соседями.



Решение:



>>> import numpy as np

>>> sandpile = np.zeros((5, 5), dtype=np.uint32)

>>> sandpile[2, 2] = 16

>>> apply_gravity(sandpile)

>>> print(sandpile)

[[0 0 1 0 0]

[0 2 1 2 0]

[1 1 0 1 1]

[0 2 1 2 0]

[0 0 1 0 0]]



Ресурсы



Бонус!



Используйте matplotlib для отображения результата в виде изображения:



apply_gravity(sandpile)

plt.imshow(sandpile)

plt.show()



Чтобы продемонстрировать результаты, вычислите кучу песка размером 2 ** 24 песчинки



Ваше мнение пишите в комментариях 👇



@python_job_interview