Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Решить задачу на Python/На доске стоит белая шашка. Требуется определить, может ли она попасть в заданную клетку

Айгуль Абсалямова Ученик (91), закрыт 5 лет назад
На доске стоит белая шашка. Требуется определить, может ли она попасть в заданную клетку, делая ходы по правилам и не пользуясь ходами дамки (т. е. не используя возможность перемещаться назад после превращения в дамку). Белые шашки могут ходить по черным клеткам по диагонали вверх-влево или вверх-вправо. Ходов может быть несколько!
Доска имеет размер 8x8, вертикали и горизонтали нумеруются числами от 1 до 8 начиная с левого нижнего угла. Исходная и конечная клетки не совпадают.

Формат ввода

Вводится клетка, где стоит шашка, а затем клетка, куда шашка должна попасть.

Каждая клетка описывается номером вертикали, а затем номером горизонтали. Под номером вертикали имеется в виду не номер по вертикали, а номер вертикальной линии считая слева направо. Аналогичная формулировка используется для номера горизонтали: нумерация идет снизу вверх. Например, клетка A2 кодируется как 1 2.

Формат вывода

Выведите слово YES (заглавными буквами), если шашка может попасть из начальной клетки в указанную, и NO в противном случае.
Лучший ответ
Aleks Nots Просветленный (22669) 5 лет назад
Если это не задачка на рекурсию, а просто получить заданный результат, то по-моему так:
https://pastebin.com/iMCWrCKs

"""
--- проверка правильности ввода
- лежат ли обе клетки в пределах шахматной доски 1...8
- является ли клетка черной
- отличается ли финиш от старта

--- проверка возможности прохождения
- лежит ли клетка финиша хоть на один ряд выше клетки старта
- меньше ли сдвиг по горизонтали чем по вертикали
"""

while 1:
while 1:
sh, sv = map(int, input('Start: hor ver ').split())
if ( 1 <= sv <= 8 and 1<= sh <= 8 and
not (sv+sh)%2):
break
else:
print('Неправильная клетка')

while 1:
fh, fv = map(int, input('Finish: hor ver ').split())
if (1 <= fv <= 8 and 1<= fh <= 8 and
not (fv+fh)%2 and
(fv != sv or fh != sh)):
break
else:
print('Неправильная клетка')

if (fv-sv)>0 and (abs(fh-sh) <= abs(fv-sv)):
print('YES')

else:
print('NO')
Aleks NotsПросветленный (22669) 5 лет назад
abs(fv-sv) лишнее, достаточно fv-sv, так как проверка, что fv>sv уже есть в начале
Остальные ответы
Metotron Искусственный Интеллект (114872) 5 лет назад
Можно попытаться посчитать математически, а можно в лоб просчитать все доступные ходы, их не так уж много будет.
Похожие вопросы