No description
Find a file
erius 680ec28b57 Added file_name and temp fields to FileTape
Removed explicit keyword before every constructor in FileTape
Added getters for private fields in FileTape
Made Tape's copy construcot marked as delete by default
Implemented custom destrucor for FileTape
Added explicit move and copy constructors to FileTape
Added generate_tmp_file_name method to tape namespace
Removed assets directory from tests - testing data should be provided in the test's cpp file
2024-10-26 04:23:11 +03:00
bin Restuctured source tree - added bin and tests directories 2024-10-24 04:25:45 +03:00
include/tapelib Added file_name and temp fields to FileTape 2024-10-26 04:23:11 +03:00
src Added file_name and temp fields to FileTape 2024-10-26 04:23:11 +03:00
tests Added file_name and temp fields to FileTape 2024-10-26 04:23:11 +03:00
.clang-format Integrated clang-tidy into cmake 2024-10-23 14:41:12 +03:00
.clang-tidy Restuctured source tree - added bin and tests directories 2024-10-24 04:25:45 +03: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 Restuctured source tree - added bin and tests directories 2024-10-24 04:25:45 +03:00
README.md Added README 2024-10-19 05:44:57 +03:00

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

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

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

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