首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
蓝色水晶
2017-09-11 08:03
西安电子科技大学
关注
已关注
取消关注
有没有人做思特沃克的线下作业题,求讨论
有没有人做思特沃克的线下作业题,求讨论
提示
全部评论
推荐
最新
楼层
Horace7
伦敦大学学院 算法工程师
https://github.com/billweasley/BadmintonCourt Java写的 不会写正则,所以语句parse写的特别特别丑... 另外好多地方好像可以改进,总之求交流
点赞
回复
分享
发布于 2017-09-12 20:17
努力给自己一个offer
华南理工大学 前端工程师
JS写的,个人觉得写得比较垃圾,应该有其他更好的方法和优化的方法,不过自己实在是想不出来了,希望有大佬指点一下 (function work() { //程序主类 class Program { constructor(line) { this.reg = /\s*(\w+)\s+(\d{4}-\d{2}-\d{2})\s+(\d{2}:00~\d{2}:00)\s+([ABCD])\s*(C)?\s*/; //匹配字符串格式 this.dateReg = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/; //匹配日期字符串 this.timeReg = /(09|1[0-9]|2[0-2]):00~(09|1[0-9]|2[0-2]):00/; //匹配时间段字符串 this.A = new Court(); this.B = new Court(); this.C = new Court(); this.D = new Court(); this.total = 0; } //程序入口,进行基础判断,并调用相应场地的对应函数 start(str) { if (!str) { return; } else if (/^\s+$/.test(str)) { this.printAll(); } else if (!(this.reg.test(str))) { console.log('> ' + new Error('the booking is invalid!')); return; } else { let res = this.reg.exec(str), id = res[1], date = res[2], time = res[3], court = res[4], cancel = res[5]; //将输入字符串分割,提取信息 let courtObj = { 'A': this.A, 'B': this.B, 'C': this.C, 'D': this.D }; if (!(this.dateReg.test(date))) { //日期格式错误 console.log('> ' + new Error('the booking is invalid!')); return; } else { if (!(this.timeReg.test(time))) { //时间格式错误 console.log('> ' + new Error('the booking is invalid!')); return; } else { if (Number(RegExp.$1) >= Number(RegExp.$2)) { //订场起始时间晚于开始时间 console.log('> ' + new Error('the booking is invalid!')); return; } else { if (!cancel) { //如果没有取消标识符,调用相应的场地对象的order courtObj[court].order(id, date, time); } else { //如果有取消标识符,调用相应的场地对象的cancelOrder courtObj[court].cancelOrder(id, date, time); } } } } } } //所有信息的打印函数 printAll() { console.log('> 收入汇总'); console.log('> ---'); console.log('> 场地:A'); this.A.printItems(); console.log('>'); console.log('> 场地:B'); this.B.printItems(); console.log('>'); console.log('> 场地:C'); this.C.printItems(); console.log('>'); console.log('> 场地:D'); this.D.printItems(); console.log('> ---'); this.total = this.A.total + this.B.total + this.C.total + this.D.total; //在打印时再计算总收入 console.log('> 总计:' + this.total + '元'); } } //场地类,包含场地所有订单、收入等信息 class Court { constructor() { this.orders = []; this.total = 0; } //新增订单时调用的函数 order(id, date, time) { let newTime = time.split('~'), newStart = Number(newTime[0].split(":")[0]), newEnd = Number(newTime[1].split(":")[0]), weekDay = new Date(date).getDay(), price; for (let i = 0; i < this.orders.length; i++) { let nowOrder = this.orders[i]; let currentTime = nowOrder.time.split("~"), currentStart = Number(currentTime[0].split(":")[0]), currentEnd = Number(currentTime[1].split(":")[0]); //取得输入的起始和结束时间 if (date === nowOrder.date && ((newStart >= currentStart && newStart < currentEnd) || (newEnd > currentStart && newEnd <= currentEnd)) && !nowOrder.cancel) { console.log('> ' + new Error('the booking conflicts with existing bookings!')); return; } } let timeSlice = countTimeSlice(newStart, newEnd); let [long1 = 0, long2 = 0, long3 = 0, long4 = 0] = timeSlice; //分别计算输入的时间分别在4个时间段内的长度 //计算新订单所带来的收入 if (weekDay > 0 && weekDay < 6) { price = 30 * long1 + 50 * long2 + 80 * long3 + 60 * long4; } else { price = 40 * long1 + 50 * long2 + (long3 + long4) * 60; } this.total += price; //每次有新订单则更新场地自己的总收入 this.orders.push(new Order(id, date, time, price)); console.log('> Success: the booking is accepted!'); } //取消订单时调用的函数 cancelOrder(id, date, time) { let i = 0; while (this.orders[i]) { let currentOrder = this.orders[i]; let previousPrice = currentOrder.price; if (currentOrder.id === id && currentOrder.time === time && currentOrder.date === date && currentOrder.cancel === false) { let weekDay = new Date(date).getDay(); //每次有订单取消则更新场地自己的总收入 if (weekDay > 0 && weekDay < 6) { currentOrder.price *= 0.5; this.total -= previousPrice * 0.5; } else { currentOrder.price *= 0.25; this.total -= previousPrice * 0.75; } currentOrder.cancel = true; console.log('> Success: the booking is accepted!'); return; } i++; } console.log('> ' + new Error('the booking being cancelled does not exist!')); return; } //各场地的打印函数 printItems() { this.orders.sort(compareFn); let outputStr; for (let i = 0; i < this.orders.length; i++) { let now = this.orders[i]; if (!now.cancel) { outputStr = '>' + now.date + ' ' + now.time + ' ' + now.price + '元'; } else { outputStr = '>' + now.date + ' ' + now.time + ' 违约金 ' + now.price + '元'; } console.log(outputStr); } console.log('> 小计:' + this.total + '元'); } } //订单类,包含订单的用户id、日期、时间、收入以及是否取消等信息 class Order { constructor(id, date, time, price) { this.id = id; this.date = date; this.time = time; this.cancel = false; this.price = price; } } //时间段判断函数 function countTimeSlice(start, end) { let timeLong = end - start, long1 = 0, long2 = 0, long3 = 0, long4 = 0; if (end <= 12) { long1 = timeLong; } else if (end <= 18) { if (start >= 12) { long2 = timeLong; } else { long1 = 12 - start; long2 = end - 12; } } else if (end <= 20) { if (start >= 18) { long3 = timeLong; } else if (start <= 12) { long2 = 18 - start; long3 = end - 18; } else { long1 = 12 - start; long2 = 6; long3 = end - 18; } } else { if (start >= 20) { long4 = timeLong; } else if (start >= 18) { long3 = 20 - start; long4 = end - 20; } else if (start >= 12) { long2 = 18 - start; long3 = 2; long4 = end - 20; } else { long1 = 12 - start; long2 = 6; long3 = 2; long4 = end - 20; } } return [long1, long2, long3, long4]; } //打印前对所有订单排序时调用的比较函数 function compareFn(a, b) { //先按日期排序再按时间排序 let dateA = new Date(a.date).getTime(); let dateB = new Date(b.date).getTime(); if (dateA !== dateB) { //以起始时间排序 let timeA = a.time.split('~'), startA = Number(timeA[0].split(":")[0]), timeB = b.time.split('~'), startB = Number(timeB[0].split(":")[0]); return startA - startB; } else { return dateA - dateB; } } let obj = new Program(); //监听输入并启动程序 let readline = require('readline'), read = readline.createInterface({ input: process.stdin, output: process.stdout }); read.on('line', obj.start.bind(obj)); })();
点赞
回复
分享
发布于 2017-09-12 17:11
努力给自己一个offer
华南理工大学 前端工程师
前端的,昨天已经交了,不知道其他岗位一不一样
点赞
回复
分享
发布于 2017-09-11 11:42
牛客1100750号
西北工业大学
大佬分享下
点赞
回复
分享
发布于 2017-09-11 09:38
一只小脑腐
한국외국어대학교 Java
求分享😂
点赞
回复
分享
发布于 2017-09-11 09:10
蓝色水晶
楼主
西安电子科技大学
恩恩,能不能给我指导一下
点赞
回复
分享
发布于 2017-09-11 09:07
pasky
中国科学院大学 Java
是羽毛球馆的么 刚提交。。。
点赞
回复
分享
发布于 2017-09-11 08:30
暂无评论,快来抢首评~
相关推荐
11-11 14:16
后端工程师
腾讯内推腾讯面经
腾讯内推来啦~ 热乎乎的内推码:EUTPZZRV 在腾讯,你将有机会参与推动科技进步,构建未来的数字世界,为用户带来前所未有的体验。 分享一些面经: 第一轮技术面 闭包作用及实际应用场景 HTTP/1.1、HTTP/2、HTTP/3的核心差异 实现红绿灯控制效果(异步时序逻辑) React Hooks的设计动机与类组件对比 浏览器事件代理原理及实际应用 手写Promise核心逻辑(包含resolve/reject) 数组去重与高频字符统计算法 Web安全防护措施(XSS、CSRF) 浏览器渲染流程与重排/重绘优化 跨域解决方案(JSONP、CORS、代理) 第二轮技术面 低代码平台技术...
点赞
评论
收藏
分享
11-11 18:03
上海韬放电子科技有限公司_技术总监
十大PCB设计外包公司推荐
PCB设计外包公司主要分布在深圳、广州、上海、东莞等地区;在这里我推荐十家PCB设计外包公司,分布在东西南北多个地方,你可以 就近选择 ; 这些公司都是经过实际验证的,在百度搜索公司名可找到公司官网 (排序不分先后,具体选择需结合项目需求) 1、上海韬放电子科技有限公司 公司成立于2019年,注册资金100万,员工15人; 主营业务:电子产品设计、硬件电路设计、电路板设计、PCB设计、贴片加工一站式服务; 特点:经验丰富,快速高效,服务响应速度快; 2、深圳市凡亿技术开发有限公司 公司成立于2013年,注册资金:500万,员工人数不详; 主营业务:PCB设计 、PCB外包 、PCB打样 、PC...
点赞
评论
收藏
分享
10-30 16:31
重庆大学 Java
27找日常实习
投了3天,沟通160多个,一个面试没有,这正常吗
代码飞升:
你说你善于学习,大家都会说。你说你是985,985会替你表达一切
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
10-04 05:12
为啥0面试啊
瑞雪兆丰年_:
可以贴个超级大的校徽,以防HR眼拙
点赞
评论
收藏
分享
11-12 11:39
嘉士伯_供应链管培生(准入职员工)
嘉士伯内推,嘉士伯内推码
嘉士伯 工程设备管理 一面面经岗位:供应链管培生(工程设备管理)时间线:8.26投递、9.2一面一、自我介绍二、面试问题一面是AI面试,大概有下面这些问题1. 遇到的挫折2. 如何解决、细节3. 学习最困难的技能、课程4. 如何解决5. 选择非一线城市6. 为什么7. 岗位匹配度8. 为什么感受:第一次AI面试,感觉有点奇怪的⏰嘉士伯中国2026年校招9.3启动【公司介绍】嘉士伯(Carlsberg)是全球领先的啤酒集团之一,世界第四大啤酒集团,世界最知名国际品牌之一【岗位包括】综合管理培训生、销售专才、供应链管培生等【工作地点】北京、广州、佛山、惠州、东莞、厦门、南京、常州、郑州、重庆、宜宾...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
拒了9个offer最终留米,我秋招到底获得了什么?
7741
2
...
在大厂实习被辞了......
5835
3
...
美团java日常实习
3870
4
...
【百日刷题活动】校内团战刷题,抱走牛客娘周边
3762
5
...
离职前mt给我留的一句话
3693
6
...
我为什么要两次放弃年终奖
3659
7
...
数字马力 二面
2778
8
...
在公司实习时如何写笔记?
2085
9
...
秋招最没用的建议就是劝退别人转这转那的
1790
10
...
现在还找不到日常实习的真心可以停止了。信我的兄弟们
1728
创作者周榜
更多
正在热议
更多
#
第一次找实习,我建议__
#
17281次浏览
238人参与
#
面对职场PUA,是忍还是怼?
#
22842次浏览
93人参与
#
从mentor身上学到了__
#
15603次浏览
258人参与
#
你认为工作的意义是什么
#
201193次浏览
1266人参与
#
什么样的公司千万别去
#
14264次浏览
109人参与
#
找工作时遇到的神仙HR
#
1036686次浏览
5585人参与
#
外出实习被同学举报
#
2543次浏览
29人参与
#
你怎么评价今年的春招?
#
141245次浏览
1384人参与
#
你上一次加班是什么时候?
#
115291次浏览
699人参与
#
打工人的至爽时刻or至暗时刻
#
41114次浏览
221人参与
#
AI了,我在打一种很新的工
#
112550次浏览
1272人参与
#
秋招暂停,我将对以下公司做出处罚__
#
27964次浏览
126人参与
#
你的秋招第一面感觉怎么样
#
127658次浏览
795人参与
#
如果今天是你的last day,你会怎么度过?
#
46750次浏览
294人参与
#
秋招我要惩罚这些公司
#
2179次浏览
22人参与
#
你听到的“最没用”的秋招建议
#
19158次浏览
219人参与
#
字节出了豆包coding模型
#
2135次浏览
22人参与
#
韶音科技求职进展汇总
#
59183次浏览
503人参与
#
2025秋招体验点评
#
44936次浏览
459人参与
#
你喜欢工作还是上学
#
81309次浏览
869人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务