Solución

@baalbornozl_05acdf3a·hace 3dTypeScript
solution.tsTypeScript
import math
from abc import ABC, abstractmethod


class Shape(ABC):
    @abstractmethod
    def area(self) -> float:
        pass

    @abstractmethod
    def perimeter(self) -> float:
        pass


class Circle(Shape):
    def __init__(self, radius: float) -> None:
        # Guarda el radio
        self.radio = radius

    def area(self) -> float:
        # Retorna el área del círculo
        return math.pi * (self.radio ** 2)

    def perimeter(self) -> float:
        # Retorna la circunferencia
        return math.pi * 2 * self.radio


class Rectangle(Shape):
    def __init__(self, width: float, height: float) -> None:
        # Guarda las dimensiones
        self.width = width
        self.height = height

    def area(self) -> float:
        # Retorna el área del rectángulo
        return self.height * self.width

    def perimeter(self) -> float:
        # Retorna el perímetro del rectángulo
        return self.height * 2 + self.width * 2


def calculate_shapes(shapes_data: list) -> list:
    # Crea Circle o Rectangle para cada elemento y retorna la lista de métricas
    result = []
    for obj in shapes_data:
        if obj["type"] == "circle":
            circulo = Circle(obj["radius"])
            d = {"type": obj["type"], "area": round(circulo.area(), 2), "perimeter": round(circulo.perimeter(), 2)}
            result.append(d)
        else:
            rectangle = Rectangle(obj["width"], obj["height"])
            d = {"type": "rectangle", "area": round(rectangle.area(), 2), "perimeter": round(rectangle.perimeter(), 2)}
            result.append(d)
    return result
0respuestas
Respuestas

Aún no hay respuestas

¡Sé el primero en responder!

Escribir un comentario

Recuerda ser amable. Estás comentando la solución de otra persona. Comparte tu perspectiva de forma constructiva y respetuosa.

Debes iniciar sesión para publicar un comentario.