Ю 2.27. Шашечный эндшпиль

Задача из сборника задач по программированию Юркина А.Г. 2002 г.
Условие задачи:
В шашечном эндшпиле остались белая дамка и две черных пешки, позиции которых известны. Ход белых. Сможет ли дамка срубить одну или сразу обе пешки?

Входные данные:
lady-позиция дамки;
pawn1-позиция первой пешки;
pawn2-позиция второй пешки;

Тесты:

lady pawn1 pawn2 Выходные данные
a1 b2 f6 Дамка срубит две пешки
c3 a1 b2 Дамка срубит ничего
d4 b6 f2 Дамка срубит одну пешку

Код на языке С++:

Код на языке Java (первый вариант):

Код на языке Java (второй вариант):

Решение задачи:
Для описания позиций шашек использовалась структура position с указанием на буквенную строку и числовой столбец шашечной доски. Напомним, что бить можно если дамка и шашка стоят на одной диагонали. Для определения диагонали используется разница между координатами точек (шашек) на заданном шашечном поле. В дальнейшей работе вместо элементов буквенной строки мы используем числовой Unicode код символа, для возможности работать напрямую и со строками, и со столбцами, используя очевидные математически закономерности расположения фигур на поле.
Задача на С++ и ее эквиваленте на Java (в первом варианте) разбивается на 4 главных подзадачи, основанные на таких 4 условиях:
-пешки не находятся на границе шашечного поля;
-первая пешка находится на границе шашечного поля;
-вторая пешка находится на границе шашечного поля;
-обе пешки находятся на границе шашечного поля;
В свою очередь данные подзадачи разбиваются еще на несколько условий, что подробно изложены в комментариях кода. Во втором же варианте задачи кода на Java мы разбиваем задачу на три условия, что в результате нам дает информацию о том побила дамка одну шашку, две или ни одной. Все логические условия рассмотренные в задачах выше сохраняются. На выходе программа предоставляет информацию о том, какое количество пешек срубила дамка относительно заданных позиций.

Условие задачи (стр.31)
Код задачи на C++
Код задачи на Java (первый вариант)
Код задачи на Java (второй вариант)

2 thoughts on “Ю 2.27. Шашечный эндшпиль

  1. Молодец, работает! Конечно зачтено!
    Но замечания будут.
    — Описание, увы, никакое. Можно было бы что-то по сути написать.
    Например, указать, что бить можно если дамка и шашка стоят на одной диагонали. А как определяются диагонали? Для одних сумма координат постоянна, а для других — разность. При этом то, что одна из координат буква, никакой роли не играет (буквы кодируются числами и их можно использовать наряду с целыми числами).
    Т.е. если мы введем новые координаты в виде суммы и разности старых, то получим прямоугольную систему координат, но развёрнутую на 45 градусов.
    Теперь ясно, что бить можно, если одна координата совпадает. ..
    — По коду. У Вас три варианта ответа. Значит должно быть два условных оператора. А не 8. Всё сложную логику гораздо лучше «запихнуть» в условия. Тогда точно не будет множества одинаковых операторов. Сейчас Вы в четырех местах выводите про «одну пешку».
    Лучше бы всё это поправить…

    • Добрый вечер, Игорь Евгеньевич. Прислушавшись к Вашим замечаниям, я опубликовала две задачи на Java. Одна абсолютна идентична засчитанной задаче на С++, а второй ее вариант уже с изменениями.

Добавить комментарий