Python

Задача «Ход слона» для Python

Шахматный слон ходит по диагонали. Даны две различные клетки шахматной доски, определите, может ли слон попасть с первой клетки на вторую одним ходом.
Пока есть это:
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if a == c or b == d:
print('NO')
elif abs((a+b-c+d)%2) == 0:
print('YES')
else:
print('NO')
Но ругается на такие вводные:
7
4
2
5
Не могу понять как выделить клетки не на одной диагонали и исключить их.
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if abs(x1 - x2) == abs(y1 - y2):
print('YES')
else:
print('NO')

или так
a,c,b,d = (int(input()) for i in range(4))
print('YES' if abs(a - b) == abs(c - d) else 'NO')
ИС
Игорь Санников
2 523
Лучший ответ
Андрей Зятьков Не удовлетворяет вводным данным указанным выше (7,4,2,5).
Андрей Зятьков Да, все верно, прошу прощения!
Найт Ингейл x1 = int(input())
x2 = int(input())
y1 = int(input())
y2 = int(input())
if abs(x1 - x2) == abs(y1 - y2):
print('YES')
else:
print('NO')
Nurken Madyshev не подойдет если 6,3,5,4
X1 = int(input()) # координата 1 по столбцу
Y1 = int(input()) # координата 1 по строке
X2 = int(input()) # координата 2 по столбцу
Y2 = int(input()) # координата 2 по строке

# модуль в уроках не проходили, поэтому решаем задачу без модуля представив его в виде (-1)
if (X2 != X1 and Y2 != Y1) and ((X2 - X1) == (Y2 - Y1) or (X2 - X1)*(-1) == (Y2 - Y1) or (X2 - X1) == (Y2 - Y1)*(-1)):
print("YES")
else:
print ("NO")
Найт Ингейл неверно(
x = int(input())
y = int(input())
x1 = int(input())
y1 = int(input())

if (x - x1) == (y - y1) or (x - x1) + (y - y1) == 0:
print("YES")
else: print("NO")
a1 = int(input())
b1 = int(input())
a2 = int(input())
b2 = int(input())
if a1 == a2 and b1 == b2:
print('odna i ta zhe tochka')
elif (a1 + b1) == (a2 + b2) or (a2 - a1) == (b2 - b1) or -1 * (a2 - a1) == -1 * (b2 - b1):
print('yes')
else:
print('no')
a=int(input())
b=int(input())
c=int(input())
d=int(input())
if c-a==d-b or c-a==-(d-b):
print("YES")
else:
print("NO")
Islam Hanov
Islam Hanov
300
f
DI
Daniyar Izbassar
252
что означает
abs(x1 - x2)?
Kamol Khalimov
Kamol Khalimov
240
Андрей Колесников abs значит модуль. т. е запись abs(x1-x2) означает "модуль разницы x1 и x2"
Эта задача имеет простое и элегантное решение и без применения функции abs:
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if x1 - y1 == x2 - y2 or x1 + y1 == x2 + y2:
print("YES")
else:
print("NO")
Valijon Sobirov
Valijon Sobirov
199
x1=int(input())
y1=int(input())
x2=int(input())
y2=int(input())
if x2!=x1 and y2!=y1 and (x2-y2==x1-y1 or x2+y2==x1+y1):
print('YES')
else:
print('NO')

Задача с питонтутор, но одного понять не могу, почему все решают через "модуль"??? даже ответ разработчиков с "модулем" и не только в этой задаче, но и предыдущих. Ничего, что модуль какбэ еще не изучался на питонтуторе? и правильно ли его использовать в решениях?
a = int(input())
b = int(input())
x = int(input())
y = int(input())
if x == a + 1 and y == b + 1 or x == a - 1 and y == b - 1 or x == a + 1 and y == b - 1 or x == a - 1 and y == b + 1:
print("YES")
elif x == a + 2 and y == b + 2 or x == a - 2 and y == b - 2 or x == a + 2 and y == b - 2 or x == a - 2 and y == b + 2:
print("YES")
elif x == a + 3 and y == b + 3 or x == a - 3 and y == b - 3 or x == a + 3 and y == b - 3 or x == a - 3 and y == b + 3:
print("YES")
elif x == a + 4 and y == b + 4 or x == a - 4 and y == b - 4 or x == a + 4 and y == b - 4 or x == a - 4 and y == b + 4:
print("YES")
elif x == a + 5 and y == b + 5 or x == a - 5 and y == b - 5 or x == a + 5 and y == b - 5 or x == a - 5 and y == b + 5:
print("YES")
elif x == a + 6 and y == b + 6 or x == a - 6 and y == b - 6 or x == a + 6 and y == b - 6 or x == a - 6 and y == b + 6:
print("YES")
elif x == a + 7 and y == b + 7 or x == a - 7 and y == b - 7 or x == a + 7 and y == b - 7 or x == a - 7 and y == b + 7:
print("YES")
elif x == a + 8 and y == b + 8 or x == a - 8 and y == b - 8 or x == a + 8 and y == b - 8 or x == a - 8 and y == b + 8:
print("YES")
else:
print("NO")

да, это не красиво, но работает. Знаю что это не правильно.... но блин, работает... Обьясните пожалуйста логику с вычетанием заданных изначально координат клеток, а то чёт я туплю.
Razil Mekhtiev
Razil Mekhtiev
152
Razil Mekhtiev короче сам ответ нашел )))

