
🧮 Задача: Abelian sandpiles
Смоделируйте гравитацию, действующую на кучу песка.
Напишите функцию apply_gravity, которая, учитывая двумерный массив numpy, представляющий песок, будет "применять гравитацию" к нему (и ничего не вернет):
1. Каждый элемент массива представляет собой целое число, отражающее высоту кучи песка.
2. Любая "куча", в которой находится 4 или более частиц песка, разрушается, в результате чего четыре частицы вычитаются из кучи и распределяются между ее соседями.
Решение:
Ресурсы
Бонус!
Используйте matplotlib для отображения результата в виде изображения:
Чтобы продемонстрировать результаты, вычислите кучу песка размером 2 ** 24 песчинки
Ваше мнение пишите в комментариях 👇
@python_job_interview
Смоделируйте гравитацию, действующую на кучу песка.
Напишите функцию 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