「硬核騎士與無賴」謎題是一種布林邏輯挑戰,共有兩位、三位或四位具名的發言者,每人各做出一句陳述,解題者必須將每位發言者標記為說實話的騎士或說謊的無賴,使每項聲明的真假值與發言者的身分一致。這類謎題的難度來自層層互相指涉的連鎖:一句陳述可能提及好幾個人,而限制條件會在所有發言者之間連環傳遞,直到只剩下唯一一種角色配置能夠成立。在 騎士與無賴 謎題遊戲中,這個概念被收錄在五個由產品本身撰寫的固定關卡中,分別採用兩人、三人或四人對局,每一關皆已驗證在開發階段所檢查的 4、8 或 16 種布林組合中,僅有剛好一種一致的角色配置能通過。每一個關卡若提交完全正確的答案,剛好可獲得 200 分;五個關卡全數破關,該輪成績即為 1,000 分,也是該路線所能達到的最高分。其中最難的關卡是四人對局,因為每新增一名發言者,搜尋空間就會倍增,需要手動追蹤的交叉指涉也跟著放大。

hard knights and knaves puzzles
硬核騎士與無賴謎題:解開五題拿 1,000 分

為何這些謎題感覺很難

只有一位發言者的標準說實話者謎題,做起來幾乎像兒戲:一句不可能為真的陳述,就排除了騎士身分;一句不可能為假的陳述,就排除了無賴身分,角色分配自然水到渠成。一旦第二位發言者加入,而且其中一人可以用名字指涉另一人,騎士與無賴謎題就會立刻變難。解題者突然得在發言者 B 還沒被標記之前,先預測 B 的角色,接著再用 B 自己那句陳述的真假值來驗證這個預測。當發言者增加到第三人,任何像是「說出 X 的那位」或「我們之中剛好只有一位」這類說法,表現就會像一組小型 NAND 閘電路。再加入第四位發言者時,搜尋空間又會倍增,而畫面上顯示的文字中,交叉指涉的數量會快速膨脹,使得「把每句陳述讀兩遍」從一個禮貌性的建議,變成真正省時的關鍵動作。

另一個難度來源,在於連接詞的精確性。「剛好一位」、「兩者皆是」、「至少一位」、「同類型」,彼此並不能互換。一句寫著「我們之中至少有一位是無賴」的陳述,只要配置中含有一位無賴就為真,只有在所有發言者都是騎士時才為假;而「我們之中剛好只有一位是無賴」為真的情況,範圍則窄得多。把這些詞彙當成可以互換的近義詞,是看起來合理的候選解在「檢查指派」回報矛盾時失敗的最常見原因。

五題固定謎題是如何建構的

騎士與無賴遊戲在每個關卡中,為每位發言者儲存一個布林運算式。當候選指派被提交時,頁面會以該指派評估每位發言者的運算式,只有在「所有發言者索引同時滿足:指派的騎士值等於該運算式所回傳的真假值」時,才接受答案。這個規則是普通的布林邏輯,而不是對一張答案表進行不透明查詢,因此任何完整的指派都可以機械化地檢查,任何不完整的指派,只要檢查那個已經有值的運算式就能被排除。

在開發階段,每一個關卡都會進行完整列舉:兩人對局檢查 4 種布林指派,三人對局檢查 8 種,四人對局檢查 16 種。產品測試要求剛好只有一種指派能使所有陳述一致,而且該指派必須與產品所揭露的答案關卡相符。因為頁面每次都儲存相同的五個關卡,從不隨機、不下載、也不生成新內容,所以在乾淨重啟後,一場拿到 1,000 分的完整遊戲紀錄可以重現到逐位元組一致。

每一輪會顯示兩位、三位或四位具名的發言者。這五題以固定順序出貨,每次重新開始都會依照相同順序還原,這代表曾經破關過一次的玩家會認得題目,因此本作鼓勵將這場挑戰視為休閒娛樂,而非任何認知能力的衡量。

逐步解開硬核騎士與無賴謎題

  1. 在指派任何角色之前,先把畫面上顯示的每句陳述讀一遍,因為後面的說法可能引用前面出現過的名字,漏掉一次指涉就會讓整條邏輯鏈脫軌。
  2. 釐清連接詞的精確意涵。「剛好一位」、「兩者皆是」、「至少一位」、「同類型」各自定義出一個特定的布林條件,若把它們當成同義詞,會把原本有效的候選解壓縮成無效的。
  3. 先暫時把其中一位發言者標為騎士。把那位發言者的話視為真,並沿著陳述中提及的所有人推導後果,若邏輯鏈很長,就把每一個被迫產生的指派寫在草稿紙上。
  4. 若這個暫時的騎士標記產生矛盾,例如同一個人同時被迫成為騎士與無賴,就改把這位發言者標為無賴,並把這個人所說的整句話視為假。
  5. 對每一位角色仍未確定的發言者重複進行這項矛盾檢驗,直到所有可見的發言者都有角色,並且沒有任何一句陳述找不到滿足的真假值。
  6. 使用鍵盤上的數字鍵 1 到 4,在對應位置的可見發言者之間切換騎士與無賴身分;在窄螢幕上則可使用適合觸控的角色按鈕。
  7. 當每位可見的發言者都已獲指派角色後,按下 Enter(或選擇「檢查指派」)。頁面會拒絕尚未完成的對局,所以提早按下 Enter 並不會消耗一次錯誤機會。
  8. 閱讀畫面上的回饋訊息。若提交正確,則會加上 200 分並開啟下一個固定關卡;若提交錯誤,則所選的角色會保持顯示,以便檢查矛盾;在第二次錯誤鎖定整輪成績之前,可先修改一張或更多卡片,再次提交。

