Модуль на Python
Необходимо реализовать модуль для языка программирования Python для работы с массивами.
Предусмотрите следующие возможности модуля:
создание динамических массивов для чисел разных типов(целые (long), числа с плавающей точкой (double));
создание пустого массива;
создание массива, заполненного заранее заданными данными;
реализуйте следующие функции для работы с массивом:
добавление элемента в конец массива (append);
вставка элемента в нужную позицию (insert);
удаление первого вхождения элемента в массив (remove);
удаление первого вхождения элемента в массив с возвратом (pop);
инвертирование массива (__reversed__ для поддержки функции reversed);
определение длины массива (поддержка функции len);
определение количества памяти, занимаемой массивом (sys.getsizeof, __sizeof__);
сравнение со стандартным массивом из модуля array или списком (__eq__);
возможность итерирования по массиву;
алгоритм бинарного поиска, возвращающий индекс найденного элемента или None если ничего не найдено
Не забудьте предусмотреть функцию изменения размера, которая будет работать "под капотом".
Для большей справки можно обратиться к документации модуля array стандартной библиотеки Python.
Требования к реализации
Модуль dynamic_array необходимо реализовать как Си расширение для Python. Это можно выполнить с помощью Cython – специальной надстройки для Python, позволяющей вызывать функции из Си напрямую, а также обладающей приближенным к Python синтаксисом. Документацию по Cython см. в полезных материалах. Также можно сразу реализовать этот модуль на языке Си и подключить его к Python с помощью Cython.
Обратите внимание, что при реализации на Cython или Си обертка на Python вокруг массива не нужна. Здесь dynamic_array содержит обертку только для тестов.
Метод инициализации класса Array должен принимать два аргумента:
код типа в виде строки, 'd' для чисел с плавающей точкой и 'i' для целых чисел;
набор инициализирующих данных, которые сразу будут занесены в массив.
Интерфейс методов и функций должен быть аналогичен методам модуля array стандартной библиотеки Python.
Модуль binary_search, содержащий реализацию бинарного поиска разрешается реализовать на Python. Этот модуль должен поддерживать работу с объектами из dynamic_array.
search(array: Iterable, item: Any=False) -> Optional[int]:
В файлах dynamic_array.py и binary_search.py размещены упрощенные шаблоны классов и функций. В Файлах test_dynamic_array.py и test_binary_search.py размещены тесты для проверки решения. Тесты можно запустить с помощью модуля unittest или pylint.
В файле my_array.pyx приведен пример реализации расширения для Python на Cython. Для компиляции этого модуля необходимо создать файл setup.py пример которого можно найти в текущей директории. Затем достаточно выполнить команду:
python setup.py build_ext --inplace
По завершении выполнения компиляции и при отсутствии ошибок появятся файлы:
my_array.c
my_array.cp39-win_amd64.pyd
а также директория build
В файле my_array.cp39-win_amd64.pyd будет содержаться скомпилированный модуль, его можно использовать как обычный модуль Python. Для удобства его можно переименовать в my_array.pyd.
Для прохождения тестов вам понадобиться pytest и плагин pytest-timeout. Установить их можно командами:
python -m pip install pytest
python -m pip install pytest-timeout
Также нужен файл conftest.py расположите его рядом с тестами. Подробнее об этом файле можно узнать в документации.
Запустить тесты можно командой:
pytest test_dynamic_array.py -s
Входные и выходные данные
Пример входных данных для бинарного поиска:
Исходный список: [-3, 0, 2, 5, 5], 0
Результат: 1
Исходный список: [-3, 0, 2, 5, 5], 5
Результат: 3
Исходный список: [-3, 0, 2, 5, 5], 10
Результат: None
Методика оценивания
Оценка выставляется в соответствии со следующими требованиями:
Общие требования:
код работы проходит проверку утилитой pylint с конфигурационным файлом .pylintrc.
код работы успешно проходит тесты, если таковые имеются.
наличие документации к модулям, функциям, классам и методам.
наличие аннотации типов.
На оценку 3 балла:
реализовать методы append, insert, remove, __eq__.
На оценку 4 балла:
дополнительно реализовать методы pop, reverse.
На оценку 5 балла:
реализовать все методы, указанные в описании к работе.
Файлы по ссылке:
https://github.com/redb0/aads/tree/main/practice/practice_1.1
Current freelance projects in the category Desktop Apps
Need to extract POST / GET / PUT requests from the TikTok mobile application urgently.In essence. It is necessary to extract POST / GET / PUT requests from the TikTok mobile application. Even by essence, it is not necessary to fully reverse anything since signatures are available on the internet, etc. But it would also be great. All authorization (Sending… Web Programming, Desktop Apps ∙ 4 hours 28 minutes back ∙ 6 proposals |
Development of custom software (Android application + CMS) for SUNMI K2 self-service kiosks (Fast food)
23 USD
We are looking for an experienced team or a Middle/Senior Android developer (possibly with Full-stack skills) to create proprietary software for self-service kiosks for a fast food retail chain. Currently, our terminals operate on a ready-made cloud integrator, but we are… Content Management Systems, Desktop Apps ∙ 22 hours 45 minutes back ∙ 17 proposals |
It is necessary to migrate the current working program from FoxPro to C#.Hello everyone! We have a program in FoxPro (it has several modules, it's an accounting program), we have the source code of the program, and if necessary, we can consult with people who support the current program. What needs to be done: 1. Analyze how everything works,… C#, Desktop Apps ∙ 6 days 6 hours back ∙ 18 proposals |
About the Master Program "KONSTRUCTOR"
4193 USD
We are looking for a very experienced C++ developer to modernize existing software (master program). The program is responsible for creating derivative software representing audio-visual sessions of psychological correction. The current version is written in pure WinAPI (Visual… C & C++, Desktop Apps ∙ 8 days 19 hours back ∙ 19 proposals |
ODOO Enterprise setup for constructionНеобхідно побудувати картки та налаштувати зручний імпорт, інтеграцію з ЕДО і загалом Workflow ODOO Компанія займається системною інтеграцією: маємо поставки обладнання В2В або з прямою маржинальністю, або з рібейтами в подальшому. Крім того, ведемо будівельні роботи на об'єктах… Enterprise Resource Planning (ERP), Desktop Apps ∙ 9 days 4 hours back ∙ 7 proposals |