"""
1. Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса (метод __init__()), который должен
принимать данные (список списков) для формирования матрицы.

Подсказка: матрица — система некоторых математических величин, расположенных в виде прямоугольной схемы. Примеры матриц:
3 на 2, 3 на 3, 2 на 4.

31 22   3  5  32   3 5 8 3
37 43   2  4  6    8 3 7 1
51 86   -1 64 -8

Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в привычном виде.
Далее реализовать перегрузку метода __add__() для реализации операции сложения двух объектов класса Matrix (двух
матриц). Результатом сложения должна быть новая матрица.

Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой строки первой матрицы складываем с
первым элементом первой строки второй матрицы и т.д.
"""


class Matrix:
    def __init__(self, content: list[list]):
        self.__content = content

    def __str__(self):
        return '\n'.join(['\t'.join(map(str, row)) for row in self.__content])

    def __add__(self, other):
        return Matrix(
            [
                [x + y for x, y in zip(left_row, right_row)]
                for left_row, right_row
                in zip(self.__content, other.__content)
            ]
        )


def main():
    matrix_1 = Matrix(
        [[31, 22],
         [37, 43],
         [51, 86]]
    )

    matrix_2 = Matrix(
        [[3,  5,  32],
         [2,  4,  6],
         [-1, 64, -8]]
    )

    matrix_3 = Matrix(
        [[3, 5, 8, 3],
         [8, 3, 7, 1]]
    )

    print("Первая матрица: ")
    print(matrix_1)

    print("Вторая матрица: ")
    print(matrix_2)

    print("Третья матрица: ")
    print(matrix_3)

    print("Четвертая матрица: ")
    matrix_4 = Matrix([[1, 2], [3, 4], [5, 6]])
    print(matrix_4)

    print("Сумма первой и четвертой матриц: ")
    print(matrix_1 + matrix_4)


if __name__ == '__main__':
    main()
