終於,這劇今天完結.
作為劇粉 + 科技宅,我今天,就給你深挖一下這個劇裡的通訊設定—— 望樓。
它在第一集裡就出現了。
「這是望樓,今日於你有大用」
這是檀棋交代張小敬的第一件事。
其實就是通訊系統,在長安城裡傳遞消息。
城內每300步就有一個望樓,消息轉瞬,即可傳遍整個長安城。
我一看到這兒,就興奮了!
誒?這不就是一個,12位比特的通訊系統麼!
你看,他有上下兩排,一共12格,每個格子可以點亮或熄滅。如果點亮是1,熄滅是0,那下面這個圖,12位就可以表示成:
101011 101100
有了二進制碼之後,我們就可以編碼譯碼了,也就是把「碼」和「字」對應起來。
現代計算機裡,最基本的,就是用ASCII碼 了。
下面是一個對照表(可以表示字母,數字和符號):
比如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位完全足夠了。
當今計算機的漢字編碼,比較常用的,比如有Unicode,下面是一個對照表。
在我仔細研究《長安十二時辰》之後,我發現:劇中其實有大小兩種望樓!
一種是上面的小望樓,兩排12格那種,還有一種是3*3的9宮格大望樓。
誒?為什麼有兩套系統?
我個人猜測:這是通訊系統Infra 2.0版,工程師正在逐步遷移(Migration),還沒有完全結束,小的還沒有完全棄用(Deprecated),所以得兩套共存。
而且,兩套系統還可以對接。
我去,居然還做了向下兼容(Backward Compatibility)?
你可能會說,9宮格,那豈不是降低成9bit了?反而性能下降?
No No No,它其實四周還有8片花辮,可以分別收起和放出,這樣就多了8位。
加起來,就有9 + 8 = 17比特了。
哦對了,畢竟白天和晚上的需求不同,它還分為"日用"和"夜用"兩種模式。
長安百姓,真是夜裡也安心呢~
你可能會問:12bit已經夠用了,為啥要17bit呢?
除了可以傳遞更多內容以外,還有大用:
糾錯。你知道,信息傳遞很容易出錯——如果這12位裡,有一個地方壞了,比如燈不亮了,或者接收方看走眼了,這咋辦?
你看,這12個格子太難讀了,你得一個一個數,眼睛都要瞎了,隨便一抖,就錯了。
然而,改成9宮格之後,一眼就能看對並記住,用戶體驗直線上升,錯誤率下降。
當然,多出來的5個bit,還有更高級的用法。
這就是:計算機通訊裡,兩個經典手段:糾錯碼和冗餘。
先來看糾錯碼:
最簡單的方法,就是"奇偶校驗法",也就是你多傳1位,這位表示前面幾位裡面,應該有奇數還是偶數個1。
如果接收的時候,你發現,最後一位告訴你——前面應該有偶數個1,結果前面是奇數個1,那就說明這數據有問題了,你得讓對方再傳一遍。
如果,你有很多位可以用來糾錯,比如大望樓多出了5位,那就可以用更高級的方法了,比如
循環冗餘校驗法。這裡有點複雜,但說白了就是:信息位和糾錯位,兩組數,進行運算,如果得出的值不對,那就驗證失敗。
這玩意說深了就是研究生課程了,收。
除了糾錯碼,還有冗餘。
有冗餘,這本身就能糾錯。
比如,你規定:傳遞的一個數,必須所有數字,都是一樣的才有效。
那麼,當你收到了比如6668666,那你就知道:哦,那個8絕對打錯了,本來想說的應該是6666666。
你知道,咱們人的DNA就有非常大的冗餘,很多密碼子貌似沒啥信息,去掉了也完全沒影響。
這些"冗餘"密碼子的作用,一直有很多猜測,一種解釋就是:這是防止基因在自我複製時失誤,釀成大錯。
好了,以上都是我的腦洞。
在看了官方公佈的資料以後,證明我完全是想多了。
根據官微@北斗北工作室,小望樓這12個框,其實只能代表3位,十進制數…
每四個一組,分別代表百位,十位,個位,0~9分別有不同的圖案。
比如,下面這個就代表序號900:
當然了,阿拉伯數字這種標記法要到近代才被中國人熟練使用,所以當年使用的都是算籌表示法:
那麼900,其實就是:
在編碼之後,就可以翻譯了,過程也很簡單,就是查表。
靖安司官員們,有這麼一個袋子,作為密碼本。
而上面的900號,代表的就是"狼",你看就在這裡。
按照這個規律,其實能傳遞很多信息了。
比如「張小敬」就是這樣的:
怎麼樣,學會了嗎?
來來來,咱們做一下課後小練習。
練習題1:請翻譯下圖。
練習題2:請翻譯下圖。
練習題3:熟讀靖安司密碼本,並背誦全文。
(參考答案見文末)
以上,都是"靖安司公務員考試"送分題哦。
對了,別忘了還有:大望樓。
本質上也是編碼成十進制的3位數。
9宮格的空間,用來表示個位。
左邊的4個花瓣位,用來表示十位。
右邊的4個花瓣位,用來表示百位。
當然,什麼都不出現,就表示0。
那麼,下面這個,就表示的是701。
不過,我很快發現了這個大望樓系統的兩個Bug。
Bug-1:四宮格表示0~9我還能記住,可這九宮格,也太隨意了,編碼的人瘋了。Bug-2:為什麼左邊是高位起,右邊是低位?
反人性嗎?
難道不應該:左邊是百位嗎?
大望樓那邊,左邊的花瓣是十位,右邊是百位,這是要弄死我。
你看這個"狼",很容易讀成900啊,喂。
反正,這麼差的用戶體驗,一般人絕對懵了。
怪不得,只有我賓哥這種人肉計算機,才可以瞬間看懂。
這麼說來,望樓可以傳遞0到999,一共1000個子信息。
可以說,雖然是12位比特的承載量,而現有的望樓系統,只用了四分之一,有75%的冗餘量待開發,或者就是為了糾錯的故意留下的。
妙啊。
經過我再仔細研究,劇中還有另一種編碼方式:八卦法。
因為卦象是三行的嘛,這麼一看,我大概知道為啥劇組想用大望樓了。
傳輸的時候,要傳兩遍,分別組成上下兩組八卦。
整合以後,就是一個,額,現代計算機叫:Index(索引)。
譯碼時,用的則是開元20年,孫愐所修的音韻書籍《唐韻》,按照卷、韻、字,三個等級,依次索引。
可是,這部分似乎沒有在劇中用上?或者說用的不多?我咋沒發現呢。
莫非,這只是設想的一個方案,因為太複雜了,後來就沒用上,官方放出來裝x的?
厲害厲害厲害。
對了,上面這套編碼規範,可不是鬧著玩的,它被切切實實,用在了劇中拍出來的。
根據官微@北斗北工作室,劇中望樓每一個鏡頭都是對的。
比如:「張都尉為民捉狼。全城武侯、不良人隨時聽張都尉號令」
這句話,是這麼傳遞的。
先是跟電報一樣,人工對信息進行壓縮,並分割成最小信息元:
張(263)都尉(197)捉(134)狼(121) 全城(20) 武職(217) 聽令(152)
於是,信息就從原來的22個漢字,縮短為7組信息,只需變換七次。
按照每秒傳兩個,全部傳完只需3.5秒。
不過,如果遇到複雜信息,就有點蛋疼,比如下面這個。
一共48個信息元…
估計接收方人腦的內存,是不夠的吧。
而可憐的美術老師,也只能小心地寫上"內容精簡待商榷"……
我真的要對這部良心劇豎大拇指,太強了。
好了,以上就是望樓系統的全部了。
最後,給你送上一個雞湯:
無論遇到任何困難,都要迎難直上,不退。
「彩蛋」
其實,我還有一個腦洞(已經魔怔)。
這套系統的安全性其實不行,畢竟密碼本這種辦法,還是最簡單的加密手段。
一旦密碼本被賊人所用,安全性盡失,周全無望。(額,我怎麼開始了文言文)。
反正是傳數字嘛,那當年完全可以用現在流行的RSA加密了,也就是:設定一個很大的素數p和q,然後傳遞這個乘積,解密的時候,再做mod運算by (p-1)(q-1)……
閱讀更多 我所在的這個世界 的文章