Если слон стоит на позиции (x, y), а проверяемая клетка (x1, y1), то:
if x + y == x1 + y1 or x - y == x1 - y1:
# они находятся на одной диагонали
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if (1 <= x1 - x2 <= 7 or 1 <= x2 - x1 <= 7) and (1 <= y1 - y2 <= 7 or 1 <= y2 - y1 <= 7):
print("YES")
else:
print("NO")
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if x1 == x2 or y1 == y2:
print("NO")
elif (x1 - x2) ** 2 == (y1 - y2) ** 2 or (x1 + y1) == (x2 + y2):
print("YES")
else:
print("NO")
Денис Маслов Еще вариант работающий:

x1, y1, x2, y2 = int(input()), int(input()), int(input()), int(input())
if (x1 - y1 == x2 - y2) or (x1 + y1 == x2 + y2):
print('YES')
else:
print('NO')
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if x1 - x2 == y1 - y2 or x1 + y1 == x2 + y2 :
print('YES')
else:
print('NO')
Простая без всяких abs
Сработала на 33 тестах
Михаил Аксаков x1 - x2 == y1 - y2 это для того чтобы слон мог ходить по диагонали на любое растоянние назад, а x1 + y1 == x2 + y2, чтобы идти вперёд
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if abs(x1 - x2) == abs(y1 - y2):
print('YES')
else:
print('NO')
o1=int(input())
r1=int(input())
o2=int(input())
r2=int(input())
if o1==o2+r1-r2 and r1==r2+o1-o2 or o1==o2-r1+r2 and r1==r2-o1+o2:
print('YES')
else:
print('NO')o1=int(input())
r1=int(input())
o2=int(input())
r2=int(input())
if o1==o2+r1-r2 and r1==r2+o1-o2 or o1==o2-r1+r2 and r1==r2-o1+o2:
print('YES')
else:
print('NO')
y1 = int(input())
y2 = int(input())
x1 = int(input())
x2 = int(input())

if (y1 - y2) % 2 == (x1 - x2) % 2 and y1 != x1 and y2 != x2 and abs(y1 - x1) == abs(y2 - x2):
print('YES')
else:
print('NO')
st1 = int(input())
str1 = int(input())
st2 = int(input())
str2 = int(input())
a = st1 - st2 == str1 - str2
b = st2 - st1 == str2 - str1
c = st2 - st1 == str1 - str2
d = st1 - st2 == str2 - str1
if a or b or c or d:
print("YES")
else:
print("NO")

этот код подходит если вариант с "abs" не работает