На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь. Требуется определить количество пустых полей доски, которые находятся под боем. Для простоты будем полагать, что фигуры могут «бить» через другие фигуры. Например, в рассмотренной справа ситуации будем считать, что ферзь бьет D5 через ладью.
Входные данные
В единственной строке входного файла INPUT.TXT записаны через пробел координаты расположения трех фигур: ферзя, ладьи и коня соответственно. Каждая координата состоит из одного английского символа (от A до H) и одной цифры (от 1 до 8).
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()
Входные данные
В единственной строке входного файла INPUT.TXT записаны через пробел координаты расположения трех фигур: ферзя, ладьи и коня соответственно. Каждая координата состоит из одного английского символа (от A до H) и одной цифры (от 1 до 8).
Выходные данные
В выходной файл OUTPUT.TXT нужно вывести количество пустых полей, которые бьют указанные во входных данных фигуры.
Пример
В выходной файл 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()
Комментариев нет:
Отправить комментарий