第4章 字符串与凶手
下一刻,杨成出现在了一个椭圆形的办公室中。
他西装笔挺,打着潇洒的领带,像极了某行业的成功人士或精英。
不过,墙壁上挂着的一幅米字国旗表明了他现在所处的地理位置,他是以“约翰牛”的身份出现的。
打量着四周,杨成发现了很多书籍和档案文件。
我扮演的这厮到底是干嘛的?
不过,这疑问并不妨碍杨成第一时间发现办公桌上的一台台式电脑。
他就如同发现了外星人一般惊喜。
“让我看看里面究竟有些什么好东西?”
杨成打开电脑,期望能从里面找到例如小电影般的东东。
桌面上排列着很多花花绿绿的图标。
杨成甚至还发现了一款大型的单机游戏——“XX召唤”。
“真是酷毙了!”
他满怀期待地双击图标,期望着在里面大杀四方。
毕竟完成任务是其次的,享受生活才是NumberOne。
令人失望的是,电脑毫无反应。
就如同死机了一般陷入沉寂...
“欧!我早该想到!”
杨成以手掩面。
这关卡中的虚拟物品,不重要的部分当然不会做得太真实,把宝贵的资源浪费在无关紧要的末节上,这是任何一个游戏运营所无法忍受的。
就在这时,办公室的门被敲响了,听起来有些急切。
“请进”,杨成一听就知道任务来了。
门被推开,走进来一位身穿警官制服的中年肥胖男子,他的眼神中充满了敬意。
“你好,我是苏格兰场的警官麦克阿瑟。”
“我们很早就听闻您在信息学方面的非凡造诣,恳请您协助我们调查一起案件”。
警官麦克阿瑟开门见山地说道。
“喔,愿闻其详”。
杨成很爽快地答应了。
听起来事情有些猎奇。
“事情是这样的”。
“有一位关键的目击证人被谋杀了,他在临死前想说出凶手的姓名,但声音很微弱又断断续续的,难以分辨。”
“我们获取了他的录音,希望能在您这里得到帮助,看怎么找出凶手”。
杨成表现出一副饶有兴趣的模样。
“嗯,你们可有嫌疑人名单?”
“有的,我们把行凶者锁定在了四个人之中,但又不确定到底哪个人才是真凶”。
麦克阿瑟递过来一份文件,上面有四个英文名字:
Bernard Deltheil
Peter Gone
Peter Reeves
Roland Scorsini
“能先听听这段录音吗?”
杨成提出了要求。
光凭几个英文姓名,恐怕大侦探福尔摩斯也查不出个所以然来。
麦克阿瑟掏出一支录音笔,摁下上面的按钮。
一个细若游丝的声音传了出来。
“p~t~g”。
这声音真是让人毛骨悚然,犹如地狱之声。
证人在最后时刻说了五个字母,其中还有2个字母无法分辨。
杨成当然不认为字符串的长度就意味着名字的长度,因为他有可能在说出凶手完整名字前就咽气了。
“好的,请稍等”。
杨成几乎可以肯定是哪个人,但因为游戏任务规则,他不能直接说出答案,而是得用程序员的方式来解决——敲代码。
他在电脑上打开一个编辑器,建立了一段脚本,然后开始编写代码。
对于任何的字符串匹配,是傻乎乎地用逻辑+循环,还是用强大而且简洁的正则表达式,我想大部分程序员都会倾向于后者。
杨成对于这个问题很有自信,一小段正则验证便足矣。
正则表达式的性能可能会略低,但它的确很方便啊。
对于这个凶手名称匹配来讲,它是不区分大小写的,所以得加“i”参数,以表示大小写不敏感。
(insensitive)
杨成很轻易地完成了这次匹配,甚至用了不到100个字符,假如去掉空格、括号和分号,代码甚至会更短。
正则就是爽!
然而,值得注意的地方,因为正则表达式趋向于极致的简洁,它的所有部分都被紧密地排列在一起。
在早期的JavaScript中,不支持正则的注释与分段,所以很长的表达式很容易让人费解,增加阅读困难。
对待比较复杂的业务逻辑,最好是拆分成几个短正则,分别验证,这样维护和调试起来就更方便。
他深吸一口气,将代码和运行结果保存好。
“警官,我想我已经找出凶手了”。
杨成脸上带着神秘的微笑。
“哦?是嘛!快讲给我听听!”
麦克阿瑟按捺不住地想赶快知道结果。
杨成拿出一支签字笔,在嫌犯名单的第二个“Peter Gone”上面划了个圈圈,然后递给他。
“噢,真是太感谢您了!”
麦克阿瑟伸出手,紧紧地握了握杨成的手。
话说完,警官腆着个大肚子,晃悠悠地挥手告别。
看着麦克阿瑟走出门外,杨成后仰在皮沙发上,舒服地把双手交叉放在后脑勺。
“叮!”
系统声音及时地响起来。
“恭喜玩家您完成了找出凶手的任务!”
“先前积分17分”。
“使用正则表达式匹配字符串奖励2分”。
“代码量在100个字符以内奖励1分”。
“当前积分20分,击败了全球13%的玩家”。
“不错”,杨成拍了拍手。
这个积分系统还考虑到了代码量问题,可以说是比较完善。
“您要继续下面的挑战嘛?”
“不不不”,杨成摆摆手。
“让我先在这舒适的办公室和皮沙发上,享受一段快乐的午休时间”。
“有什么需要帮忙的嘛?”
这系统则展现出了人性化的一面。
“首先,你看我这身装扮,肯定不适合午睡”。
杨成努努嘴。
“给我来一身睡觉三件套,睡衣,睡裤,还有睡帽”。
“我还需要一个超大的豪华型,欧式风格大床”。
“恒温的中央空调”。
“一个睡觉醒来可以随时看到加勒比海风景的海景房间”。
“嗯,就这些了”。
“亲爱的系统,你能办到嘛?”
杨成表示怀疑。
“能”,系统肯定地说道。
“不过我得先读取一些配置文件,这得花上点时间”。
“很好!去吧,我的皮卡丘!”
杨成决定了以后不叫“系统”了,还是“皮卡丘”这个词儿比较带劲。
大概过了半分钟,杨成感觉自己身形一震,很快发生了空间移动。
温暖的海风吹拂在他的脸上。
这里四季如春,拥有他刚才所想要的一切。
穿着睡衣、睡帽、睡裤,他傻呆呆地看着窗外的风光。
“我亏大了”,杨成却有些沮丧。
“我应该还要求选50个加勒比的绝色佳丽来服侍我的”。
“喂,皮卡丘,能帮我搞到手嘛?”
系统那边却是毫无反应,似乎厌倦了杨成的贪得无厌。
“喂,皮卡丘?系统?”
杨成不死心。
“好吧”。
杨成两手一摊,表示放弃。
然后,他两眼一闭,倒在了豪华大床上。
在游戏里面,时间会过得非常快,尤其是当你处于挂机、休眠或者娱乐状态的时候。
有可能在游戏中呼呼大睡了8个小时,而外面的世界才过去几十分钟。
(zzz...)