60

研究完《长安12时辰》的望楼系统,我魔怔了

 4 years ago
source link: https://www.tuicool.com/articles/EjI7biN
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

veeiAvB.gif

钛媒体注:本文来源于微信公众号 涵的硅谷成长笔记 (ID:HanGrowth),作者: Han涵,钛媒体经授权发布。

豆瓣8.6分的《长安12时辰》,害人不浅啊!

是的,我已经消失一个月了,就因为我去追剧了… 空闲时间都没了,真的。(才不是因为我懒)

RJzA3a3.jpg!web

终于,这剧今天完结,我也可以恢复更新了! 作为剧粉 + 科技宅,我今天,就给你深挖一下,这个剧里的通讯设定—— 望楼。

U3uqeiY.jpg!web

它在第一集里就出现了。 「这是望楼,今日于你有大用」

这是檀棋交代张小敬的第一件事。

faeuiy2.jpg!web

其实就是通讯系统,在长安城里传递消息。 城内每300步就有一个望楼,消息转瞬,即可传遍整个长安城。

y2EreqI.jpg!web

我一看到这儿,就兴奋了! 诶?

这不就是一个, 12位比特 的通讯系统么! 你看,他有上下两排,一共12格,每个格子可以点亮或熄灭。 如果点亮是1,熄灭是0,那下面这个图,12位就可以表示成:

101011 101100。

ueUZN3b.jpg!web

有了二进制码之后,我们就可以 编码译码 了,也就是把「码」和「字」对应起来。 现代计算机里,最基本的,就是用ASCII码了,下面是一个对照表:可以表示字母,数字和符号。

zE7NFfy.jpg!web

比如O就是0100 1111,M就是01001101, G就是0100 0111。 那么,李佳琦的口头禅,用二进制表示就是:0100 1111~ 01001101~ 0100 0111~

其实有12位bit已经很多了,上面的ASCII码,其实只要7位。(看上去是8位,但第一位都是0) 那么12位,其实可以表示2的12次方,也就是4096个汉字了。 按照咱中国1988年出版的《现代汉语常用字表》,常用汉字一共也就3500个,可以涵盖99.48%的日常所需,所以12位完全足够了。

3IvQVnf.jpg!web

当今计算机的汉字编码,比较常用的,比如有Unicode,下面是一个对照表。

y2IZ3iA.jpg!web

在我仔细研究《十二时辰》之后,我发现,剧中其实有大小两种望楼! 一种是上面的小望楼,两排12格那种,还有一种是3*3的9宫格大望楼。

2uEj6jA.jpg!web

诶?为什么有两套系统? 我个人猜测: 这是通讯系统 Infra 2.0版 ,工程师正在 逐步迁移(Migration) ,还没有完全结束,小的还没有 完全弃用(Deprecated) ,所以得两套共存。

6n2aii2.jpg!web

而且,两套系统还可以对接。

我去,居然还做了 向下兼容 (Backward Compatibility)。

你可能会说,9宫格,那岂不是降低成9bit了?反而性能下降? No No No,它其实四周还有8片花辫,可以分别收起和放出,这样就多了8位。

6RvYj2z.jpg!web

加起来, 就有9 + 8 = 17比特了

哦对了,毕竟白天和晚上的需求不同,它还 分为“日用”和“夜用” 两种模式。 长安百姓,真是夜里也安心呢~

7rMnQ3n.jpg!web

你可能会问,12bit已经够用了,为啥要17bit呢? 除了可以传递更多内容以外,还有大用: 纠错 。 你知道,信息传递很容易出错,如果这12位里,有一个地方坏了,比如灯不亮了,或者接收方看走眼了,这咋办。

UjaaumJ.jpg!web

你看,这12个格子太难读了,你得一个一个数,眼睛都要瞎了,随便一抖,就错了。 然而,改成9宫格之后,一眼就能看对并记住,用户体验直线上升,错误率下降。

IZBjMzI.jpg!web

当然,多出来的5个bit,还有更高级的用法。 这就是:计算机通讯里,两个经典手段:纠错码,和,冗余。

先来看 纠错码

mMJvUba.jpg!web

最简单的方法,就是“奇偶校验法”,也就是你多传1位,这位表示前面几位里面,应该有奇数还是偶数个1。 如果接收的时候,你发现,最后一位告诉你,前面应该有偶数个1,结果前面是奇数个1,那就说明这数据有问题了,你得让对方再传一遍。

j267by7.jpg!web

如果,你有很多位可以用来纠错,比如大望楼多出了5位,那就可以用更高级的方法了,比如 循环冗余校验法 。 这里有点复杂,但说白了就是,信息位和纠错位,两组数,进行运算,如果得出的值不对,那就验证失败。

B3um6n6.jpg!web

这玩意说深了就是研究生课程了,收。

除了纠错码,还有 冗余 。 有冗余,这本身就能纠错。 比如,你规定,传递的一个数,必须所有数字,都是一样的才有效。 那么,当你收到了比如6668666,那你就知道:哦,那个8绝对打错了,本来想说的应该是6666666。

Z7JVf2N.jpg!web

