From bf621e025aa1feff72bcdf393d5015dd49c799d3 Mon Sep 17 00:00:00 2001 From: Amrit Sinha Date: Sun, 19 Apr 2026 13:38:58 +0530 Subject: [PATCH] Refactor fee_strategy module of parkinglot python solution --- solutions/python/parkinglot/fee_strategy.py | 22 +++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/solutions/python/parkinglot/fee_strategy.py b/solutions/python/parkinglot/fee_strategy.py index b7293e93..ae6232c3 100644 --- a/solutions/python/parkinglot/fee_strategy.py +++ b/solutions/python/parkinglot/fee_strategy.py @@ -1,28 +1,30 @@ from abc import ABC, abstractmethod from parking_ticket import ParkingTicket from vehicle_size import VehicleSize +import math class FeeStrategy(ABC): @abstractmethod - def calculate_fee(self, parking_ticket: ParkingTicket) -> float: + def get_hourly_rate(self, parking_ticket: ParkingTicket) -> float: pass + def calculate_fee(self, parking_ticket: ParkingTicket) -> float: + duration = parking_ticket.get_exit_timestamp() - parking_ticket.get_entry_timestamp() + hours = max(1, math.ceil(duration / (1000 * 60 * 60))) + return hours * self.get_hourly_rate(parking_ticket) + class FlatRateFeeStrategy(FeeStrategy): RATE_PER_HOUR = 10.0 - def calculate_fee(self, parking_ticket: ParkingTicket) -> float: - duration = parking_ticket.get_exit_timestamp() - parking_ticket.get_entry_timestamp() - hours = (duration // (1000 * 60 * 60)) + 1 - return hours * self.RATE_PER_HOUR + def get_hourly_rate(self, parking_ticket: ParkingTicket) -> float: + return self.RATE_PER_HOUR class VehicleBasedFeeStrategy(FeeStrategy): HOURLY_RATES = { VehicleSize.SMALL: 10.0, VehicleSize.MEDIUM: 20.0, - VehicleSize.LARGE: 30.0 + VehicleSize.LARGE: 30.0, } - def calculate_fee(self, parking_ticket: ParkingTicket) -> float: - duration = parking_ticket.get_exit_timestamp() - parking_ticket.get_entry_timestamp() - hours = (duration // (1000 * 60 * 60)) + 1 - return hours * self.HOURLY_RATES[parking_ticket.get_vehicle().get_size()] \ No newline at end of file + def get_hourly_rate(self, parking_ticket: ParkingTicket) -> float: + return self.HOURLY_RATES[parking_ticket.get_vehicle().get_size()]