突破多人邏輯鏈的策略

進入一道難題最有效率的方式,是從一句自指涉或雙重錨定的陳述著手。像「人物 A 說我們之中剛好只有一位是騎士」這樣的句子,一次就能釘住兩個角色,因為 A 的陳述在 A 為騎士時為真,在 A 為無賴時為假,無論是哪一種情況,都會立刻決定其餘成員中騎士的人數。一旦這個錨點固定,剩下的開放角色就能用一般的前向推理填補,完全不必手動測試每一種布林指派。

當沒有任何一句陳述是雙重錨定時,用「矛盾檢驗」會比完整列舉更快。挑一位角色仍開放的發言者,假設他為騎士,然後沿著後果推下去。若這個假設在兩步之後就導致矛盾,就代表假設錯誤,這位發言者必然是無賴。在四人對局中,這最多只需要進行四輪這樣的測試,而不是開發測試中那十六種原始檢查,即使在路線中最密集的關卡上,也能將認知負擔控制在可處理的範圍內。

仔細閱讀連接詞所節省的時間,比任何其他習慣都還多。「A 與 B 都是騎士」是一個單一合取,只要 A 或 B 中任何一人是無賴,它就為假。「A 與 B 之中至少有一位是騎士」,只要兩人中至少一人是騎士就為真,這種情況幾乎涵蓋所有指派,僅排除全員皆為無賴的邊界情況。「同類型」代表被指涉的兩位發言者角色相同,所以這句話在兩人都是騎士或兩人都是無賴時為真。把這些詞彙混用,正是讓一個原本很有希望的候選解在最後的「檢查指派」中失敗的原因,因為一個錯誤的連接詞會翻轉整句陳述的真假值,而非僅僅翻轉其中一個分支。

計分、錯誤與兩次錯誤上限

每一次完整的正確指派,剛好會獎勵 200 分、開啟下一個固定關卡,並將該關卡的錯誤計數歸零。因此,連續五次正確指派即可累積最高 1,000 分的輪成績,沒有任何一個關卡提供額外獎勵、扣分或速度加成,可使總分突破這個上限。共用的「重新開始」控制項是回到第一題的唯一路徑,並會在一次操作中清空本輪、分數、所選角色、錯誤次數、回饋訊息以及任何終局狀態。

第一次不完整的正確指派是可以挽救的。所選的角色會保持顯示,矛盾可以從回饋訊息中讀出,而且可以在不離開目前關卡的情況下,重新提交修正過的答案。然而,第二次不完整的正確指派會使整輪陷入鎖死。一旦鎖死,之後每一次角色點擊、數字鍵輸入與提交都會被忽略:分數凍結,結果進入終局,直到按下「重新開始」為止。由於遊戲會在提交前先拒絕尚未完成的對局,所以在每位角色都設定好之前不小心按下 Enter 並不會消耗一次錯誤機會,因此「思考到一半」的狀態基本上是零成本。

謎題配置比較

每題發言者人數 建置時檢查的布林指派數 交叉指涉負擔 在五題路線中的位置
兩人 4 單一互相指涉,發言者之間至多一次指涉 典型的早期關卡,五題中密度最低
三人 8 雙向至三向的指涉,常含一句雙重錨定陳述 中段關卡,五題中最常見的形狀
四人 16 密集的四向指涉,多個「同類型」或「剛好一位」子句 末段或最難的關卡,五題中密度最高

關卡的形狀決定它在路線中的位置。兩人對局之所以最簡單,是因為四種布林組合可以在一分鐘內用心算測試完畢。四人對局之所以最難,是因為每一個連接詞都必須在十六種候選指派中逐一解析,而解題者在釘住其中一個角色時,還得同時在腦中記住另外三個角色。若在第二題卡關,幾乎總是值得先把畫面上的陳述再大聲讀過一遍,然後再加入下一個角色,因為大多數的卡關,都是來自誤讀某個連接詞,而不是用盡了所有邏輯步數。

確定性的路線為何有助於高難度謎題

由於每次重新開始時,相同的五題都會以相同的順序出現,這條路線扮演的是一套穩定的練習題庫,而不是隨機抽題的測驗。頁面從不向遠端服務拉取謎題、從不上傳目前的指派、也從不要求建立帳號,因此每一次解題嘗試都只保留在目前的瀏覽器分頁中。若瀏覽器儲存空間可用,則只有最佳的完成分數會被網站既有的遊戲外殼保留,而這項紀錄,也是分頁關閉後唯一能存活的進度資料。

對於想要以純鍵盤方式走完同一道邏輯題的玩家來說,數字鍵 1 到 4 可在對應位置的可見發言者之間切換騎士與無賴身分,Enter 可提交一份完整的對局,而共用的「重新開始」按鈕會重置整輪。無論是使用滑鼠、觸控或鍵盤進行這條路線,這些控制項在窄螢幕上也同樣以大顆的觸控友善按鈕形式提供,因此謎題的難度完全一致。想要嘗試另一種確定性挑戰的玩家,可以參考 騎士與無賴純鍵盤操作指南,取得可搭配上述解題步驟的控制訣竅。

若想進一步閱讀,請參考 硬核點燈謎題:五步內解開 4×4。