# 3. Реализовать программу работы с органическими клетками. Необходимо создать класс Клетка.
# В его конструкторе инициализировать параметр, соответствующий количеству клеток (целое число).
# В классе должны быть реализованы методы перегрузки арифметических операторов: сложение (__add__()),
# вычитание (__sub__()), умножение (__mul__()), деление (__truediv__()).Данные методы должны применяться
# только к клеткам и выполнять увеличение, уменьшение, умножение и обычное (не целочисленное) деление клеток,
# соответственно. В методе деления должно осуществляться округление значения до целого числа.
# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться сумме
# ячеек исходных двух клеток.
# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность количества ячеек двух клеток
# больше нуля, иначе выводить соответствующее сообщение.
# Умножение. Создается общая клетка из двух. Число ячеек общей клетки определяется как произведение количества
# ячеек этих двух клеток.
# Деление. Создается общая клетка из двух. Число ячеек общей клетки определяется как целочисленное деление
# количества ячеек этих двух клеток.
# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и количество ячеек в ряду.
# Данный метод позволяет организовать ячейки по рядам.
# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n равно
# переданному аргументу. Если ячеек на формирование ряда не хватает, то в последний ряд записываются все оставшиеся.
# Например, количество ячеек клетки равняется 12, количество ячеек в ряду — 5. Тогда метод make_order() вернет
# строку: *****\n*****\n**.
# Или, количество ячеек клетки равняется 15, количество ячеек в ряду — 5. Тогда метод make_order()
# вернет строку: *****\n*****\n*****.
# Подсказка: подробный список операторов для перегрузки доступен по ссылке.

class Cell:
    def __init__(self, number):
        self.number = int(number)

    def __str__(self):
        return f'Количество ячеек в клетке: {self.number}'

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

    def __sub__(self, cell):
        result = self.number - cell.number

        if result > 0:
            return f'Количество ячеек в клетке: {result}'

        return f'Операция вычитания невозможна для клеток!'

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

    def __truediv__(self, cell):
        return Cell(round(self.number / cell.number))

    def make_order(self, numb_in_row):
        line = ''
        for i in range(int(self.number / numb_in_row)):
            line += f'{"*" * numb_in_row}\\n'
        line += f'{"*" * (self.number % numb_in_row)}'
        return line

cell1 = Cell(12)
cell2 = Cell(15)

print(cell1)
print(cell2)

print(cell1 + cell2)
print(cell1 - cell2)
print(cell2 - cell1)
print(cell1 * cell2)
print(cell1 / cell2)
print(cell2 / cell1)

print(cell1.make_order(5))
print(cell2.make_order(5))

print(cell1.make_order(3))
print(cell2.make_order(4))