ThoughtWorks2018校招面试题
时长:120分钟 总分:100分
769浏览 0人已完成答题
题型介绍
题型 | 简答题 |
---|---|
数量 | 1 |
2018校招面试题——羽毛球馆
2018校招面试题——羽毛球馆
[TOC]
说明
- 本作业限时2天完成
- 可以选用擅长的语言完成,例如C、C++、Java、C#、Javascript、Python、Scala等
- 可以使用第三方库简化代码(如日期,时间、集合操作等)
- 作业的输入和输出必须和题目的测试用例输出严格一致
- 作业完成后必须附上 Readme 纯文本文档(推荐使用 markdown 排版)
- Readme文档中应描述如何运行单元测试或主程序来证明作业的正确性(至少针对测试用例输入能够得到对应输出)
家庭作业部分
羽毛球场的收费标准如下:
- 周一到周五:
- 9:00 ~ 12:00 30元/时
- 12:00 ~ 18:00 50元/时
- 18:00 ~ 20:00 80元/时
- 20:00 ~ 22:00 60元/时
- 周六及周日
- 9:00 ~ 12:00 40元/时
- 12:00 ~ 18:00 50元/时
- 18:00 ~ 22:00 60元/时
羽毛球场馆在预订之后,可以接受取消预订,不过取消预订需要交违约金,违约金的计算规则如下:
- 周一到周五的预订取消收取全部费用的50%作为违约金
- 周六周日的预订取消收取全部费用的25%作为违约金
程序输入
预订:用户预订以字符串的形式输入,一行字符串代表一个预定
- 格式为{用户ID} {预订日期 yyyy-MM-dd} {预订时间段 HH:mm~HH:mm} {场地},如U123 2016-06-02 20:00~22:00 A,代表用户U123预定2016年06月02日晚上20:00到22:00的场地A的时间段
- 时间段的起止时间必然为整小时,否则报错
- 如预订与已有预订冲突,也会报错
取消预定:用户取消预定,输入也以一行字符串的形式表现
- 格式为{用户ID} {预订日期 yyyy-MM-dd} {预订时间段 HH:mm~HH:mm} {场地} {取消标记},如U123 2016-06-02 20:00~22:00 A C,代表用户U123取消其在2016年06月02日晚上20:00到22:00在场地A的预订,其中取消标记C代表Cancel
- 取消标记只能是C,若为其他字符则报错
- 时间段的起止时间必然为整小时,否则报错
- 只能完整取消之前的预订,不能取消部分时间段
- 取消预订的请求,必须与之前的预订请求严格匹配,需要匹配的项有用户ID,预订日期,预订时间段,场地
打印场馆收入汇总: 将所有的预订和取消预订带来的收入汇总信息打印出来
- 格式为,输入一个空行,代表打印收入汇总
程序输出
收入汇总:以文本的形式输出当前系统所有预订以及取消预订所带来的收入情况,以不同的场地分组,一个可能的输出如下所示:
收入汇总 --- 场地:A 2016-06-02 09:00~10:00 违约金 15元 2016-06-02 10:00~12:00 60元 2016-06-03 20:00~22:00 120元 小计:195元 场地:B 2016-06-04 09:00~10:00 40元 小计:40元 场地:C 小计:0元 场地:D 小计:0元 --- 总计: 235元
注意:
- 如果同一场地同一时间段有多条预定记录,则显示多条
- 收入记录以时间顺序升序排列
测试用例1
注意:>开头表示命令行输出,以下测试用例都遵循此例
abcdefghijklmnopqrst1234567890 > Error: the booking is invalid! U001 2016-06-02 22:00~22:00 A > Error: the booking is invalid! U002 2017-08-01 19:00~22:00 A > Success: the booking is accepted! U003 2017-08-02 13:00~17:00 B > Success: the booking is accepted! U004 2017-08-03 15:00~16:00 C > Success: the booking is accepted! U005 2017-08-05 09:00~11:00 D > Success: the booking is accepted! > 收入汇总 > --- > 场地:A > 2017-08-01 19:00~22:00 200元 > 小计:200元 > > 场地:B > 2017-08-02 13:00~17:00 200元 > 小计:200元 > > 场地:C > 2017-08-03 15:00~16:00 50元 > 小计:50元 > > 场地:D > 2017-08-05 09:00~11:00 80元 > 小计:80元 > --- > 总计:530元
测试用例2
U002 2017-08-01 19:00~22:00 A > Success: the booking is accepted! U003 2017-08-01 18:00~20:00 A > Error: the booking conflicts with existing bookings! U002 2017-08-01 19:00~22:00 A C > Success: the booking is accepted! U002 2017-08-01 19:00~22:00 A C > Error: the booking being cancelled does not exist! U003 2017-08-01 18:00~20:00 A > Success: the booking is accepted! U003 2017-08-02 13:00~17:00 B > Success: the booking is accepted! > 收入汇总 > --- > 场地:A > 2017-08-01 18:00~20:00 160元 > 2017-08-01 19:00~22:00 违约金 100元 > 小计:260元 > > 场地:B > 2017-08-02 13:00~17:00 200元 > 小计:200元 > > 场地:C > 小计:0元 > > 场地:D > 小计:0元 > --- > 总计:460元
办公室面试部分
球场的优惠活动存放在程序的某文本资源文件中,其中的每一行字符串代表一个优惠时间段,每个优惠时段的格式为,{起始日期:yyyy-MM-dd} {终止日期(包含):yyyy-MM-dd} {折扣:1-9代表相应的折扣},以下为范例:
2016-04-01 2016-04-02 6 2017-08-01 2017-08-03 8
请修改程序实现优惠后的收入汇总,需要注意之前的所有需求保持不变。
测试用例
注意:以下结果基于上述范例优惠信息计算得出
abcdefghijklmnopqrst1234567890 > Error: the booking is invalid! U001 2016-06-02 22:00~22:00 A > Error: the booking is invalid! U002 2017-08-01 19:00~22:00 A > Success: the booking is accepted! U003 2017-08-02 13:00~17:00 B > Success: the booking is accepted! U004 2017-08-03 15:00~16:00 C > Success: the booking is accepted! U005 2017-08-05 09:00~11:00 D > Success: the booking is accepted! > 收入汇总 > --- > 场地:A > 2017-08-01 19:00~22:00 160元 已优惠:40元 > 小计:160元 > > 场地:B > 2017-08-02 13:00~17:00 160元 已优惠:40元 > 小计:160元 > > 场地:C > 2017-08-03 15:00~16:00 40元 已优惠:10元 > 小计:40元 > > 场地:D > 2017-08-05 09:00~11:00 80元 > 小计:80元 > --- > 总计:440元