Solución
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 result0respuestas