uber_model

 avatar
unknown
plain_text
6 months ago
2.3 kB
11
Indexable
class Driver:
    def __init__(self, driver_id, location):
        self.driver_id = driver_id
        self.location = location
        self.available = True

class Uber:
    def __init__(self, max_dist):
        self.max_dist = max_dist
        self.drivers = []
        self.requests = {}

    def add_driver(self, driver_id, location):
        driver = Driver(driver_id, location)
        self.drivers.append(driver)

    def request_ride(self, passenger_id, rider_location):
        self.requests[passenger_id] = {'rider_location': rider_location, 'assigned_driver': None}
        driver = self.assign_driver(rider_location)
        if driver:
            self.requests[passenger_id]['assigned_driver'] = driver.driver_id
            driver.available = False  
            print(f"Assigned driver {driver.driver_id} to passenger {passenger_id}.")
        else:
            print("No available drivers.")

    def assign_driver(self, rider_location):
        closest_driver = None
        min_distance = self.max_dist
        for driver in self.drivers:
            if driver.available:
                distance = driver.location - rider_location
                if distance <= min_distance:
                    closest_driver = driver
                    min_distance = distance
        return closest_driver

    def complete_ride(self, passenger_id):
        if passenger_id in self.requests:
            driver_id = self.requests[passenger_id]['assigned_driver']
            if driver_id:  
                print(f"Ride completed.")
                for driver in self.drivers:
                    if driver.driver_id == driver_id:
                        driver.available = True
                        break
                del self.requests[passenger_id] 
            else:
                raise Exception("No driver assigned yet")
        else:
            raise Exception("No request found")

def main():
    uber_service = Uber(max_dist=1.5)
    uber_service.add_driver(driver_id='D1', location=1)
    uber_service.add_driver(driver_id='D2', location=1.5)
    
    uber_service.request_ride(passenger_id='P1', rider_location=0.5)
    uber_service.request_ride(passenger_id='P2', rider_location=3.0) # will fail
    uber_service.complete_ride(passenger_id='P1')

if __name__ == "__main__":
    main()
Editor is loading...
Leave a Comment