Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2011 13:10:14

Natasha_Q
От:
Зарегистрирован: 2011-07-07
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Python

Помогите пожалуйста!
Дано задание:На шахматной доске стоят черный король и три белые ладьи (ладья бьет по горизонтали и вертикали). Проверить, не находится ли король под боем, а если есть угроза, то от кого именно
У меня есть часть программы которая вводит короля и ладьи:

A=[[0 for i in range(8)] for i in range(8)]  "#рисует шахматную доску
def print_A(A):
for i in A:
print(i)
#вводит координаты короля
jk=int(input('координаты короля по вертикали: '))
print('= ',jk)
ik=int(input('координаты короля по горизонтали: '))
print('= ',ik)
A[jk][ik]='K'

#вводит координаты ладьи(их три)
i=0
while i<3:
y=int(input('координаты ладьи по вертикали: '))
print('= ',y)
x=int(input('координаты ладьи по горизонтали: '))
print('= ',x)
i=i+1
A[y][x]='L'
L=A[y][x]
вопрос в том, чтобы проверить, не находится ли король под боем, а если есть угроза, то от кого именно.
Подскажите как сделать или напишите
Завтра сдавать!



Отредактировано (Июль 7, 2011 13:32:43)

Офлайн

#2 Июль 7, 2011 15:34:36

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Python

Ладьи могут атаковать по вертикали и горизонтали, соответственно король может испытывать угрозу только если хоть одна ладья находится с ним в одном ряду по x или y.

И скажу наперед - угроза ему будет именно от белой ладьи :)



Отредактировано (Июль 7, 2011 15:35:43)

Офлайн

#3 Июль 8, 2011 00:53:37

Actor
От:
Зарегистрирован: 2010-10-10
Сообщения: 39
Репутация: +  0  -
Профиль  

Python

написать могу завтра днем. алгоритм - сверь соответствующие (по горизонтали и вертикали) координаты короля и каждой ладьи. + надо учесть, что между королем и ладьей2 может стоять ладья1, следственно, хоть соответствующие координаты короля и ладьи2 будут совпадать, ладья2 не бьет короля. + король может быть под ударом от сразу нескольких ладьей.



Отредактировано (Июль 8, 2011 00:54:14)

Офлайн

#4 Окт. 28, 2011 21:12:57

Элеонора
От:
Зарегистрирован: 2011-10-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Python

Добрый вечер!
У меня задача такая же.
Разработать программу для решения следующей задачи. На шахматной доске стоят три белые ладьи (ладья бьет по горизонтали и вертикали) и черный король. Проверить, не находится ли король под боем, а если есть угроза, то от какой именно ладьи. Предусмотреть варианты считывания данных о расположении фигур из файла и генерации случайных комбинаций их расположения. Отобразить результат расстановки фигур графически. Оценить О-сложность алгоритма.

Можете помочь?



Отредактировано (Окт. 28, 2011 21:13:56)

Офлайн

#5 Окт. 28, 2011 23:14:08

Actor
От:
Зарегистрирован: 2010-10-10
Сообщения: 39
Репутация: +  0  -
Профиль  

Python

import sys, pprint

def input_data():
data = [[0 for i in xrange(8)] for j in xrange(8)]
cl = [int(i) for i in sys.argv[1:]]
king, data[cl[0]][cl[1]] = (cl[0], cl[1]), 1
for i in xrange(2,7,2): data[cl[i]][cl[i+1]] = 2
pprint.pprint(data)
return (king, data)

def msg(i, j):
print "rook with coords: (%i, %i)" % (i, j)

def way_check(way, data):
for (i, j) in way:
if data[i][j] == 2:
msg(i, j)
return True
return False

def strike(king, data):
check = False
# left to the king
way = [(i, king[1]) for i in range(0,king[0])]
way.reverse()
check = way_check(way, data)
# right to the king
way = [(i, king[1]) for i in range(king[0] + 1, 8)]
check = way_check(way, data)
# up to the king
way = [(king[0], i) for i in range(0, king[1])]
way.reverse()
check = way_check(way, data)
# down to the king
way = [(king[0], i) for i in range(king[1] + 1, 8)]
check = way_check(way, data)
if check:
print 'king is safe'

def main():
(king, data) = input_data()
strike(king, data)

if __name__ == '__main__':
main()
Что и как работает - думаю понятно будет по выводу консоли. Все, что после фразы “Предусмотреть варианты…” мне было лень делать - сделаеш сама ;). Запускать с командной строки командой а-ля:
python filename.py 6 6 2 2 1 6 6 1
где первые 2 числа (6, 6) - координаты короля, остальные - координаты соответственно 1, 2 и 3 ладьи



Отредактировано (Окт. 28, 2011 23:20:16)

Офлайн

#6 Окт. 29, 2011 18:29:52

Элеонора
От:
Зарегистрирован: 2011-10-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Python

Спасибо))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version