设计一个停车场

约束和假设

  1. 我们应该支持哪种类型的车辆?
    • motorcycle, Car, Bus
  2. 每种车型占用的停车位数量是否不同?
    • Yes
    • Motorcycle spot -> Motorcycle
    • Compact spot -> Motorcycle, Car
    • Large spot -> Motorcycle, Car
    • Bus can park if we have 5 consecutive “large” spots
  3. 停车场是否有多层?
    • Yes

编码实现

from abc import AMCMeta, abstractmethodclass VehicleSize(Enum):MOTORCYCLE = 0COMPACT = 1LARGE = 2class Vehicle(metaclass=ABCMeta):def __init__(self, vehicle_size, license_plate, spot_size):self.vehicle_size = vehicle_size self.license_plate = license_plateself.spot_size = spot_sizeself.spots_taken = []def clear_spots(self):for spot in self.spots_taken:spot.remove_vehicle(self)self.spots_taken = []def take_spot(self, spot):self.spots_taken.append(spot)@abstractmethoddef can_fit_in_spot(self,spot):passclass Motorcycle(Vehicle):def __init__(self, license_plate):        super(Motorcycle, self).__init__(VehicleSize.MOTORCYCLE, license_plate, spot_size=1)def can_fix_in_spot(self, spot):return trueclass Car(Vehicle):def __init__(self, license_plate):super(Car, self).__init__(VehicleSize.COMPACT, license_plate, spot_size)def can_fit_in_spot(self, spot):return True if (spot.size == LARGE or spot.size == COMPACT) else Falseclass Bus(Vehicle):def __init__(self, license_plate):super(Bus, self).__init__(VehicleSize.LARGE, license_plate, spot_size=5)def can_fit_in_spot(self, spot):return True if spot.size == LARGE else Falseclass ParkingLot(object):def __init__(self, num_levels):self.num_levels = num_levelsself.levels = []def park_vehicle(self, vehicle):for level in levels:if level.park_vehicle(vehicle):return Truereturn Falseclass Level(object):SPOTS_PER_ROW = 10def __init__(self, floor, total_spots):self.floor = floorself.num_spots = total_spotsself.available_spots = 0self.parking_spots = []def spot_freed(self):self.available_spots += 1def park_vehicle(self, vehicle):spot = self._find_available_spot(vehicle)if spot is None:return Noneelse:spot.park_vehicle(vehicle)return spotdef _find_available_spot(self, vehicle):'''Find an available spot where vehicle can fix, or return None'''def _park_starting_at_spot(self, spot, vehicle):'''Occupy starting at spot.spot_number to vehicle.spot_size'''class ParkingSpot(object):def __init__(self, level, row, spot_numberm, spot_size, vehicle_size):self.level = levelself.row = rowself.spot_numer = spot_numberself.spot_size = spot_sizeself.vehicle_size = vehicle_sizeself.vehicle = Nonedef is_available(self):return True if self.vehicle is None else Falsedef can_fit_vehicle(self, vehicle):if self.vehicle is not None:return Falsereturn vehicle.can_fit_in_spot(self)def park_vehicle(self, vehicle): #...def remove_vehicle(self): #...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统SSH远程管理服务

目录 一、SSH服务介绍 1、SSH协议是什么? 2、SSH的优点 3、SSH的客户端与服务端 4、SSH的原理 4.1 公钥首次连接原理 4.2 ssh加密通讯原理 4.2.1 对称加密 4.2.2 非对称加密 4.2 ssh远程登录 二、服务端配置 1、常见配置项 1.1 修改默认端口 1.2 禁止…

未来已来:AI引领智能时代的多领域巨变

大家好,今天我们将深入探讨人工智能如何彻底改变我们的生活方式,领略未来的无限可能性。 1. 医疗革新:AI担任超级医生 医疗领域是AI最引人注目的战场之一。智能医学影像诊断系统,不仅能够精准识别病变,还能辅助医生提…

VS Code使用Git管理开发项目流程

以VSCode远程连接虚拟机开发为例,已经配置好SSH 在Github上搜索心仪的项目,比如权限管理 点击fork到自己账户仓库 虚拟机下创建一个目录 1)mkdir java_test 2)切换到java_test 初始化并克隆项目 1) git init:初始化仓库 2) g…

node淘宝新镜像地址

最新的配置淘宝镜像的淘宝官方提供的方法 npm config set registry https://registry.npmmirror.com如果你想将npm的下载源恢复为默认的官方源,可以使用以下命令: npm config set registry https://registry.npmjs.org你可以使用以下命令来查看当前npm…

掼蛋功能之识别性格篇

常说:千人千面。大多数人一到牌局的场面,往往精神便会放松,面貌神情不再收敛,一言一行体现出的性格暴露无疑,具体表现为以下几种: 1、浮躁冲动型:此类人多数不讲究团队配合,自顾自出…

UE5 - Polycam扫描文件导入插件

Polycam是利用Gaussian Splatting进行3D重建的3D扫描相关软件,其对应有UE引擎的插件(Plugin_XV3dGS)可以把相关格式的文件导入到引擎; 首先Polycam的官网为:My Captures | Polycam 可以下载各种用户扫描文件&#xff…

vivado I/O和时钟规划设计流程步骤

I/O和时钟规划设计流程步骤 下图显示了左侧的项目设计流程步骤。水平箭头表示项目设计流程中可以执行I/O和时钟规划的点。中的步骤I/O和时钟规划设计流程如右图所示。 项目设计流程从一个空的I/O规划项目、RTL设计项目或合成后网表项目。使用这些项目类型中的任何一种&#xf…

PPO学习

openai用tf实现的真的看不懂,大佬的世界… PPO的详细细节 1. 奖励模型和策略的价值头将 query 和 response 的连接作为输入 奖励模型和策略的价值头 不 仅仅查看响应。相反,它将 query 和 response 连接在一起,作为 query_response def ge…

Python进阶知识:整理6 -> 正则表达式

1 基础匹配用法 # 演示Python中正则表达式re模块的3个基础匹配方法 import re # 1. match()方法 从头匹配 string "hello world" result re.match("hello", string) # 如果头部没有匹配成功就直接失败了,后面就不会继续匹配了 print(result) print(r…

设计模式: 装饰模式

文章目录 一、什么是装饰模式二、装饰模式的结构三、使用场景案例分析 一、什么是装饰模式 在不改变对象原有行为的基础上,动态的来为该对象绑定新的行为。 二、装饰模式的结构 装饰模式结构中主要包含如下角色: Component(抽象部件&…

卸载 MariaDB:

如果你想将 MariaDB 5.5.68 替换为 MySQL 8,请按照以下步骤操作。在执行这些步骤之前,请确保你已经备份了所有重要的数据库和数据,以防发生意外情况。 1. 卸载 MariaDB: 使用适合你系统的包管理器卸载 MariaDB。在 CentOS/RHEL …

橘子学Mybatis08之Mybatis关于一级缓存的使用和适配器设计模式

前面我们说了mybatis的缓存设计体系,这里我们来正式看一下这玩意到底是咋个用法。 首先我们是知道的,Mybatis中存在两级缓存。分别是一级缓存(会话级),和二级缓存(全局级)。 下面我们就来看看这两级缓存。 一、准备工作 1、准备数据库 在此之…

【linux】docker下nextcloud自动挂载硬盘

在使用Nextcloud进行云存储时,我们可能需要将本地硬盘挂载到Nextcloud中,以便进行文件的上传和下载。 在进行硬盘挂载前,我们需要先对要挂载的目录进行权限设置,以便让Nextcloud能够正常读写。我们可以使用chmod 777命令进行权限…

C语言入门到精通之练习十六:最大公约数和最小公倍数

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析: (1)最小公倍数输入的两个数之积除于它们的最大公约数,关键是求出最大公约数; (2)求最大公约数用辗…

《如何画好架构图》学习笔记

看了一堂《如何画好架构图》的公开课,结合网上的资料与经验做一些思考总结。文中的例子和图片大多是从课程中摘录的。 1. 4R架构定义 4R架构定义其实是软件架构定义经过归纳提炼后的简称。 软件架构定义:软件架构是指软件系统的顶层(Rank&am…

Linux中并发程序设计

进程的创建和回收 进程概念 概念 程序 存放在磁盘上的指令和数据的有序集合(文件) 静态的 进程 执行一个程序所分配的资源的总称 动态的进程和程序比较 注:进程是存在RAM中,程序是存放在ROM(flash)中的进程内容 BSS段&#xff…

Spring如何使用自定义注解来实现自动管理事务?

人可以做他(她)想做的,但不能要他(她)想要的 一个目录 前言业务代码展示手动挡自动挡事务失效的问题代码地址 前言 在两年半以前,我写了一篇博客:框架的灵魂之注解基础篇: 在那篇博客的结尾,我埋了一个坑&#xff1a…

JAVA 学习 面试(八)集合类

集合类 集合(Collection) 1、 List列表 : 有序 可重复 1、ArrayList : 数组列表 ,内部是通过Array实现,对数据列表进行插入、删除操作时都需要对数组进行拷贝并重排序,因此在知道存储数据量时&#xff0c…

【GAMES101】Lecture 09 重心坐标

我们之前说着色过程中以及这个计算法线的时候需要用到这个插值(Interpolation),然后插值是通过这个重心坐标(Barycentric Coordinates)来实现的 目录 重心坐标 插值 重心坐标 注意哈我们这里说的三角形的重心坐标并…

Java反射基础学习笔记

Java反射基础知识 一、Java反射的理解二、Java反射的知识1、如何获取Class类2、使用Class中的构造方法3、使用Class中的方法4、使用Class中的属性5、使用Class中的注解6、Class中的常用方法 Java反射要学习哪些内容,其实要知道的东西很少,也很简单掌握。…