В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
Вано137
Вано137
22.02.2021 07:09 •  Информатика

доработать код на питон Рокировка — особая разновидность шахматного хода, при котором ладья, находившаяся на начальной позиции, вплотную подходит к своему королю, который «перепрыгивает» через ладью вдоль линии её движения. При этом король перемещается не на одно поле, как обычно, а на два.
Необходимым условием рокировки является то, что ни король, ни участвующая в манёвре ладья не должны были сдвигаться со своего места до совершения рокировки. Если ладья сдвигалась с начальной позиции, рокировка с её участием становится невозможной. Если сдвигался король, обе рокировки становятся невозможными.
Реализуйте два метода, board.castling0() и board.castling7(). Метод castling0 пробует выполнить рокировку для игрока текущего цвета с ладьёй из колонки 0, castling7 — из колонки 7.
Если рокировка возможна, следует выполнить её и вернуть True, если нет — только вернуть False.
В тестах для уменьшения их объёма и сложности начальная расстановка фигур перезаписывается и заменяется на более простую. Однако гарантируется, что начальные положения короля и ладей, если они есть на доске, соответствуют шахматным правилам.

Пример 1
Ввод Вывод
from solution import (
Board, Pawn, Rook, King, Knight, Bishop, Queen,
WHITE, BLACK
)

board = Board()
board.field = [([None] * 8) for i in range(8)]
board.field[0][0] = Rook(WHITE)
board.field[0][4] = King(WHITE)
board.field[0][7] = Rook(WHITE)

board.field[7][0] = Rook(BLACK)
board.field[7][4] = King(BLACK)
board.field[7][7] = Rook(BLACK)

print('before:')
for row in range(7, -1, -1):
for col in range(8):
char = board.cell(row, col)[1]
print(char.replace(' ', '-'), end='')
print()
print()

print("Рокировка")
print(board.castling0())
print(board.castling7())

for row in range(7, -1, -1):
for col in range(8):

Код программы:
from solution import (
Board, Pawn, Rook, King, Knight, Bishop, Queen,
WHITE, BLACK
)

board = Board()
board.field = [([None] * 8) for i in range(8)]
board.field[0][0] = Rook(WHITE)
board.field[0][4] = King(WHITE)
board.field[0][7] = Rook(WHITE)

board.field[7][0] = Rook(BLACK)
board.field[7][4] = King(BLACK)
board.field[7][7] = Rook(BLACK)

print('before:')
for row in range(7, -1, -1):
for col in range(8):
char = board.cell(row, col)[1]
print(char.replace(' ', '-'), end='')
print()
print()

print("Сдвиги ладей")
board.move_piece(0, 0, 0, 1)
board.move_piece(7, 0, 7, 1)
print(board.castling0())
print(board.castling7())

for row in range(7, -1, -1):
for col in range(8):
char = board.cell(row, col)[1]
print(char.replace(' ', '-'), end='')
print()
print()

print(board.castling0())
print(board.castling7())

for row in range(7, -1, -1):
for col in range(8):
char = board.cell(row, col)[1]
print(char.replace(' ', '-'), end='')
print()

Показать ответ
Ответ:
astimorget
astimorget
28.02.2022 12:55

Пусть сумма всех элементов равна full_sum, а длина массива 2k.

Предлагаю организовать банальный перебор: выберем k индексов из 2k, посчитаем сумму соответствующих элементов. Будем искать максимальную сумму, которая не превосходит full_sum/2. При этом сумма невыбранных элементов будет не меньше full_sum/2, и будет отличаться от суммы выбранных элементов на минимально возможную величину.

Этот алгоритм работает быстро только для относительно небольших значений k. если нужно что-то быстрее, то придется придумывать что-то дополнительно.

Код (Python 3):

from random import randint

from itertools import combinations

k = 10

a = [randint(1, 100) for _ in range(2 * k)]

print(*a)

full_sum = sum(a)

half_sum = full_sum // 2

max_sum = -1

answer = None

for seq in combinations(range(2 * k), k):

   s = sum(map(lambda ind: a[ind], seq))

   if s <= half_sum and s > max_sum:

       max_sum, answer = s, seq

   if s == half_sum:  

       break

left = [a[i] for i in answer]

right = [el for i, el in enumerate(a) if i not in answer]

a = left + right

print(*a)

Пример вывода:

50 39 19 63 16 4 82 45 63 33 6 57 39 16 38 4 66 56 87 84

50 39 19 63 16 4 82 57 16 87 45 63 33 6 39 38 4 66 56 84

0,0(0 оценок)
Ответ:
Pwp790
Pwp790
05.06.2022 23:55

Линия (Line) – при перемещении курсора в любом направлении Контрольная панель информирует о ее текущей длине в виде.

Дуга (Аrc) – при перемещении курсора от начальной точки VCB вначале информирует о текущей длине хорды. Для назначения нужной длины вводим свое значение. Можно также назначить количество сегментов, образующих дугу вводом значения.

Прямоугольник (Rectangle) – при перемещении курсора от начального угла к диагонально расположенному конечному VCB информирует о длинах сторон прямоугольника.

Окружность (Circle) и Многоугольник (Polygon) – при перемещении курсора от назначенного центра окружности VCB информирует о текущей величине радиуса. Можно переназначить эту величину непосредственно после завершения построения .

Перемещение (Move) – при перемещении элемента инструментом VCB работает с величинами смещения точно так же, как и в инструменте Линия (Line). Но, кроме того, очень удобно применять VCB для управления созданием копий, которые появляются при перемещении с нажатой клавишей Ctrl.

Вращение (Rotate) – в принципе, здесь все приемы работы с VCB аналогичны инструменту Перемещение (Move), только они применяются к величинам углов поворота (Angle).

Масштаб (Scale) – здесь VCB показывает текущие (и, естественно, можно назначить свои) коэффициенты масштабирования, а также подсказывает по каким осям это одновременно происходит.

Тянуть/Толкать (Push/Pull) и Контур (Offset) – поскольку здесь также речь идет о дистанции перемещения, VCBработает с этими величинами, как и в инструменте Линия (Line).

Лупа (Zoom) – здесь VCB показывает текущую (и, естественно, можно переназначить свою) величину угла обзора (поля зрения) камеры в градусах.

Объяснение:

Надеюсь поставь лучший ответ и сердечко

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота