Шахматы в Информатике
Рассмотрим несколько логических задач по информатике на тему Шахматы
Задачи блока ‘Boolean’ из электронного задачника Programming Taskbook, автор доцент факультета математики, механики и компьютерных наук Южного федерального университета Михаил Эдуардович Абрамян. Решения приведены для автоматической проверки модуля “pt4” программы PascalABC.NET.
Задание: Boolean34º. На вход подаются координаты поля шахматной доски x, y (целые числа, лежащие в диапазоне 1–8).
Учитывая, что левое нижнее поле доски (1, 1) является черным, проверить истинность высказывания: «Данное поле является белым».
На выход записать "True" или "False", в зависимости от полученных координат.
Решение.
// Pascal
program z34;
uses pt4;
var x,y:integer;
begin
task('boolean34');
read(x,y);
if odd(x+y)
then
write(true)
else
write(false)
end.

# Python
x, y = map(int, input().split())
if (x+y)%2==1:
print('True')
else:
print('False')
Задание: Boolean35º. На вход подаются координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8).
Проверить истинность высказывания: «Данные поля имеют одинаковый цвет».
На выход записать "True" или "False", в зависимости от полученных координат.
Решение.
// Pascal
program z35;
uses pt4;
var x1,y1,x2,y2:integer;
begin
task('boolean35');
read(x1,y1,x2,y2);
if odd(x1+y1)=odd(x2+y2)
then
write(true)
else
write(false)
end.
# Python
x1, y1, x2, y2 = map(int, input().split())
if (x1+y1)%2 == (x2+y2)%2:
print('True')
else:
print('False')
Задание: Boolean36º. На вход подаются координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8).
Проверить истинность высказывания: «Ладья за один ход может перейти с одного поля на другое».
На выход записать "True" или "False", в зависимости от полученных координат.
Решение.
// Pascal
program z36;
uses pt4;
var x1,y1,x2,y2:integer;
begin
task('boolean36');
read(x1,y1,x2,y2);
if (x1 = x2) or (y1 = y2)
then
write(true)
else
write(false)
end.
# Python
a,b,c,d = input().split()
x1 = int(a)
y1 = int(b)
x2 = int(c)
y2 = int(d)
if (x1 == x2) or (y1 == y2):
print('True')
else:
print('False')
Задание: Boolean37º. На вход подаются координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8).
Проверить истинность высказывания: «Король за один ход может перейти с одного поля на другое».
На выход записать "True" или "False", в зависимости от полученных координат.
Решение.
// Pascal
program z37;
uses pt4;
var x1,y1,x2,y2:integer;
begin
task('boolean37');
read(x1,y1,x2,y2);
if (abs(x1-x2)<=1) and (abs(y1-y2)<=1)
then
write(true)
else
write(false)
end.
# Python
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if (abs(x1-x2)<=1) and (abs(y1-y2)<=1):
print('True')
else:
print('False')
Задание: Boolean38º. На вход подаются координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8).
Проверить истинность высказывания: «Слон за один ход может перейти с одного поля на другое».
На выход записать "True" или "False", в зависимости от полученных координат.
Решение.
// Pascal
program z38;
uses pt4;
var x1,y1,x2,y2:integer;
begin
task('boolean38');
read(x1,y1,x2,y2);
if abs(x1-x2) = abs(y1-y2)
then
write(true)
else
write(false)
end.
# Python
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if abs(x1-x2) == abs(y1-y2):
print('True')
else:
print('False')
Задание: Boolean39º. На вход подаются координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8).
Проверить истинность высказывания: «Ферзь за один ход может перейти с одного поля на другое».
На выход записать "True" или "False", в зависимости от полученных координат.
Решение.
// Pascal
program z1;
uses pt4;
var x1,y1,x2,y2:integer;
begin
task('boolean39');
read(x1,y1,x2,y2);
if (abs(x1-x2) = abs(y1-y2)) or (x1 = x2) or (y1 = y2)
then
write(true)
else
write(false)
end.
# Python
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if (abs(x1-x2) == abs(y1-y2)) or (x1 == x2) or (y1 == y2):
print('True')
else:
print('False')
Задание: Boolean40º. На вход подаются координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8).
Проверить истинность высказывания: «Конь за один ход может перейти с одного поля на другое».
На выход записать "True" или "False", в зависимости от полученных координат.
Решение.
// Pascal
program z1;
uses pt4;
var x1,y1,x2,y2:integer;
begin
task('boolean40');
read(x1,y1,x2,y2);
if (abs(x1-x2) + abs(y1-y2) = 3) and (abs(x1-x2) <> 3) and (abs(y1-y2) <> 3)
then
write(true)
else
write(false)
end.
# Python
a,b,c,d = input().split()
x1 = int(a)
y1 = int(b)
x2 = int(c)
y2 = int(d)
if (abs(x1-x2) + abs(y1-y2) == 3) and (abs(x1-x2) != 3) and (abs(y1-y2) != 3):
print('True')
else:
print('False')