Задачи
Задача 1
Представьте, что вы пишете компьютерную игру «Шахматы».
Вам надо смоделировать шахматную доску, которая представляет собой numpy-матрицу. Чёрная клетка представляется нулём, а белая — единицей. Если смотреть на доску сверху, то левая верхняя клетка — белая.
Вы уже практически реализовали задачу, ведь вы знаете, что у шахматной доски 8 столбцов и 8 строк, но заказчик вдруг изменил требования и заявил, что в его игре доска может быть произвольного размера, но всегда квадратной, например, 50х50.
Напишите функцию z, в которую поступает размер доски и которая возвращает требуемый массив numpy
. Тип элементов массива должен быть np.int8
.
Формат ввода
Формат вывода
Полученный массив
Задача 2
Змейка «ползёт» по матрице по чётным строкам слева направо, а по нечётным – справа налево, заполняя матрицу последовательно натуральными числами.
Напишите функцию snake(rows, cols)
, которая заполняет матрицу указанным образом и возвращает её.
Формат ввода
Формат вывода
Полученная матрица
Задача 3
Честно говоря, чаще приходится сортировать матрицы по строкам, но в этой задаче вам надо будет упорядочивать столбцы матрицы.
Напишите функцию super_sort(rows, cols)
, в которую поступают размеры матрицы. Вам необходимо:
заполнить матрицу А случайными целыми числами из диапазона [1..100]
сделать копию этой матрицы в матрицу B
упорядочить чётные столбцы матрицы B по возрастанию, а нечётные — по убыванию
Верните кортеж, состоящий из матриц А и B.
Формат ввода
Задача 4
По ссылке можно скачать файл. Это – текстовый файл в кодировке UTF-8, в котором записана таблица данных, а данные в строчках разделены символом «точка-с-запятой».
Файл создан департаментом сельского хозяйства США и в нём указаны продукты и содержание в них некоторых витаминов, минералов, а также калорийность на единицу массы.
Для чтения данных из этого файла в объект numpy.ndarray
воспользуйтесь методом genfromtxt()
из библиотеки numpy
.
Вычислите и выведите на отдельных строчках названия самого-самого продукта по различным критериям.
Cамый калорийный. Если их несколько, то выведите тот, у кого название в словаре стоит позже всех других.
Самый полезный по содержанию сахара. Если их много, то выведите тот, у кого название в словаре стоит на первом месте.
Самый протеино-накачанный. Если имеется несколько вариантов, то снова выведите младший в словаре по названию.
Самый богатый витамином С. Такой продукт точно один.
Формат вывода
Названия продуктов по одному на каждой строке.
Примечания
Помните, что «самый-самый» – это не обязательно максимальная характеристика. Поиск продуктов необходимо выполнять только c использованием средств библиотеки numpy.
Задача 5
На шахматной доске размером n×n необходимо расставить n ферзей таким образом, чтобы ни один из них не атаковал другого.
Напишите для этого функцию queens(size)
, где size
– это размер доски (size > 2)
.
Формат ввода
Формат вывода
Все решения в порядке возрастания. Например, для доски 8×8 решение выглядит так:
Каждая цифра указывает вертикальную координату одного ферзя (по условию задачи два ферзя не могут находиться на одной вертикали). Первая цифра относится к горизонтали А, вторая – к B и т.д. Например, решение
нужно интерпретировать так: ферзи на клетках (A;1), (B;5), (C;8), ..., (H;4) – первый символ – координата по горизонтали, второй – по вертикали.
Задача 6
На рисунке показано несколько поколений одномерного клеточного автомата. У каждой клетки только два соседа — слева и справа, а поле представляет собой бесконечную полосу клеток (правый сосед последней клетки – это первая клетка, а левый сосед первой клетки – последняя). Эволюция идёт сверху вниз: первое поколение приведено в верхней строчке, второе — во второй сверху и т.д.
Правило эволюции дано в верхней части рисунка. Цвет каждой ячейки текущего поколения определяется сочетанием цветов трёх соседних ячеек предыдущего поколения, расположенных над ней: непосредственно сверху и по диагоналям (сверху-слева и сверху-справа).
Всего возможны восемь разных «триплетов», порождающих в следующем поколении либо закрашенную ячейку (1), либо пустую (0). Это дает 256 возможных правил эволюции. В этой задаче используется правило номер 30.
Используя библиотеку numpy, напишите функцию generation(line)
, которая вычисляет и возвращает десятое поколение клеточного автомата по правилу 30.
Формат ввода
Задача 7
Используя numpy, без питоновских циклов сконвертируйте цветное изображение в чёрно-белое по формуле:
C = 0.2989 * R + 0.5870 * G + 0.1140 * B
Считается, что вычисленный таким образом цвет лучше всего подходит для человеческого глаза, поскольку яркость каждой компоненты глаз воспринимает по-разному.
Напишите функцию bw_convert()
, в которой проведите все необходимые операции.
Формат ввода
В папке с вашим решением должен лежать файл image.jpg c исходной картинкой.
Формат вывода
Результат сохраните в файл res.jpg в текущей папке.
Примечания
Не забудьте, что значение каждой составляющей цвета — целое число, поэтому результат необходимо округлить.
Для этого воспользуйтесь методом round()
из библиотеки numpy
.
Несмотря на то, что можно создать изображение только с одной серой компонентой цвета, которое будет выглядеть корректно, да еще и занимать меньше места на компьютере, мы с вами договорились, что будем использовать формат изображения RGB, не забывайте про это.