# 我是一个游戏程序员,我困在了一趟公交车的循环里
大家好,我是山月,一个做游戏的。
今天我乘坐 45 路公交车,前往中开屯面见我的投资人。
你们知道,程序员是很节俭的,即便要见投资人这样的大事,即便快迟到了,习惯上也不会打车。
你们也知道,程序员一般都很累,我在公交车上睡着了。
我一醒来,晃了晃神,欣赏甄林河沿岸的风景,砰,爆炸了。又醒来,爆炸。再醒来,又爆炸了。
即便醒来,痛苦的感觉也如此真实,血肉模糊,剧痛难忍,头痛欲裂。每次都要恍惚三分钟,才有所好转。
我明白了,我困在了这趟公交车的循环里。那我应该如何解除循环呢,好像有点儿不对,哦对,是跳出循环。
我的脑海里默默浮现了以下代码:
for (;;) {
if (condition()) {
break
}
}
我现在的首要任务是找到这个 condition()
跳出循环。随着三次循环,我捋清了几件事:
- 公交爆炸时间在 13:45
- 每次爆炸伴随一首卡农
- 每次醒来时间都在提前
我又醒了,第四次醒来。佛陀割肉喂鹰、以身饲虎的场景浮现在我面前,我想跳出循环的关键大概是救下这车人。
公交在桥上爆炸,想必炸弹就在车上,那如何以最小时间复杂度找到炸弹呢?
目前公交车上总共十个人,三个人带有行李,那对带有行李的人挨个查检,时间复杂度 O(3)
。
function condition () {
// 找到带有炸弹的那个人
const passengerWithBomb = passengers
// 目前,有三个人携带行李
.filter(u => withBaggage())
// 对三个携带行李
.find(u => checkBomb(u))
...
}
大摇大摆去抢劫他们的包裹,强行拆开进行检查,是最有效的方式,反正他们在以后的循环里会忘了我。
主意已定,立即行动。
等一等,我是一个社恐,大庭广众之下抢别人包裹实在是干不来。那我为何不用眼睛盯着这三个人,观察爆炸点在哪里。
好主意,立即行动。
我站在三人中间,做出将要下车的态势。砰,卡农一响,爆炸紧随而来,我右侧脸颊刺骨的疼痛,右侧的胳膊已经没了直觉。
我又醒了,第五次醒来。我终于发现了凶手,那个拿着高压锅的大婶,简称锅婶。
新的问题又来了,那我应该如何禁止高压锅爆炸呢?