Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2014, 01:19   #1
sophi
Новичок
Джуниор
 
Регистрация: 25.11.2014
Сообщений: 4
По умолчанию игра "Шашки" - проверить может ли шашка дойти до заданного поля

Задача «Шашки»
Как известно, для игры в шашки можно использовать шахматную доску, в которой
горизонтальные строки обозначаются цифрами от 1 до 8, считая снизу вверх, а вертикальные
столбцы – буквами латинского алфавита:a, b, c, d, e, f, g, h.
Для начинающих играть в шашки часто задают такую задачу: размещают белую шашку
на доске и просят определить, сможет ли эта шашка попасть в заданную клетку, делая ходы
по правилам и не превращая ее в дамку. По правилам белая шашка ходит по чёрным полям
по диагонали вверх.
Требуется написать программу, определяющую возможность перемещения белой
шашки из одной заданной клетки в другую заданную клетку.

Описание входных данных
В единственной строке входного файла input.txt записаны в шахматной нотации:
клетка, где стоит шашка, затем через пробел клетка, куда шашка должна попасть. Начальная
и конечная клетки не совпадают.
Описание выходных данных
В единственную строку выходного файла output.txt нужно вывести слово YES
(заглавными буквами), если шашка может попасть из начальной клетки в конечную, и слово
NO – в противном случае.

если можно, с комментариями и пояснениями))
sophi вне форума Ответить с цитированием
Старый 26.11.2014, 01:30   #2
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Задача объёмна по решению. Ни кто не будет её Вам решать просто так.
WinCoder вне форума Ответить с цитированием
Старый 26.11.2014, 08:47   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Задача объёмна по решению
да ну бросьте!
на доске ОДНА шашка. И нужно узнать, может она дойти до определённого поля или нет. Что здесь такого "объёмного" ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.11.2014, 08:52   #4
sophi
Новичок
Джуниор
 
Регистрация: 25.11.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да ну бросьте!
на доске ОДНА шашка. И нужно узнать, может она дойти до определённого поля или нет. Что здесь такого "объёмного" ?!
вы можете подсказать, как её решить? программу на языке написать не очень сложно, главное ход мыслей
sophi вне форума Ответить с цитированием
Старый 26.11.2014, 09:12   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Попадет только тогда, когда целевая клетка выше и смещение её по горизонтали от исходной не больше смещения по вертикали. По моему так
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.11.2014, 10:02   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Аватар, в точку!!!!

я бы ещё проверил (на всякий случай), что целевая точка имеет тот же цвет, что и исходная! (это легко проверяется чётностью/нечётностью суммы индексов по горизонтали и вертикали)

Последний раз редактировалось Serge_Bliznykov; 26.11.2014 в 10:04.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.07.2017, 14:43   #7
dariusplaza
Новичок
Джуниор
 
Регистрация: 30.07.2017
Сообщений: 1
По умолчанию

Я пытался решить так, но не вышло:

Код:
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())

if (x1 != x2) and (y1 != y2):
    if x2 > x1 and x1 and y1 and x2 and y2 <= 8 and y2 == \
            (y1 + (x2 - x1)) or y2 == (y1 - (x2 - x1)):
        print('YES')
    else:
        print('NO')
else:
    print('NO')
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 31.07.2017 в 00:22.
dariusplaza вне форума Ответить с цитированием
Старый 31.07.2017, 11:54   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от sophi Посмотреть сообщение
Для начинающих играть в шашки часто задают такую задачу: размещают белую шашку
на доске и просят определить, сможет ли эта шашка попасть в заданную клетку, делая ходы
по правилам и не превращая ее в дамку. По правилам белая шашка ходит по чёрным полям
по диагонали вверх.
Парочка правил для того, чтобы в принципе можно было начинать поиск пути

1. Конечная клетка - не белая и вообще находится на доске.

2. Проверка корректности по строке

Если учитывать все правила, то шашка попадёт в любую клетку, у которой строка больше её исходной строки.

То есть если выполняется условие:

Код:
  if EndCellRowIndex > BeginCellRowIndex then
Ну и собственно, сам поиск (поскольку задача стоит не определить количество ходов, а понять, может ли шашка в принципе попасть в нужную клетку):

Поскольку шашки ходят по диагонали - они не могут попасть в клетки, находящиеся на параллельных диагоналях ниже текущей. Условно говоря, если в любой момент времени финальная клетка попадает в диапазон:

Код:
  for i := BeginRowIndex + 1 to MaxRows do
    for j := 1 to MaxColumns do
      if (i <= j) then
то шашка в неё попасть может:
Код:
  if (i = EndCellRowIndex) and
     (j = EndCellColumnIndex)
  then
UPDATE. Пример выше рассматривался для случая, когда шашка находится в левом нижнем углу. Для нижнего правого верно условие:

Код:
  for i := BeginRowIndex + 1 to MaxRows do
    for j := 1 to MaxColumns do
      if (MaxRows - i >= j) then
Соответственно, общий случай для любой исходной ячейки шашки - объединение указанных проверок (предполагается, что MaxRows = MaxColumns = 8 - размеры шахматной доски)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 31.07.2017 в 12:18.
Sciv вне форума Ответить с цитированием
Старый 31.07.2017, 12:57   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
if not Odd(x1+y1) and not Odd(Abs(x1-x2)+Abs(y1-y2)) and (x2>x1) and ABS(y1- y2)<=(x2-x1)
  then print('YES')
  else print('NO');
И если совсем правильно то проверить и (x1>0) and (x1<9), аналогично и для y2,x1,y2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 31.07.2017 в 13:32.
Аватар вне форума Ответить с цитированием
Старый 31.07.2017, 19:43   #10
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
шашка попадёт в любую клетку, у которой строка больше её исходной строки.
Нет. Шашки назад не ходят. С a1 на d2 не попадёт
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
игра шашки на языке с Эндрю Помощь студентам 1 05.12.2011 23:28
Задачка легкая, но дойти не может) MsJane Фриланс 3 19.12.2009 14:46
(паскль)найти сумму всех n-значных чисел кратных k(Задачка легкая, но дойти не может, помогите плиз) MsJane Помощь студентам 4 19.12.2009 01:28
Игра ШАШКИ!!! Leepree Общие вопросы C/C++ 4 16.09.2009 21:20
дойти не может что к чему if-soft Паскаль, Turbo Pascal, PascalABC.NET 7 07.10.2008 10:45