Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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



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

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

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

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

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

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

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

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

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

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

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

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

Код:

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 в 01:22.
dariusplaza вне форума   Ответить с цитированием
Старый 31.07.2017, 12:54   #8
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,102
Репутация: 1172
По умолчанию

Цитата:
Сообщение от 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 в 13:18.
Sciv вне форума   Ответить с цитированием
Старый 31.07.2017, 13:57   #9
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 16,960
Репутация: 5965
По умолчанию

Код:

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 в 14:32.
Аватар вне форума   Ответить с цитированием
Старый 31.07.2017, 20:43   #10
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 631
Репутация: 484
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




06:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru