# 3. Осуществить программу работы с органическими клетками, состоящими из ячеек. 
# Необходимо создать класс «Клетка». 
# В его конструкторе инициализировать параметр, соответствующий количеству ячеек клетки (целое число). 
# В классе должны быть реализованы методы перегрузки арифметических операторов: 
# сложение (__add__()), вычитание (__sub__()), умножение (__mul__()), деление (__floordiv____truediv__()). 
# Эти методы должны применяться только к клеткам и выполнять увеличение, уменьшение, умножение и округление до целого числа 
# деления клеток, соответственно.

# Сложение. Объединение двух клеток. 
# При этом число ячеек общей клетки должно равняться сумме ячеек исходных двух клеток.

# Вычитание. Участвуют две клетки. 
# Операцию необходимо выполнять, только если разность количества ячеек двух клеток больше нуля, 
# иначе выводить соответствующее сообщение.

# Умножение. Создаётся общая клетка из двух. Число ячеек общей клетки — произведение количества ячеек этих двух клеток.

# Деление. Создаётся общая клетка из двух. 
# Число ячеек общей клетки определяется как целочисленное деление количества ячеек этих двух клеток.

# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и количество ячеек в ряду. 
# Этот метод позволяет организовать ячейки по рядам.

# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n равно переданному аргументу. 
# Если ячеек на формирование ряда не хватает, то в последний ряд записываются все оставшиеся.

# Например, количество ячеек клетки равняется 12, а количество ячеек в ряду — 5. 
# В этом случае метод make_order() вернёт строку: *****\n*****\n**.

# Или, количество ячеек клетки — 15, а количество ячеек в ряду равняется 5. 
# Тогда метод make_order() вернёт строку: *****\n*****\n*****.

class Cell():

    def __init__(self, cell:int):
        self.cell = cell

    def __add__(self, num):
        return Cell(self.cell + num.cell)

    def __sub__(self, num): 
        return Cell(self.cell - num.cell)

    def __mul__(self, num): 
        return Cell(self.cell * num.cell)

    def __floordiv__(self, num): 
        return Cell(self.cell // num.cell)

    def make_order(self, num):
        s = ''
        for i in range(self.cell//num):
            s += f'{"*"*num}\n'
        s += f'{"*"*(self.cell%num)}'
        if not self.cell%num: s = s[:-1]
        return s

    def __str__(self):
        return str(self.cell)

# Tests
c1 = Cell(13)
c2 = Cell(17)
print(c1+c2)
print(c1-c2)
print(c1*c2)
print(c1//c2)
print(c1.make_order(int(3)))
print(34//2)