С++20
#include <iostream>#include <vector>class Point {public: int x, y; Point() = default; Point(const Point &) = default; Point(int _x, int _y) : x(_x), y(_y) {} Point operator + (const Point& p) const { return Point {x + p.x, y + p.y}; } Point operator - (const Point& p) const { return Point {x - p.x, y - p.y}; } std::vector<Point> operator & (const Point& p) const { return std::vector<Point> { Point {x + p.x, y + p.y}, Point {x - p.x, y + p.y}, Point {x + p.x, y - p.y}, Point {x - p.x, y - p.y}, Point {x + p.y, y + p.x}, Point {x - p.y, y + p.x}, Point {x + p.y, y - p.x}, Point {x - p.y, y - p.x}, }; } static Point max (const Point& p1, const Point& p2) { return Point {std::max(p1.x, p2.x), std::max(p1.y, p2.y)}; } static Point min (const Point& p1, const Point& p2) { return Point {std::min(p1.x, p2.x), std::min(p1.y, p2.y)}; } [[nodiscard]] int distance_to_by_ch (const Point & p) const { return std::max(std::abs(p.x - x), std::abs(p.y - y)); } [[nodiscard]] int distance_to_by_m (const Point & p) const { return std::abs(p.x - x) + std::abs(p.y - y); } friend std::ostream &operator << (std::ostream &os, Point const &p) { return os << "(" << p.x << ";" << p.y << ")"; } Point & operator = (const Point &) = default; bool operator == (const Point & p) const { return x == p.x && y == p.y; }};class Horse {public: const Point p; explicit Horse (const Point position) : p(position) { } [[nodiscard]] bool can_I_kill_this_guy (const Point & m) const { auto field = p & Point{2, 3}; return std::find(field.begin(), field.end(), m) != field.end(); }};std::istream &to_number(std::istream &stream) { char ch; do { ch = stream.get(); } while (!isalpha(ch)); if (isupper(ch)) ch -= 16; else ch -= 48; stream.putback(ch); return stream;}int main () { Point horse_p{}, stranger_p{}; std::cin >> horse_p.x >> to_number >> horse_p.y; std::cin >> stranger_p.x >> to_number >> stranger_p.y; Horse jack(horse_p); std::cout << "I am a Horse placed on " << jack.p << ". " << "Can I kill those guy on " << stranger_p << "? " << "-> " << std::boolalpha << jack.can_I_kill_this_guy(stranger_p); }

Оперативная память (RAM, Random Access Memory, память произвольного доступа) - это энергозависимая среда, в которую загружаются и в которой находятся прикладные программы и данные в момент, пока вы с ними работаете. Когда вы заканчиваете работу, информация удаляется из оперативной памяти. Если необходимо обновление соответствующих дисковых данных, они перезаписываются. Это может происходить автоматически, но часто требует команды от пользователя. При выключении компьютера вся информация из оперативной памяти теряется.
В связи с этим трудно недооценить все значение оперативной памяти. Однако до недавнего времени эта область компьютерной индустрии практически не развивалась (по сравнению с другими направлениями). Взять хотя бы видео, аудиоподсистемы, производительность процессоров и. т. д. Усовершенствования были, но они не соответствовали темпам развития других компонентов и касались лишь таких параметров, как время выборки, был добавлен кэш непосредственно на модуль памяти, конвейерное исполнение запроса, изменен управляющий сигнал вывода данных, но технология производства оставалась прежней, исчерпавшей свой ресурс. Память становилась узким местом компьютера, а, как известно, быстродействие всей системы определяется быстродействием самого медленного ее элемента. И вот несколько лет назад волна технологического бума докатилась и до оперативной памяти. Быстрое усовершенствование оперативной памяти позволило кроме ее усовершенствования, значительно снизить цену на нее.
Но даже после падения цен, память системы, как правило, стоит вдвое дороже, чем системная плата. До обвального падения цен на память в середине 1996г. в течении многих лет цена одного мегабайта памяти держалась приблизительно на уровне 40 долларов. К концу 1996г. цена одного мегабайта памяти снизилась примерно до 4 долларов. Цены продолжали падать, и после главного обвального падения стоимость одного мегабайта не превышает доллара, или приблизительно 125 доларов за 128 Мбайт.