Регистрация
Войти
Стать экспертом Правила
Информатика

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

ОТВЕТЫ

С++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);
  • }
  1. жаль только, что я забыл указать, что мне надо в Паскале. Но спасибо за старания в любом случае) Ничего не понятно, но очень интересно
936
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам