No description
Find a file
erius ad976a5a9e Added using directives to avoid excessive namespaecs
Added explicit include directories to each file, even if an already included header defined them
Removed using directives from header files
2024-10-28 12:32:14 +02:00
bin Added using directives to avoid excessive namespaecs 2024-10-28 12:32:14 +02:00
include/tapelib Added using directives to avoid excessive namespaecs 2024-10-28 12:32:14 +02:00
src Added using directives to avoid excessive namespaecs 2024-10-28 12:32:14 +02:00
tests Added using directives to avoid excessive namespaecs 2024-10-28 12:32:14 +02:00
.clang-format Integrated clang-tidy into cmake 2024-10-23 14:41:12 +03:00
.clang-tidy Removed clang-tidy check for do-while loops 2024-10-27 05:18:23 +02:00
.gitignore Added clang-format and clang-tidy 2024-10-21 11:03:12 +03:00
.pre-commit-config.yaml Integrated clang-tidy into cmake 2024-10-23 14:41:12 +03:00
CMakeLists.txt Updated README.md to include additional info about this project 2024-10-28 05:23:42 +03:00
README.md Updated README.md to include additional info about this project 2024-10-28 05:23:42 +03:00

Yadro TATLIN Data Services - Задание

Устройство хранения данных типа лента (Tape) предназначено для последовательной записи и чтения данных. Считывающая/записывающая магнитная головка неподвижна во время чтения и записи, а лента имеет возможность двигаться в обоих направлениях. Запись и чтение информации возможны в ячейку ленты, на которой в данный момент находится магнитная головка. Перемещения ленты затратная по времени операция лента не предназначена для произвольного доступа. Имеется входная лента длины N (где N велико), содержащая элементы типа integer (2^32). Имеется выходная лента такой же длины. Необходимо записать в выходную ленту отсортированные по возрастанию элементы с входной ленты. Есть ограничение по использованию оперативной памяти не более M байт (M может быть < N, т.е. загрузить все данные с ленты в оперативную память не получится). Для реализации алгоритма можно использовать разумное количество временных лент, т.е. лент, на которых можно хранить какую-то временную информацию, необходимую в процессе работы алгоритма.

Необходимо создать проект С++, компилируемый в консольное приложение, которое реализует алгоритм сортировки данных с входной ленты на выходную. Необходимо сделать следующее:

  • Определить интерфейс для работы с устройством типа лента.
  • Написать класс, реализующий этот интерфейс и эмулирующий работу с лентой посредством обычного файла. Должно быть возможно сконфигурировать (без перекомпиляции например, через внешний конфигурационный файл, который будет прочитан на старте приложения) задержки по записи/чтению элемента с ленты, перемотки ленты, и сдвига ленты на одну позицию.
  • Файлы временных лент можно сохранять в директорию tmp.
  • Написать класс, реализующий алгоритм сортировки данных с входной ленты на выходную.
  • Консольное приложение должно принимать на вход имя входного и выходного файлов и производить сортировку.
  • Желательно написать юнит-тесты.

Описание

Проект использует CMake для сборки. Некоторый функционал проекта несовместим с Windows и MacOS (получение используемой памяти, создание временных файлов и т. п.) Проект успешно собирался на Linux x86_64 и aarch64. Документация реализована посредством этого README файла, а также подробными комментариями в коде

Структура проекта:

  • bin - Исходный код исполняемых файлов
    • ftsort - Исходный код основной программы проекта
  • include - Директория для заголовков
    • tapelib - Директория для заголовков библиотеки tapelib
  • src - Исходный код библиотек
  • tests - Исходный код unit-тестов

Сборка

Linux

  1. Склонируйте данный репозиторий и перейдите в него
git clone https://git.obamna.ru/erius/yadro-task.git
cd yadro-task
  1. Сгенерируйте файлы сборки CMake
cmake -S . -B build
  1. Соберите проект с помощью CMake
cmake --build build
  1. Запустите unit-тесты
ctest --test-dir build -V

Сборка и работоспособность проекта не проверялись на Windows и MacOS