Хочу вам представить интересную задачку. Условие очень простое, есть клеточное поле, на которое рандомно кидаются песчинки. Если в какой-либо клетке оказывается 4 песчинки, то эти 4 песчинки раскидываются по соседям (одна в левую, одна в правую, одна в верхнюю и одна в нижнюю). После раскидывания у соседей может оказаться 4 и более песчинок, соответственно они раскидываются у них (если, например, в клетке пять песчинок, четыре раскидываются, остается одна). Ясно, чтоб не было произвольности в процессе раскидывания, нужно сначала составить список всех клеток, в которых 4 и более песчинок, потом их всех раскидать, потом опять составить список и т.д.
Условие простое, но есть неожиданное явление. Если вначале доска уже была заполнена по 2 песчинки в клетке, то рождаются «генераторы», которые начинают генерировать волны по доске, причем генераторы с разными частотами. При начальном заполнении 3, начинают рисоваться красивые геометрические узоры, а при 4, нечто немного похожее на фракталы.
Исходный текст http://www.everfall.com/paste/id.php?eg5n0zl9xz0y
Скомпилированная программа Красивая математическая задача
Правка:
Занимался я этой задачкой не один, вот страница моего друга, посвященная этой задаче http://written.ru/blog/2007/11/06/Avalanches
ud1
> Если в какой-либо клетке оказывается 4 песчинки, то эти 4 песчинки
> раскидываются по соседям (одна в левую, одна в правую, одна в верхнюю и одна в
> нижнюю).
А что будет, если соседняя клетка вне буфера?
Баг:при нажатии крестика процесс остаётся.
X512
> А что будет, если соседняя клетка вне буфера?
Ну здесь на краях песчинки тупо исчезают (падают с доски). А вообще здесь много свободы для творчества, можно попытаться замкнуть края, можно из 6 досок скажем куб составить, можно например какие-то ямы придумать посреди поля, и т.д.
X512
> Баг:при нажатии крестика процесс остаётся.
Это фича такая. А вообще я не особо заботился о правильности кода, консоль нужна чтоб в нее писать удобно. А код писал два года назад, сейчас просто наткнулся случайно на харде и решил показать.
Кстати при заполнении 2 волны наверно не видно, из-за большой скорости, лучше увеличить доску:
lv 2 1000 1000
Конвей как-то придумал клеточный автомат "Жизнь". Тут что-то похожее.
Monstradamus
> Тут что-то похожее.
Не. Там булевы значения клеток и правила другие.
X512
Ну я поэтому и сказал "похожее", а не "такое же" ))
ud1
> Если в какой-либо клетке оказывается 4 песчинки, то эти 4 песчинки
> раскидываются по соседям
а не логичнее ли было бы раскидывать когда в клетке 5 песчинок? тогда они распределялись бы поравну между данной клеткой и её четырьмя соседями.
А ещё интересно было бы посмотреть на это в гексагональном виде, когда при достижении 7 песчинок в одном шестиугольнике 6 из них раскидывались бы по соседям а одна оставалась в центральной клеточке.
А ещё можно сделать песчинки цветными, и сделать так чтобы определённые цвета с определённой вероятностью падали в определённую сторону. И цвет клеточки определять исходя из суммы цветных песчинок в ней.
nov09
> а не логичнее ли было бы раскидывать когда в клетке 5 песчинок? тогда они
> распределялись бы поравну между данной клеткой и её четырьмя соседями.
Мне кажется это тоже самое, просто считайте что в каждой клетке одна лишняя песчинка, которую не учтываем.
Кстати рандомно новые песчинки не добавляются, пока есть возможность раскидывания, при начальном заполнении 3 первая рандомно кинутая песчинка уже образуется волну, а при 4 даже и кидать не надо, начинается падение песчинок с краев. Фрактало-подобная картинка здесь http://written.ru/blog/2007/11/06/Avalanches это установившеяся картина, и была получена при отключенном рандомном добавлении. Если замкнуть циклически края, то понятно, что получится статическая картина с 4 песчинками в каждой клетке. Но можно при этом добавить дыры произвольной формы в доске, и полюбоваться получившееся конечной картиной. Ну и так же было бы интересно посмотреть на Фрактало-подобные изображения при больших размерах досок, 10000*10000 например.
Но я считаю, что самым красивым в этой задаче являются не конечные состояния, а сама динамика процесса.
Где-то я этот процесс уже видел, и он использовался для чего-то полезного.
Monstradamus
>>Конвей как-то придумал клеточный автомат "Жизнь". Тут что-то похожее.
Вот я сразу о том же подумал. ) Простые правила, а получается что-то непредсказуемое. )
И правда, очень красиво. )
Поместил в центр "несгораемые" 4 песчинки.
Тема в архиве.