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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

101011 101100 。

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

比如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位完全足够了 。

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

先来看

纠错码

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

那么900 , 其实就是:

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

练习题1: 请翻译下图 。

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

练习题2: 请翻译下图 。

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

反人性吗?

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

厉害厉害厉害 。

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

比如:

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

这句话 , 是这么传递的 。

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

一共48个信息元…

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]

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

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

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

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

----研究完《长安12时辰》的望楼系统 , 我魔怔了//----[ http://www.caoding.cn]


    推荐阅读