Вопрос задан 17.05.2023 в 20:06. Предмет Информатика. Спрашивает Чукмарев Саша.

ПОМОГИТЕ С ИНФОЙ Пжпжпж срочно надооо Задача 4: Обучение шахматам Маленькая Ева только учится

играть в шахматы. Сегодня она узнала, как слон ходит по шахматной доске. Теперь она хочет понять, куда слон может добраться не более чем за 100 ходов. Помогите Еве понять, может ли слон добраться от одной клетки до другой клетки шахматной доски. Шахматный слон за один ход перемещается по диагонали на любое количество клеток. Шахматная доска имеет размеры 8 × 8. Входные данные Программа получает на вход 4 числа, записанных в отдельных строках. Первые два числа — номер строки и номер столбца исходной клетки, следующие два числа — номер строки и номер столбца конечной клетки (каждое число принимает значения от 1 до 8). Гарантируется, что исходная и конечная клетки не совпадают. Выходные данные В первой строке выведите Yes или No — ответ на вопрос задачи. Если в первой строке вы вывели Yes, то во второй строке выведите число n — количество ходов слона (число не превосходящее 100). В следующих n строках выведите последовательно клетки (номер строки и номер столбца клетки через пробел), в которые нужно перемещать слона. Последняя выведенная клетка должна совпадать с заданной конечной клеткой. Вам не нужно минимизировать число ходов слона, но оно не должно превосходить 100. Система оценки В этой задаче 20 тестов, помимо тестов из условия. Каждый тест оценивается в 5 баллов независимо от остальных. Примеры Ввод Вывод 1 1 1 7 Yes 2 4 4 1 7 3 2 3 8 Yes 3 5 4 2 7 3 8 1 1 1 2 No
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Александрова Аня.

Ответ:

def def_color(x, y):

 # 1 black, 2 white

 return 1 if (x + y) % 2 == 0 else 0

 

 

def get_direction(cur_coords, target_coords):

 x_dir = 0

 y_dir = 0

 x_s, y_s = cur_coords

 x_f, y_f = target_coords

 

 # right = 1, left = 0

 if x_f - x_s >= 0:

   x_dir = 1

 else:

   x_dir = 0

 

 # up = 1, down = 0

 if y_f - y_s >= 0:

   y_dir = 1

 else:

   y_dir = 0

 

 return (x_dir, y_dir)

 

 

def make_step(coords, direction):

 x, y = coords

 if sum(direction) == 2:

   return (x+1, y+1) # right up

 elif sum(direction) == 0:

   return (x-1, y-1) # left down

 else:

   if direction[0] == 0: # left

     if direction[1] == 1: # up

       return (x-1, y+1)

   else: # right down

     return (x+1, y-1)

 

 

def main():

 start_x = int(input())

 start_y = int(input())

 

 target_x = int(input())

 target_y = int(input())

 

 finish_coords = (target_x, target_y)

 

 step_hist = [[start_x, start_y]]

 

 if def_color(start_x, start_y) != def_color(target_x, target_y):

   print("No")

   return

 

 while True:

   direction = get_direction(step_hist[-1], finish_coords)

   step_hist.append(make_step(step_hist[-1], direction))

   if step_hist[-1] == finish_coords:

     break

 

 print("Yes")

 step_hist.pop(0)

 print(len(step_hist))

 for x, y in step_hist:

   print(x, y)

 return

 

main()

Объяснение:

Вроде всё верно.

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Данная задача связана с определением возможности перемещения шахматного слона по шахматной доске и определением пути перемещения, если он существует. Вам необходимо проверить, может ли слон добраться от исходной клетки до конечной клетки за не более чем 100 ходов, и если может, то предоставить последовательность клеток для перемещения.

Для решения данной задачи вы можете использовать следующий алгоритм:

  1. Считайте входные данные: номер строки и номер столбца исходной клетки, а затем номер строки и номер столбца конечной клетки.

  2. Проверьте, находятся ли исходная и конечная клетки на одной диагонали. Для этого вы можете использовать следующее условие: разница между номерами строк и столбцов исходной и конечной клеток должна быть одинаковой. Если это условие не выполняется, выведите "No" в первой строке выходных данных и завершите программу.

  3. Если исходная и конечная клетки находятся на одной диагонали, определите количество ходов, которое требуется слону для перемещения. Количество ходов будет равно разнице между номерами строк (или столбцов) исходной и конечной клеток.

  4. Проверьте, не превышает ли количество ходов 100. Если количество ходов превышает 100, выведите "No" в первой строке выходных данных и завершите программу.

  5. Если количество ходов не превышает 100, выведите "Yes" в первой строке выходных данных, затем выведите количество ходов во второй строке, а затем выведите последовательность клеток, через которые должен переместиться слон, чтобы достичь конечной клетки.

Пример решения на Python:

python
# Считываем входные данные start_row = int(input()) start_col = int(input()) end_row = int(input()) end_col = int(input()) # Проверяем, находятся ли исходная и конечная клетки на одной диагонали if abs(start_row - end_row) != abs(start_col - end_col): print("No") else: # Вычисляем количество ходов moves = abs(start_row - end_row) # Проверяем, не превышает ли количество ходов 100 if moves > 100: print("No") else: print("Yes") print(moves) # Выводим последовательность клеток for i in range(moves): # Определяем направление перемещения слона row_direction = 1 if start_row < end_row else -1 col_direction = 1 if
0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос