4 字符串及隐藏的信息
Frank甩掉Notation警官后从农场后门离开,那里有一块很大的指示牌正朝着马路。多年来,Crannock夫妇一直使用这个指示牌来传播各种加了密的非法活动的消息。这些天,对于前来此处的罪犯而言,它堪称一个旅游景点——在这里,恶棍领着年轻的门徒,聚在一起追忆那些以“想当年……”开头的故事。
指示牌是一个AnyText模型。它可容纳三排字符数组,每排有12个空位,每个字母、空格或标点符号都需要占用一个空位。这意味着指示牌可以容下36个字符——足以显示一个完整的非法活动通知。每周一早晨,Crannock夫妇中的一人就会拖着一筐字母到指示牌前,然后逐个将对应的字符放入至数组的每个空位中。
Frank在当警察的第一个星期里,他的搭档就带他出去“检查指示牌”。当时的消息是“APPLE PICKER WANTED”和“GOT SLUGS?”,对Frank来说,这两则消息看起来貌似无关紧要。Crannock夫妇是在寻找一名采摘工来帮助采摘苹果,同时问是否有需要帮忙除去家里的鼻涕虫的。当Frank对他的搭档(一位从业20年的老警察)说这事时,她笑了。
“他们就是希望你这样理解,”Rossile警探解释道,“你得看懂其中暗含的意思,搞清楚罪犯想的是什么。在本案中,招聘苹果采摘工是指他们在试图招募一名小偷。其实就是愿意从手推车或类似车辆上偷苹果的人。”
“那鼻涕虫呢?”Frank问道。
“非法鼻涕虫赛跑,”她回答道,“他们每隔几个月都会在这里举行比赛。到时候你就会明白的。”
就这样,Frank学会了每周检查Crannock夫妇的指示牌,以便了解罪犯的世界。开始的几个月过后,他已经学会解读大部分密码了。农夫(farmhand)就是指追随者,通过增加修饰语可以表达需要什么样的追随者,例如很强壮、很残酷,或是具体的人数。印刷艺术家(print artist)是指造假者,而声乐艺术家(vocal artist)则是指骗子,诸如此类。一群小鸡(a flock of chickens)这个词语把Frank难住了好几天,最后,Rossile警探将此解读为:需要一群头脑简单四肢发达的热血青年到处乱跑并制造出噪声,以此来分散人们的注意力。
在当警察第一年快结束的时候,Frank已经成为解读指示牌的高手了。过去几年里,Frank通过指示牌解读罪犯消息时,唯一一次感到棘手的是他的王国都遭遇了巫师Exponentious发出的攻击那次。巫师Exponentious对王国中所有用数组设计的指示牌上都施了咒语。咒语改变了原有数组的索引方式,这导致Crannock夫人放置的字母位置都是错的。整整一个星期,Crannock夫妇家的指示牌都被认为是毫无用处的信息。
由于咒语仅仅是将原有的字母顺序打乱,而且AnyText模型是利用三个单独数组实现的,所以Frank可以逐一对每行进行破解。最终他解开了密码:招募防御巫师(DEFENSIVE WIZARDWANTED)。
但是,今天的消息显得太直白了。事实上,这是他在Crannock夫妇家的指示牌上见过的最狡猾的消息。指示牌上面写着“ARRAYCARTS FORRENT”和“NO QUESTIONS”。
警用算法导论:字符串
节选自Drecker教授讲义
数组不仅可以存储一列数字,它们还可用于存储由一列字母组成的字符串。许多编程语言也都是利用数组来实现字符串的存储的,数组中的每一位都可容纳一个字符,这个字符可以是字母、数字、符号或空格。与使用其他数据类型的数组一样,字符串中的某一个字符也可直接通过数组的索引来访问。
在你的警队生涯中,你会逐渐掌握使用数组来存储文字信息的方式。所有的标准警用表格都要求警官能在每页的顶部用一个32位的数组记录他们的姓名。通常一个月以后,你就已经用此方法填满400个这样的数组了。