2026/01/03更新
找到九宮格同位置重複的反例了
所以只依靠九宮格位置排除是有瑕疵的解題策略
左上角跟六點鐘方向的第一橫排
123是重複的
但就算是這樣依然能構成數獨
星穹鐵道Now聊天室
似乎有玩家睡眠狀況不好
於是我建議睡前一小時別用電子產品
但睡前一小時不用電子產品
未免太過煎熬
於是就想說
乾脆出數獨題好了
數獨常見是9×9
規則是
每列與每行
還有每個自己所處的小九宮格
是由1~9不重複的數字組成
其實一般來說
所謂數獨
就是在解
每行、每列、每個小九宮格
加總等於45的多元方程式
我們先從能構造出的實例
來觀察下數獨有什麼特性
看能不能給予我們
有著除去問AI以外
能寫出數獨程式的關鍵靈感
跟大致上要使用到的函數與技巧
需要注意的是
本篇現階段只是數獨出題程式
而非數獨解題程式
數獨範例1
147 369 258
258 147 369
369 258 147
471 582 693
582 693 471
693 471 582
714 936 825
825 714 936
936 825 714
現在我們可以簡略的思考下
數獨有幾種解法了
或者說
假設我們數獨只會這題
能構造出多少種
類似魔方陣的旋轉狀況
魔方陣就是一個九宮格
是由1~9不重複數字組成
且直的橫的斜的加總起來
都是15的
這樣一系列的九宮格
那這篇就先寫到這
也算是順便讓各位
有些停下來思考的餘地在
等我這篇解完後
一路讀下來就像是在使用
沒有回應功能的劣化版AI了
好,回來繼續思考了
首先我們可以把這樣一個範例轉置過來
行變列 列變行 這樣
(需要注意的是
大陸的行與列
跟臺灣的行與列是反過來的
所以也許用 column代表垂直 row代表水平會好一些)
這樣就確定數獨有第二種解法
也就是變成
123 456 789
456 789 123
789 123 456
312 564 978
645 897 312
978 231 645
231 645 897
564 978 231
897 312 564
老實說轉置這操作
不用程式用手工的話
還蠻消耗心神的
我是用手工轉的
就換個方向把原數字抄下來這樣
希望沒轉錯啦
唔
這麼辛苦才構造出另一個狀況
那有沒有更簡單的方法呢?
讓我試試
我們如果把這數獨中
數字出現1的部份
跟數字出現4的部份全部對調
是不是能夠符合數獨呢?
原 新
147 369 258 417 369 258
258 147 369 258 417 369
369 258 147 369 258 417
471 582 693 174 582 693
582 693 471 582 693 174
693 471 582 693 174 582
714 936 825 741 936 825
825 714 936 825 741 936
936 825 714 936 825 741
粗略目測檢查一下
這樣好像也是對的
那我們只靠這個數獨
數字兩兩交換
能構造出...
我算一下
1跟另外八個數字對調
能構造出8種
2跟另外7個數字對調(因為1對調的時候已經計算過了)
能夠造出7種
以此類推
但關係是 8+7+6+5+4+3+2+1
還是8階層(記為8!)
也就是 8x7x6x5x4x3x2x1 呢?
我猜是乘法 也就是階層的關係
因為這對調
是可以重複進行的
例如
我們剛才完成了1跟4的對調
我們可以在此之上
再進行一次2跟3的對調
像這樣
1跟4的對調 然後再2跟3的對調
417 369 258 417 269 358
258 417 369 358 417 269
369 258 417 269 358 417
174 582 693 174 583 692
582 693 174 583 692 174
693 174 582 692 174 583
741 936 825 741 926 835
825 741 936 835 741 926
936 825 741 926 835 741
這樣目測好像也是對的
哇~這根本只靠一題數獨
就有出不完的數獨題目嘛
但除了數字單純的對調之外
我們還有沒有辦法構造出新的數獨題目呢?
讓我再想想
(中場休息下─以上於10:51更新)
哦
想到了
有,我們大可以不必整個數獨的數字統一變換
觀察原數獨 如果我們只以九宮格的一小列為單位替換
例如 第一個左上角九宮格的147
跟左上角數來第二個九宮格的471對調
147 369 258 471 369 258
258 147 369 258 147 369
369 258 147 369 258 147
471 582 693 147 582 693
582 693 471 582 693 471
693 471 582 693 471 582
714 936 825 714 936 825
825 714 936 825 714 936
936 825 714 936 825 714
嗯,這樣子好像也還是成立吧?
哇~這下有幾種變化更不好算了
但可以肯定的是會是像 33,550,336這樣
龐大但缺乏實感的次數
(我們這不就只是進行些微不足道的替換而已嘛!!)
現在也許我們要思考的是
有沒有除去以下這些數獨題目外
第一題目測無解題
1□□
□1□
□□□
第二題目測無解題
4□□
4□□
□□□
第三題目測無解題
77□
□□□
□□□
其實數獨
也許有那種一眼就能看出
是解不出來的隱藏規則在?
有沒有這種規則呢?
我覺得好像蠻難找的
至少我第一時間想不太出來
但又或者我們該換個問法
數獨是不是有專屬於它的格式或說格律在?
其實解數獨
不需要硬用 每column 每row
每九宮格加總等於45的方程式硬解?
我們在構造第一個數獨題目時
其實數字抄下來
填一填這過程還算蠻自然、水到渠成的
那要如何破壞那規律
讓題目沒有一眼那麼好解
我們大概也在剛才的討論中得出了
多如繁星的替換方式
如果要用更簡潔的話來說
我們現在要思考的問題是
有沒有種數獨
是沒辦法靠這一題變化出來的?
又或者是
是不是每一種數獨
都有著跟這構造第一種數獨
有著同樣的規律?
這些問題就不好答了
我也暫時不知道答案
若沒想清楚這些
程式應該還是寫得出來
但可能就不太完善
除非我們用窮舉的
但用窮舉的就不能只解數獨出題程式
可能一定要寫數獨解題程式
其實數讀解題程式
也許比意外中的好寫很多也說不定
其實是沒必要那麼抗拒寫數獨解題程式的
只是數獨出題程式我們可以用一開始講的
1.轉置
2.數字全局替換
3.局部九宮格行列跟另外的九宮格行列局部互換
然後再敲掉幾格數字變成空格 □ 這樣就能完成了
但就是這麼簡單的出題程式
其實實際上實作也是有些麻煩的
這就是AI時代寫程式的好處
大家最害怕、厭煩的第一階段
已經很好的被AI取代掉了
人們所需負責的大概就僅有
把原始碼以UTF-8或其它Unicode的方式儲存
這種AI可能抓不太到的bug進行補強了
其它部份寫程式已經不太需要動腦了
由於我們(呃,先當作我們吧)的目的是數獨幫助睡眠
所以還是在讓我們稍微用腦下吧!!
(以上於11:19更新
接下來要吃飯跟思考比較難的上述問題
可能下次更新會很久
或者是下次更新只會有局部思路)
我發現數獨好像有個隱藏規則
就是說當數獨符合每column每row每九宮格時
會自然而然成立的隱藏規則
那就是
在不同的九宮格內
同個數字
只會出現在九宮格不同的位置一次
我幫大家標一下
只觀察原數獨1的部份
觀察1
123 456 789 1□□ □□□ □□□
456 789 123 □□□ □□□ 1□□
789 123 456 □□□ 1□□ □□□
312 564 978 □1□ □□□ □□□
645 897 312 □□□ □□□ □1□
978 231 645 □□□ □□1 □□□
231 645 897 □□1 □□□ □□□
564 978 231 □□□ □□□ □□1
897 312 564 □□□ □1□ □□□
只看右手邊
最終組成起來是不是就是
111
111
111
像這類隱藏規則
要發現可能不難
但要數學證明來說非常困難
第一個是
我們學的數學過程本來就不注重證明
所以不熟悉
第二個是
有時發現的隱藏規則
其實是某些狀況的特例
也許這隱藏規則不總是有效的
運氣好的話用反證法的時候發現特例
這隱藏規則也宣告結束了
總之,有興趣的人可以挑戰或者思索相關的一下!!
所以我們似乎可以看出
是有些狀況
一眼就能看出數獨沒解
(我們先假設這隱藏規則是對的)
就像是
我現階段就認為以下這題就是沒解的
4□□ □□□ □□□
□□□ □□□ □□□
□□□ □□□ □□□
□□□ □□□ □□□
□□□ □□□ □□□
□□□ □□□ □□□
□□□ 4□□ □□□
□□□ □□□ □□□
□□□ □□□ □□□
理由
4在左上角的位置重複出現了
(以上於12:01更新)
嗯
雖然沒有想得很透徹
但有了這些基礎規律
應該是能開始寫程式了
還是按造過去慣例
程式先處理圖片文字排版的部份
因為數獨整體而言格式非常工整
如果像這篇用空白鍵排版的
其實在開發過程中也蠻難受、不太直觀的
下次有更新可能是很久之後的事情了!!
也可能很快
看運氣