
Geupar
4 год назад
Поле шахматной доски определяется парой – буква и цифра. Буква (a … h)означает горизонталь при счете снизу вверх, число (1 … 8) – номер вертикали при счете слеванаправо. Даны два натуральных числа K,M, не превышающие восьми, и два символа x,y.Требуется выяснить, если на поле (K, x) стоит конь, угрожает ли он полю (M,y)?

ОТВЕТЫ

Vseslav
Oct 24, 2020
С++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);
- }
- жаль только, что я забыл указать, что мне надо в Паскале. Но спасибо за старания в любом случае) Ничего не понятно, но очень интересно
936
Смежные вопросы: