Поиск по этому блогу

понедельник, 13 января 2020 г.

На шахматной доске

На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь. Требуется определить количество пустых полей доски, которые находятся под боем. Для простоты будем полагать, что фигуры могут «бить» через другие фигуры. Например, в рассмотренной справа ситуации будем считать, что ферзь бьет D5 через ладью.

Входные данные

В единственной строке входного файла INPUT.TXT записаны через пробел координаты расположения трех фигур: ферзя, ладьи и коня соответственно. Каждая координата состоит из одного английского символа (от A до H) и одной цифры (от 1 до 8).

Выходные данные

В выходной файл OUTPUT.TXT нужно вывести количество пустых полей, которые бьют указанные во входных данных фигуры.
Пример
INPUT.TXT
OUTPUT.TXT
1
D1 D3 E5
29

Решение
f = open("input.txt","r")
p=[[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]]
n=0
a1,a2,a3=f.readline().split()
def nomer (st):
   s="ABCDEFGH"
   global n
   n=s.find(st[0])
#ferz
nomer(a1)
m=int(a1[1])-1
for i in range(0,8):
   p[n][i]=1
for i in range(0,8):
   p[i][m]=1
x=n
y=m
while (x>=0)and(y>=0):
    p[x][y]=1
    x-=1
    y-=1
x=n
y=m
while (x>=0)and(y<=7):
   p[x][y]=1
   x-=1
   y+=1
x=n
y=m
while (x<=7)and(y<=7):
   p[x][y]=1
   x+=1
   y+=1
x=n
y=m
while (x<=7)and(y>=0):
   p[x][y]=1
   x+=1
   y-=1
#ladia
nomer(a2)
m=int(a2[1])-1
for i in range(0,8):
   p[n][i]=1
for i in range(0,8):
   p[i][m]=1
#kon
nomer(a3)
m=int(a3[1])-1
x=n-2
y=m+1
if (x>=0)and(x<=7)and(y>=0)and(y<=7):
   p[x][y]=1
x=n-2
y=m-1
if (x>=0)and(x<=7)and(y>=0)and(y<=7):
   p[x][y]=1
x=n-1
y=m+2
if (x>=0)and(x<=7)and(y>=0)and(y<=7):
   p[x][y]=1
x=n-1
y=m-2
if (x>=0)and(x<=7)and(y>=0)and(y<=7):
    p[x][y]=1
x=n+1
y=m+2
if (x>=0)and(x<=7)and(y>=0)and(y<=7):
    p[x][y]=1
x=n+1
y=m-2
if (x>=0)and(x<=7)and(y>=0)and(y<=7):
    p[x][y]=1
x=n+2
y=m+1
if (x>=0)and(x<=7)and(y>=0)and(y<=7):
    p[x][y]=1
x=n+2
y=m-1
if (x>=0)and(x<=7)and(y>=0)and(y<=7):
    p[x][y]=1
#udal
nomer(a1)
m=int(a1[1])-1
p[n][m]=0
nomer(a2)
m=int(a2[1])-1
p[n][m]=0
nomer(a3)
m=int(a3[1])-1
p[n][m]=0
k=0
for i in range(0,8):
    for j in range(0,8):
        k+=p[i][j]
f.close()
f1 = open("output.txt","w")
s=str(k)
f1.write(s)
f1.close()



Комментариев нет:

Отправить комментарий