Требуется написать код программы, который будет использовать изменённую точку входа main
:
int main(const std::vector<std::string>& args)
{
cout << "argc = " << args.size() << endl;
for (auto& arg : args)
cout << "arg = " << arg << endl;
return 0;
}
Для тестирования можно использовать online-компилятор http://coliru.stacked-crooked.com.
Ключевые слова: libc, crt0, линковка, RTLD_NEXT, стек, ELF-формат.
Перейти на `решение <custom-main_>`_.
Задача состоит в написании функции MultipleForLoop
, которой передаются функтор действия и интервалы циклов.
Пример вложенных циклов:
for (int i = 7; i < 44; ++i)
for (int j = 0; j < 10; ++j)
for (int k = 4; k < 50; k += 4)
func(i, j, k);
То же самое через MultipleForLoop
:
template<class Functor, class... Ranges>
void MultipleForLoop(Functor f, const Ranges&... ranges);
MultipleForLoop(func, boost::irange(7, 44), boost::irange(0, 10), boost::irange(4, 50, 4));
Количество вложенных циклов не ограничено.
В процессе задачи следует ответить на вопрос: как подобная операция называется в математике?
Перейти на `решение <loop-linearization_>`_.
Необходимо показать, как именно происходит подсчёт. Полезно будет рассмотреть простой пример: 2 единицы и 2 нуля. В качестве бонуса на собеседовании будет задан долнительный вопрос.
Перейти на `решение <newtons-binom_>`_.
Необходимо составить архитектуру, которая будет описывать программу битового парсера любого контейнера. Программе на вход подаётся бинарный файл (медиа контейнер) и описание статического контейнера в каком-либо удобочитаемом формате (например, json). На выходе программа распечатывает те элементы контейнера, которые содержатся в описании.
Пример: распечатать ширину и высоту изображения в формате BMP
.
Пример описания:
{
"skip": 144,
"print": 32,
"print": 32
}
Пример вызова программы:
$ ./bit_parser -c bmp-description.json picture.bmp
Саму программу не надо писать, только её архитектуру. В архитектуру входят:
- формат описаний;
- ограничения на медиа контейнер (какие контейнеры могут быть распарсены, какие нет);
- какие библиотеки будут использоваться;
- какие классы/структуры/данные и их функции предлагается написать;
- связи компонент;
- глубина описания должна затрагивать методы объектов;
- можно использовать UML, но он должен быть выполнен в иерархическом виде: каждую компоненту программы можно посмотреть подробно или в составе всей программы целиком.
Ключевые слова: boost.params, boost.iterator, boost.spirit, boost.format, boost.iostreams.mapped_file
Перейти на `решение <bit-parser_>`_.