研究完《長安十二時辰》的望樓系統,我魔怔了
2019年08月15日09:56

  來源:涵的矽谷成長筆記

  豆瓣8.6分的《長安十二時辰》,害人不淺啊!

  是的,我花了一個月去追劇…

  空閑時間都沒了,真的。(才不是因為我懶)

  終於,好在這劇完結!

  作為劇粉 + 科技宅,今天,就給你深挖一下,這個劇里的通訊設定—— 望樓。

  它在第一集里就出現了。

  ‘這是望樓,今日於你有大用’

  這是檀棋交代張小敬的第一件事。

  其實就是通訊系統,在長安城里傳遞消息。

  城內每300步就有一個望樓,消息轉瞬,即可傳遍整個長安城。

  我一看到這兒,就興奮了!

  誒?

  這不就是一個,12位比特的通訊系統麼!

  你看,他有上下兩排,一共12格,每個格子可以點亮或熄滅。

  如果點亮是1,熄滅是0,那下面這個圖,12位就可以表示成:

  101011 101100。

  有了二進製碼之後,我們就可以編碼譯碼了,也就是把‘碼’和‘字’對應起來。

  現代計算機里,最基本的,就是用ASCII碼了,下面是一個對照表:可以表示字母,數字和符號。

  比如O就是0100 1111,M就是01001101, G就是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個信息元…

  估計接收方人腦的內存,是不夠的吧。

  而可憐的美術老師,也只能小心地寫上“內容精簡待商榷”…

  我真的要對這部良心劇豎大拇指,太強了。

  好了,以上就是望樓系統的全部了。

  最後,給你送上一個雞湯:

  無論遇到任何困難,都要迎難直上,不退。

關注我們Facebook專頁
    相關新聞
      更多瀏覽