{"id":16199875,"url":"https://github.com/bialger/sandpile","last_synced_at":"2026-01-25T16:32:21.621Z","repository":{"id":252990913,"uuid":"842125876","full_name":"bialger/SandPile","owner":"bialger","description":"A C++ implementation of the Abelian sand pile model. ITMO SE'27 first cource programming laboratory work.","archived":false,"fork":false,"pushed_at":"2024-08-14T15:44:24.000Z","size":110,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-23T11:32:14.873Z","etag":null,"topics":["algorithms","from-scratch","sandpile","sandpile-model","simulations","student-project"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bialger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-13T18:10:55.000Z","updated_at":"2024-10-30T14:34:12.000Z","dependencies_parsed_at":"2024-11-03T09:23:41.628Z","dependency_job_id":"4b8d5c1f-419b-4fd9-9ee9-97015fafb096","html_url":"https://github.com/bialger/SandPile","commit_stats":null,"previous_names":["bialger/sandpile"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bialger/SandPile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSandPile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSandPile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSandPile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSandPile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bialger","download_url":"https://codeload.github.com/bialger/SandPile/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSandPile/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28755551,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T13:59:49.818Z","status":"ssl_error","status_checked_at":"2026-01-25T13:59:33.728Z","response_time":113,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithms","from-scratch","sandpile","sandpile-model","simulations","student-project"],"created_at":"2024-10-10T09:28:33.279Z","updated_at":"2026-01-25T16:32:21.607Z","avatar_url":"https://github.com/bialger.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Лабораторная работа 3\n\n## Задача\n\nРеализовать упрощенную [модель песчаной кучи](https://en.wikipedia.org/wiki/Abelian_sandpile_model), которая позволяет сохранять свои состояния в картинку в [формате BMP](https://en.wikipedia.org/wiki/BMP_file_format).\n\nИзначальное состояние задается входным файлом.\n\nРазмер сетки может изменяться в процессе работы программы.\n\nРеализация - консольное приложение, поддерживающее следующие аргументы командной строки:\n\n  **-i, --input**    - [tsv-файл](https://en.wikipedia.org/wiki/Tab-separated_values) (tab-separated values) c начальными данными\n\n  **-o, --output**   - путь к директории для сохранения картинок\n\n  **-m, --max-iter** - максимальное количество итераций модели\n\n  **-f, --freq**     - частота, с которой должны сохранятся картинки (если 0, то сохраняется только последнее состояние)\n\n## Начальное состояние\n\nНачальное состояние задается файлом со значением количества песчинок в каждой ячейке, кроме пустых. Размер сетки следует рассчитать на основании этих данных - минимальный прямоугольник в который попадают все ячейки.\n\nФормат файла:\nКаждая строчка содержит информацию об одной ячейке, в виде (x-координаты, y-координаты, количество песчинок), разделенных символом табуляции. Количество песчинок гарантированно влезет в `uint64_t`, координаты гарантированно влезают в `int16_t`\n\n## Примечания к модели\n\n1. Новые песчинки добавляются только при инициализации.\n\n2. Состояние следующего поколения ячеек зависит только от предыдущего состояния сетки.\n\n3. В случае если песчинки пытаются обвалиться за границу сетки, ее размер увеличивается на 1 в соответствующую сторону.\n\n## Результат работы - программа\n\nПрограмма должна пересчитывать состояние модели согласно начальным данным, а также сохранять промежуточные состояния с заданной частотой в виде картинки в формате bmp.\n\nКартинка для текущего состояния формируется по следующим правилам:\n\n1. Размер картинки равен размеру поля.\n\n2. Каждый пиксель соответствует ячейке поля.\n\n3. Цвет пикселя зависит от количества песчинок в ячейке.\n\n    + 0 - белый\n    + 1 - зеленый\n    + 2 - желтый\n    + 3 - фиолетовый\n    + \\\u003e 3 - черный\n\n4. Кодирование 1 пикселя должно занимать не более 4 бит.\n\nПрограмма должна закончить свою работу в случае если модель достигла стабильного состояния, либо номера заданной изначально итерации.\n\n## Ограничения\n\n1. Пользовать сторонними библиотеками, кроме стандартной, запрещено. В частности это означает, что Вы должны *сами* спроектировать и реализовать функции для работы с картинками в формате bmp.\n\n2. Использование контейнеров стандартной библиотеки (`std::vector`, `std::list` и тд) - запрещено.\n\n## Примечание\n\n1. Для реализации Вам может пригодиться [библиотека](https://en.cppreference.com/w/cpp/filesystem) для работы с файловой системой из стандартной библиотеки.\n2. В данной лабе Вам дано только описание. Структура проекта и организация сборки также ваша задача. Использовать для сборки не cmake - запрещено.\n3. Важно помнить, что размер структуры может быть не равен сумме размеров ее полей за счет [выравнивания](https://en.cppreference.com/w/c/language/object). Данную проблему можно решить за счет [директив препроцессора](https://en.cppreference.com/w/cpp/preprocessor/impl).\n\n## Deadline\n\n1. 31.10.23 24:00 - 0.8\n2. 07.11.23 24:00 - 0.65\n3. 14.11.23 24:00 - 0.5\n\nДанная работа оценивается 15 баллами.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbialger%2Fsandpile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbialger%2Fsandpile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbialger%2Fsandpile/lists"}