陳凱

說到學習二進制,難免要和“基數”、“權重”這樣的抽象概念,或是和一堆枯燥的數字符號打交道,本文介紹兩款小游戲,希望學習者能夠在直觀、形象的互動中逐漸揭開二進制編碼的奧秘。
二進制拼圖
剪若干張矩形的紙片,紙片的寬度和長度的比例為1:1.414,暫且把這樣的形狀稱為A形拼板,然后在白紙上由大到小畫出幾個空白框(如圖1),不同大小的框的邊長比例也是1:1.414,最小的空白框的形狀與A形拼板一樣。游戲規則很簡單:任意取出一些A形拼板,嘗試將這些拼板填滿幾個空白框,注意填完后圖形要完整并且拼板不能有多余的。假設由大到小預先設置A、B、C、D共4個框,經過實驗可發現,如果有10塊拼板,則恰好可以填滿A和C(如圖2);如果是7塊拼板,則可以填滿B、C和D。
如果把所填滿的框標為1,把空白的框標為0,那么就可以看出,紙片的數量正好對應由框所表示的二進制編碼,10張紙片是1010,而7張紙片是0111。很容易看出,之所以有這樣的效果,其實與二進制的權重有關。細心的讀者可能會發現,實際上并不需要很費心去量尺寸,直接拿標準的A4或A3紙張反復對折,按折痕剪開得到的矩形,其比例正是1:1.414。
二進制牌
找六種不同顏色的“牌”,如紅色、黃色、藍色、綠色、白色、黑色,用現成的小塊積木、多米諾骨牌或是用紙板涂上顏色都可以,記住以下規則:①每看到兩個紅色,則替換成一個黃色;②每看到一個黃色、一個白色,則替換成一個黃色、一個白色、一個藍色;③每看到一個黃色、一個紅色、一個白色,則替換成一個紅色、一個白色、一個綠色;④每看到一個黃色,則替換成一個紅色;⑤每看到一個黑色、一個紅色、一個白色,則替換成一個綠色。
牌的初始狀態,都是由一塊黑色開始,然后放若干塊紅色,最后由一塊白色結束。然后按規則中的順序,從第①條替換規則依次做到第⑤條,結束后再重頭開始。那么,這些規則究竟有什么用處呢?不妨用“黑紅紅紅紅紅紅白”的初始狀態來試一下。第一步:每看到兩個紅色,則替換成一個黃色,則初始的狀態變為“黑黃黃黃白”;第二步:每看到一個黃色、一個白色,則替換成黃、白、藍,于是狀態再變為“黑黃黃黃白藍”;第三步:黃、紅、白變成紅、白、綠,由于先前的狀態中找不到黃、紅、白,于是跳過;第四步:每看到一個黃色,則變成一個紅色,于是狀態變為“黑紅紅紅白藍”;第五步:黑、紅、白變成綠色,由于先前的狀態中找不到黑、紅、白,于是跳過;第六步:重新匹配第①條規則,兩個紅色變一個黃色,于是狀態變為“黑黃紅白藍”;第七步:黃、白變成黃、白、藍,由于先前的狀態中找不到黃、白,于是跳過;第八步:黃、紅、白變成紅、白、綠,于是狀態變為“黑紅白綠藍”;第九步:每看到一個黃色,則替換成一個紅色,由于先前的狀態中找不到黃色,于是跳過;第十步:黑、紅、白變成綠色,于是狀態變為“綠綠藍”,由于再也沒有可替換的可能了,于是替換就在這里停止。
若將綠看成數字“1”,而將藍看成數字“0”,那么得到的結果就是110。到這里大家應該可以猜出來了,上述的替換過程,其實是將6張紅色的牌,變為6的二進制數。同樣的,如果初始狀態是“黑紅紅紅紅紅紅紅紅紅紅白”,那么得到的結果是“綠藍綠藍”,即1010,大家可以自己試一下,即便手邊沒有任何可以用的材料,這個游戲在記事本中,用“替換—全部替換”的功能,也是可以實現的。大家可以思考一下,這套規則的原理究竟是什么?