你知道,咱们人的DNA就有非常大的冗余,很多密码子貌似没啥信息,去掉了也完全没影响。 这些“冗余”密码子的作用,一直有很多猜测,一种解释就是:这是防止,基因在自我复制时失误,酿成大错。

b2QrAva.jpg!web

好了,以上都是我的 脑洞。   在看了官方公布的资料以后,证明我完全是想多了~

根据官微@北斗北工作室,小望楼这12个框,其实只能代表3位,十进制数…

YvURnmE.jpg!web

每四个一组,分别代表百位,十位,个位,0~9分别有不同的图案。

3EJvM3j.jpg!web

比如,下面这个就代表序号900。

RNNZbqE.jpg!web

当然了,阿拉伯数字这种标记法要到近代才被中国人熟练使用,所以当年使用的都是算筹表示法:

RrURBrm.jpg!web 那么900,其实就是:

iA3qyav.jpg!web

在编码之后,就可以翻译了,过程也很简单,就是查表。 靖安司官员们,有这么一个袋子,作为密码本。

f2eE7zb.jpg!web

eAZ3euB.jpg!web

ZzAzIre.jpg!web

而上面的900号,代表的就是“狼”,你看就在这里。

NBfYJra.jpg!web

按照这个规律,其实能传递很多信息了,比如「张小敬」就是这样的:

zuqQvye.jpg!web

怎么样,学会了吗? 来来来,咱们做一下 课后小练习 。 

练习题1: 请翻译下图。

biM7Zjv.jpg!web

练习题2: 请翻译下图。

YbmIvqr.jpg!web

练习题3:  熟读靖安司密码本, 并背诵全文   (参考答案见文末)

以上,都是“靖安司公务员考试”送分题哦。

对了,别忘了还有:大望楼。

iIFzM3z.jpg!web

本质上也是编码成十进制的3位数。 9宫格的空间,用来表示个位。

63InAjn.jpg!web

左边的4个花瓣位,用来表示十位。

2UZnUnB.jpg!web

右边的4个花瓣位,用来表示百位。

VFfy6fi.jpg!web 当然,什么都不出现,就表示0。 那么,下面这个,就表示的是701。 

ryemii7.jpg!web

不过,我很快发现了这个大望楼系统的两个Bug。

Bug-1: 四宫格表示0~9我还能记住,可这九宫格,也太随意了,编码的人疯了。

Bug-2: 为什么左边是高位起,右边是低位?

MjUzEvV.jpg!web

反人性吗?

难道不应该:左边是百位吗?

大望楼那边,左边的花瓣是十位,右边是百位,这是要弄死我。 你看这个“狼”,很容易读成900啊,喂。

uUb2y2F.jpg!web

反正,这么差的用户体验,一般人绝对懵了。 怪不得,只有我宾哥这种人肉计算机,才可以瞬间看懂。

BRf263E.jpg!web

这么说来,望楼可以传递0到999,一共1000个子信息。 可以说,虽然是12位比特的承载量,而现有的望楼系统,只用了四分之一,有75%的冗余量待开发,或者就是为了纠错的故意留下的。 妙啊。

BRnUvq7.jpg!web

经过我再仔细研究,剧中还有另一种编码方式:八卦法。

因为卦象是三行的嘛,这么一看,我大概知道为啥剧组想用大望楼了。

传输的时候,要传两遍,分别组成上下两组八卦。

YZnaUzm.jpg!web

整合以后,就是一个,额,现代计算机叫:Index(索引)。

ie6jyuf.jpg!web

译码时,用的则是开元20年,孙愐所修的音韵书籍《唐韵》,按照卷、韵、字,三个等级,依次索引。

IzMZre3.jpg!web

可是,这部分似乎没有在剧中用上?或者说用的不多?我咋没发现呢。 莫非,这只是设想的一个方案,因为太复杂了,后来就没用上,官方放出来装x的?

j6N7nmm.jpg!web

厉害厉害厉害。

jMzqMjq.gif

对了,上面这套编码规范,可不是闹着玩的,它被切切实实,用在了剧中拍出来的。 根据官微@北斗北工作室,剧中望楼每一个镜头都是对的。

i2uuaui.jpg!web

比如:

「张都尉为民捉狼。全城武侯、不良人随时听张都尉号令」

这句话,是这么传递的。

先是跟电报一样,人工对信息进行压缩,并分割成最小信息元:

张(263)都尉(197)捉(134)狼(121) 全城(20) 武职(217) 听令(152)

uu6Zref.jpg!web

于是,信息就从原来的22个汉字,缩短为7组信息,只需变换七次。

按照每秒传两个,全部传完只需3.5秒。

不过,如果遇到复杂信息,就有点蛋疼,比如下面这个。

NFNzMnm.jpg!web 一共48个信息元…

估计接收方人脑的内存,是不够的吧。 而可怜的美术老师,也只能小心地写上“内容精简待商榷”…

我真的要对这部良心剧竖大拇指,太强了。

6NZVvqY.jpg!web

好了,以上就是望楼系统的全部了。

最后,给你送上一个鸡汤:

无论遇到任何困难,都要迎难直上,不退。

m2m6Jnf.jpg!web

更多精彩内容,关注钛媒体微信号(ID:taimeiti),或者下载钛媒体App

NfANziy.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK