準備好了嗎?

開始玩數獨!

Swordfish 數獨技巧

進階經典 + 殺手第 22 步,共 38 步閱讀約 1 分鐘

Swordfish(劍魚)是 X-Wing 的 3 線版本。取一個數字,找出 3 列,其中這個數字被限制在同樣的 3 行裡,那麼這個數字就可以從盤面其他位置,把這 3 行裡的候選數全部刪去。

這個模式是什麼

一次只處理一個數字。選 3 列(基線),每一列中這個數字最多有 3 個候選數格。如果這些候選數全都落在同樣的 3 行內,你就有了 Swordfish,而這 3 行就是覆蓋線。

道理純粹是計數。3 列各需要一個這個數字,3 個全都在 3 行中,而一行最多只能有一個。所以這 3 行已經被這 3 列完全占滿。這些行中的其他格子都不能放這個數字。

行和列對調後,一切運作方式相同:3 行被限制在 3 列內,就能從那些列中排除這個數字。

X-WingSwordfish
基線23
覆蓋線23
每條基線的候選數恰好 22 或 3
模式格46 到 9
一般排除數1 到 42 到 8

放寬的計數,是 Swordfish 難以看出的原因:一條基線可能有 2 個候選數,也可能有 3 個,而且模式通常是參差的,而不是整齊的矩形。

什麼時候該找它

  • 某個數字已經放入 6 或 7 次,所以只剩幾列還需要它。
  • 有 2 列共用一對行,但沒有第 3 列能完成 X-Wing。
  • 唯一數、數組和指向規則都用盡了,而你不想開始做鏈。

一步一步怎麼做

  1. 選一個數字,替每一列寫下它仍可能出現的行。
  2. 忽略有 4 行或更多行的列,它不能當基線。
  3. 找出 3 列,它們的行合起來剛好是 3 行。
  4. 把這 3 行標為覆蓋線。
  5. 從這些行中位於 3 條基線以外的每一格,刪去這個數字。
  6. 改用行當基線再做一次。

實例說明

只看數字 5。看 B、D 和 H 列:B 列的 5 只能在 B7 或 B8,D 列只能在 D3 或 D7,H 列只能在 H3、H7 或 H8。

  1. 較簡單的技巧都用完了。看看 B、D、H 列裡的 5。

  2. B 列的 5 只能放在 B7 或 B8,D 列只能放在 D3 或 D7,H 列只能放在 H3、H7 或 H8。

  3. 這些 5 全都落在 3 個行裡:第 3、7、8 行。

    這 3 列各需要自己的 5,而且任兩列不能共用同一行,所以 B、D、H 列在第 3、7、8 行各放一個 5。

  4. 所以第 3、7、8 行的 5 都落在 B、D、H 列。G3、F7、F8、J8 雖在這些行裡,卻不在這些列內。

  5. F7、F8、G3、J8 排除 5,因為第 3、7、8 行的 5 已經在 B、D、H 列了。

較簡單的技巧都用完了。看看 B、D、H 列裡的 5。

這些 5 全都在第 3、7 和 8 行,而且沒有任何 2 列共用同一對行,所以這是真正的 Swordfish,不是偽裝的 X-Wing。計數是參差的:2 個、2 個和 3 個候選數。這 3 列各需要自己的 5,而一行只能有一個,所以第 3、7 和 8 行的 5 就落在 B、D 和 H 列。

這讓這些行的其餘格子被釋放:從 F7、F8(第 7 和 8 行)、G3(第 3 行)和 J8(第 8 行)刪去 5。共 4 個排除,這裡沒有直接導出任何填入。

常見錯誤

  • 要求每條基線都有 3 個候選數。2 個就可以,混合的列才是常見情況。
  • 數成 4 行。如果 3 條基線碰到 4 個不同的行,邏輯就崩潰了。
  • 在基線內排除。模式格本身要保留這個數字。
  • 把 Swordfish 與 3 個宮內指向數對搞混。指向只作用在一個宮之內;Swordfish 則橫跨整個盤面。
  • 漏掉以行為基礎的版本。永遠兩個方向都搜尋。

在哪裡會遇到

Swordfish 模式從困難經典數獨開始變得重要,與 Wing 並列。它們比 X-Wing 罕見得多,所以把搜尋當作轉向著色法和鏈之前的最後一輪掃描;如果 3 線不夠,同樣的計數論證擴展到 4 線,就是 Jellyfish。