若要在四位元二進位遊戲中比較兩種方法,請在位值法(僅在出現 1 的位置加上 8、4、2 和 1)與由左至右倍增法(將累加總和設為 0,然後對每個位元將其替換為 total×2 加上該位元)之間擇一使用。兩種方法都會得出相同的十進位答案,因為二進位是一種以二為基數的位置計數系統,所以兩者的選擇取決於心智上的舒適度、抗錯能力,以及你能多快掃讀顯示的四個數字。在 Binary Decoder Game 中,五個固定的四位元題目分別是 0001、0011、0110、1010 和 1111,對應的十進位答案為 1、3、6、10 和 15。從左至右讀取時,每個位元的位置值會隨著你橫向讀取而加倍,這正是倍增法和位值法最終會收斂到同一個數字的原因。需要牢記的關鍵事實是:遊戲只接受最終的兩位數十進位答案;底層的轉換合約會另行驗證,因此只要你在按下 Enter 之前得出正確的整數,任何方法都有效。

how do i compare two approaches in four bit binary game
在四位元二進位遊戲中比較兩種方法

解碼四位元的兩種方法

每個四位元代碼都是由 {0, 1} 中選出的四個字元所組成的字串。遊戲會顯示這四個數字,並要求你給出一個介於 1 到 15 之間的單一整數。有兩種心智方法可以可靠地解開這個題目,而且你可以隨時在兩者之間切換,而不會改變答案。

位值(直行相加)法。在心裡將四個顯示位置由左至右分別標上 8、4、2 和 1。對於顯示為 1 的每個位置,將該直行的值加到一個累加總和上。任何顯示為 0 的位置則予以忽略。這個總和就是十進位答案。

由左至右倍增(累加器)法。將累加總和從 0 開始。讀取最左邊的位元,將總和加倍,再加上位元。對四個位置重複此步驟。當你讀完第四個位元時,累加總和就是十進位答案。這與 MDN 文件中記載的 parseInt 函式在處理一串 0 和 1 且基數為二時所使用的演算法相同。

這兩種方法的數學等價性,直接來自於以二為基數的位置計數系統之定義。NIST IR 8354 關於數位資料表示的文件 將二進位數字描述為以二為基底的位置值,而這正是兩種方法所利用的相同特性。

使用倍增法逐步解析 1010

為了讓例子更具體,我們以 Binary Decoder Game 中的第四個固定題目、代碼 1010 為例。該產品合約規定此代碼等於十進位值 10。以下是倍增法的步驟,這也是解碼器在驗證你的答案時實際執行的演算法。

步驟 1 —— 從 0 開始。步驟 2 —— 讀取最左邊的 1:total = 0 × 2 + 1 = 1。步驟 3 —— 讀取下一個 0:total = 1 × 2 + 0 = 2。步驟 4 —— 讀取下一個 1:total = 2 × 2 + 1 = 5。步驟 5 —— 讀取最後一個 0:total = 5 × 2 + 0 = 10。

累加總和最終為 10,與已公布的十進位值一致。如果你對同一個代碼使用位值法,則只會加上有 1 的直行:8 直行與 2 直行,得到 8 + 2 = 10。兩種方法都會得出相同的整數,因為以二為基底保證了這種等價性。

兩種方法並排比較

屬性位值法(8-4-2-1)由左至右倍增法
心智設定為每個直行標上 8、4、2、1將總和初始化為 0
每個位元的動作若位元為 1 則加上直行值,若為 0 則忽略將總和替換為 total×2 + bit
0001 的結果0 + 0 + 0 + 1 = 10 → 0 → 0 → 0 → 1
0011 的結果0 + 0 + 2 + 1 = 30 → 0 → 0 → 1 → 3
0110 的結果0 + 4 + 2 + 0 = 60 → 0 → 1 → 3 → 6
1010 的結果8 + 0 + 2 + 0 = 100 → 1 → 2 → 5 → 10
1111 的結果8 + 4 + 2 + 1 = 150 → 1 → 3 → 7 → 15
最適用情境0 多 1 少的情況1 多,或依序讀取的情況
出錯風險漏看某個直行或記錯位置值搞混正在累加的總和

在 Binary Decoder Game 中,這兩種方法對每個四位元代碼都會給出相同的十進位值。五個固定回合的結果為 0001 等於 1、0011 等於 3、0110 等於 6、1010 等於 10、1111 等於 15,且無論使用哪種方法都能毫無歧義地得出這些答案。

