Skip to content

alex-sandalov/sandpile-model

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sandpile-model

Задача

Реализовать упрощенную модель песчаной кучи, которая позволяет сохранять свои состояния в картинку в формате BMP.

Изначальное состояние задается входным файлом.

Размер сетки может изменяться в процессе работы программы.

Реализация - консольное приложение, поддерживающее следующие аргументы командной строки:

-i, --input - tsv-файл (tab-separated values) c начальными данными

-o, --output - путь к директории для сохранения картинок

-m, --max-iter - максимальное количество итераций модели

-f, --freq - частота, с которой должны сохранятся картинки (если 0, то сохраняется только последнее состояние)

Начальное состояние

Начальное состояние задается файлом со значением количества песчинок в каждой ячейке, кроме пустых. Размер сетки следует рассчитать на основании этих данных - минимальный прямоугольник в который попадают все ячейки.

Формат файла: Каждая строчка содержит информацию об одной ячейке, в виде (x-координаты, y-координаты, количество песчинок), разделенных символом табуляции. Количество песчинок гарантированно влезет в uint64_t, координаты гарантированно влезают в int16_t

Примечания к модели

  1. Новые песчинки добавляются только при инициализации.

  2. Состояние следующего поколения ячеек зависит только от предыдущего состояния сетки.

  3. В случае если песчинки пытаются обвалиться за границу сетки, ее размер увеличивается на 1 в соответствующую сторону.

Результат работы - программа

Программа должна пересчитывать состояние модели согласно начальным данным, а также сохранять промежуточные состояния с заданной частотой в виде картинки в формате bmp.

Картинка для текущего состояния формируется по следующим правилам:

  1. Размер картинки равен размеру поля.

  2. Каждый пиксель соответствует ячейке поля.

  3. Цвет пикселя зависит от количества песчинок в ячейке.

    • 0 - белый
    • 1 - зеленый
    • 2 - желтый
    • 3 - фиолетовый
    • > 3 - черный
  4. Кодирование 1 пикселя должно занимать не более 4 бит.

Программа должна закончить свою работу в случае если модель достигла стабильного состояния, либо номера заданной изначально итерации.

Ограничения

  1. Пользовать сторонними библиотеками, кроме стандартной, запрещено. В частности это означает, что Вы должны сами спроектировать и реализовать функции для работы с картинками в формате bmp.

  2. Использование контейнеров стандартной библиотеки (std::vector, std::list и тд) - запрещено.

Примечание

  1. Для реализации Вам может пригодиться библиотека для работы с файловой системой из стандартной библиотеки.
  2. В данной лабе Вам дано только описание. Структура проекта и организация сборки также ваша задача. Использовать для сборки не cmake - запрещено.
  3. Важно помнить, что размер структуры может быть не равен сумме размеров ее полей за счет выравнивания. Данную проблему можно решить за счет директив препроцессора.