Numpy Шахматная доска

import numpy as np


def make_field(size):
    a = np.array([0, 1])
    b = np.resize(a, (size, size))
    z = b.reshape(size, -1)
    return z

вот что у меня получилось, но этот код только работает с нечётными числами

УСЛОВИЕ:

Представьте, что вы пишете компьютерную игру «Шахматы».

Вам надо смоделировать шахматную доску, которая представляет собой numpy-матрицу. Чёрная клетка представляется нулём, а белая — единицей. Если смотреть на доску сверху, то левая верхняя клетка — белая.

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

Напишите функцию make_field(size), в которую поступает размер доски и которая возвращает требуемый массив numpy. Тип элементов массива должен быть np.int8.

Формат ввода

Тестирующая система будет вызывать вашу функцию, например, так:

make_field(5)

Формат вывода

Программа ничего не должна выводить на экран.

Тестирующая система сравнит массив, полученный в результате работы вашей функции с массивом, который она сформирует сама. Если сравнение будет успешным, то вердикт будет OK, в противном случае будет выведена информация об ошибке.

А с чётными что происходит?

должно быть
[[0, 1, 0, 1],
[1, 0, 1, 0],
[0, 1, 0, 1],
[1, 0, 1, 0]]
а выводит
[[0, 1, 0, 1],
[0, 1, 0, 1],
[0, 1, 0, 1],
[0, 1, 0, 1]]

Тут resize явно не то, он же просто копирует подряд.

В общем, тут думать надо :sweat_smile:

Или не думать, а по “numpy checkboard” нагуглить https://stackoverflow.com/a/2169547/964478:

def build_checkerboard(w, h) :
    re = NP.r_[ w*[0,1] ]  # even-numbered rows
    ro = NP.r_[ w*[1,0] ]  # odd-numbered rows
    return NP.row_stack(h*(re, ro))

Даже для не квадратной.

2 лайка

Не логичный алгоритм. Клеток много, а состояний всего два.

Подобные хотелки реализовываются по дополнителному соглашению к основным условиям договора.

А как логично?

Так в задаче и нет ничего про договор, кто сказал, что там нет про это, или что например “заказчик” не просто платит фиксированную зп в месяц?)

Полагаю логично доску представлять в виде матрицы. И соответственно у каждой клетки будет свой индивидуальный идентификатор.
О договоре согласен. Вариации различные могут быть.

Так а тут как?)