如何在 Binary Decoder Game 中嘗試兩種方法

  1. 開啟 Binary Decoder Game,讀取螢幕上顯示的四個二進位數字。
  2. 在兩種方法中選擇一種——位值法(8-4-2-1)或由左至右倍增法——並將其套用於顯示的代碼。
  3. 使用鍵盤將得出的整數輸入十進位欄位。由於每個題目的答案都落在 0 到 15 之間,因此答案欄位最多只接受兩位數。
  4. 如果輸入錯誤,請按 Backspace 或 Delete 來刪除最後一個數字。觸控裝置的使用者可以改用十個數字按鈕和「Submit decimal」按鈕。
  5. 按 Enter 提交。答對可獲得 200 分,並立即進入下一個代碼。
  6. 對五個固定代碼(0001、0011、0110、1010、1111)重複此過程。完整無失分的回合結束時將恰好獲得 1,000 分。
  7. 完成一回合後,重新開始並在同樣的五個代碼上嘗試第二種方法。比較兩種方法之間的速度和錯誤率。

何時會覺得某種方法較快

位值法在 1 很少的代碼上通常會感覺較快,例如 0001(僅 1 直行有值)或 1010(8 直行與 2 直行有值)。你只需加上有效直行的值並忽略其餘的部分,這使得心算過程非常簡短。

倍增法則在有多個 1 的代碼上通常會感覺較快,例如 0011、0110 或 1111。你不必分別加上四個不同的值,而是依序執行四次相同的「加倍再加位元」操作。一旦倍增的節奏變得熟練,即使是密集的代碼也能在幾乎不需要有意識計算的情況下處理完畢。

兩種方法也都避免了將像 2 這樣的數字視為有效輸入的陷阱;二進位只接受 0 和 1,這一點在 MDN 的 parseInt 基數文件中也有確認。解碼器只接受一串非空白的 0 與 1,因此驗證過程完全不必擔心無效的二進位數字混雜其中。

為何驗證機制能接受任一種方法

解碼器會驗證一個非空白的全位元字串,然後以 value = value×2 + bit 由左至右折疊,這正是倍增法的程式碼寫法。這代表,即使你在腦中使用了位值法,只要你提交了正確的兩位數十進位答案,驗證機制仍會接受你的提交,因為這兩種方法對每個代碼都會產生相同的整數。

此轉換合約可從外部進行檢查。共有八個外部的黃金測試案例涵蓋了字串 0、1、10、11、100、1010、1111 和 10000,其對應的十進位結果分別為 0、1、2、3、4、10、15 和 16。像 102 這樣的無效字串以及空字串會回傳一個無效的數值結果,而不是默默地解碼前綴字元——這與 parseInt 在基數為二時所記錄的行為相同。

對於想在類似益智情境中比較兩種方法的讀者,如何在魔方陣益智中運用撞可比較兩種方法 這篇指南會在不同的遊戲中介紹相同類型的權衡分析。四位元二進位遊戲中的代碼是隨機的嗎? 這篇文章也確認了 Binary Decoder Game 中的五個代碼是固定的而非隨機的,這使得在相同的回合上比較各種方法變得有意義。

在回合中途切換方法時的常見陷阱

在同一個五回合的過程中混用兩種方法,是最常見的可挽回錯誤來源。第一次提交錯誤會清空輸入框,但會保留同一個代碼顯示在畫面上;只有發生第二次錯誤時回合才會結束,因此中途切換方法可能會讓你失去乾淨拿下 1,000 分的機會。

有三種特定的失誤模式最為常見。忘記最左邊的位元代表位置值 8(而不是 4 或 2)是一種位值法的疏失,會讓答案產生兩倍的偏差。在位元之間帶著一個過時的累加總和繼續計算,則是一種倍增法的疏失,會讓每個陳舊的位元都使結果偏差 1。將像 16 或 20 這樣的答案視為有效,則是一種輸入上的疏失;由於每個題目的答案都落在 0 到 15 之間,遊戲最多只接受兩位數,因此三位數的輸入無法推進該回合。

若要乾淨地比較這兩種方法,請先用位值法完成一次完整的回合,然後重新開始並用倍增法完成第二次完整的回合。五個固定代碼在每次回合中都相同,因此唯一的變數就是你選擇的心智方法。重新開始會將遊戲帶回到 0001、清空答案欄、分數歸零、錯誤數歸零,這讓乾淨地測試第二種方法的比較變得簡單明瞭。

對於同樣獎勵一致作法的相關數字遊戲,Number Sequence Quiz 工具可練習五種不同的算術規律,而Math Maze 則在一個緊湊的格子上運用四則基本運算。兩者皆不依賴二進位,但都同樣獎勵選定一種方法並貫徹到底的紀律。