- Автор: Коннов Илья (@iliakonnov), БПИ201
- Вариант: 16
Прочитать простые геометрические фигуры с цветом, отсортировать их по периметру при помощи straight sort и вывести.
./build.sh -DCMAKE_BUILD_TYPE=Release && ./build/AVS2
См. AVS2 -h
Параметры компьютера:
- Процессор: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
- ОС: Arch Linux
- Kernel:
Linux 5.14.14-arch1-1 x86_64
-
Базовые типы:
size_t
,*T
- 8unsigned int
,int
- 4char
- 1- Небольшие перечисления компилируются как
int
в моём случае.
-
class Color
Value value
— 4 (0)
-
class Point
int x
– 4 (0)int y
— 4 (4)- Итого: 8
-
class Shape
Color color
— 4
-
class Circle : Shape
point
— 8 (0)int radius
– 4 (8)- Итого: 12
-
class Rectangle : Shape
Point left_upper
— 8 (0)Point right_bottom
– 8 (8)- Итого: 16
-
class Triangle : Shape
Point a
— 8 (0)Point b
– 8 (8)Point c
– 8 (16)- Итого: 24
-
class Buffer
- Всего: 0
-
class Stream : Buffer
std::istream& stream
— 8 (0)- Итого: 8
-
class Randomized : Buffer
- Итого: 0
По одному модулю (.cpp
+ .h
) на каждый тип, получаем 7 модулей. Плюс драйвер main.cpp
> AVS2 -f /tmp/tests/1000.in -o /tmp/tests/1000.out
Executed in 30.38 millis
> AVS2 -f /tmp/tests/5000.in -o /tmp/tests/5000.out
Executed in 523.23 millis
> ./build/AVS2 -f /tmp/tests/10000.in -o /tmp/tests/10000.out
Executed in 2.07 secs
В сравнении с структурным подходом, производительность незначительно выше, в основном на небольших тестах. Достигается засчёт использования тщательно оптимизированной стандартной библиотеки языка C++, в частности за счёт использования потоков для чтения и вывода файлов.