黑白子問題

題目裡有十六個小方格,每個方格有不同的黑白棋子分布。問最後一個小方格是右邊四個答案中的哪一個。

有興趣的朋友先不要看下去,自己解解看。


解這題之前,我們來看看另一個題目。

小朋友蘋果分配問題

這是最近網路常傳的題目「有七個小朋友和三顆蘋果,請切四刀,讓小朋友們不會為分配蘋果吵架。」

下一頁有標準答案。有興趣的朋友可以先解解看。

蘋果分配問題「標準答案」

三顆蘋果分七個小朋友,每個小朋友應拿到 37\frac{3}{7}

第一刀橫切各蘋果為一半,然後各個半顆蘋果再量 17\frac{1}{7} 角度切。

37\frac{3}{7} 部分給前六個小朋友,最後剩下來的六個小片合起來也是 37=1146\frac{3}{7} = \frac{1}{14} * 6


武士刀

等一下,題目沒說可以用武士刀一次齊腰斬蘋果,更沒指明有精確量度工具可使用。一般人操刀,可沒有那種準度。
武士刀
不過,既然可以請武士刀專家,那就簡單了。

蘋果分配問題「武士刀解法」

既然可以用武士刀,那為什麼只能切蘋果呢?

其實,切掉第一個小朋友後,之後不管怎麼分蘋果,相信剩下的小朋友都不敢吵的。目的達成,本題得解。:)

這類的「數學」問題,其實都有條件規則定義不清的問題。


回到黑白子

為討論方便,我加上紅色註號。

黑白子解一:「標準」解法(答案為 x)

標準答案為 x。邏輯是:加上 x 後,每個小正方框裡的黑白點如果顏色互換,都可以找到另一個對應的小正方框。比方說,b2b2 由左上角順時針看為「空空白黑」,顏色互換後 變成「空空黑白」,與 d1d1 配對。

兩兩配對:(a1,a3),(a2,d3),(a4,c4),(b2,d1),(b3,c2),(b4,c1),(c3,d2)(a1, a3), (a2, d3), (a4, c4), (b2, d1), (b3, c2), (b4, c1), (c3, d2)

最後剩下 b1b1 「白空白黑」,互換後為「黑空黑白」,即為 x。

但這只是一種可能的邏輯。


解二:等量圍棋子(答案可為 x 或 y)

我們換個邏輯:讓棋盤上黑白子的數量一樣。目前盤上有 23 個黑子,24 個白子。

所以可以加上 y,讓黑白子各有 24 顆。

或是加上 x,讓黑白子各有 25 顆。

解三:等重(答案 w, x, y, z 可任選)

其實,邏輯換一換,要什麼答案都可以。

舉個例,我們的規則定為:從右上斜切到左下,讓兩邊黑白棋子加起來的重量一樣。

切線上的黑白子兩邊平分,所以可以不計。

剩下的,左上三角型有 9 個黑子,12 個白子;右下三角型有 11 個黑子,8 個白子。

答案為 w

我們如果想要讓答案是 w 的話,把w放上,左上三角型就有 9 個黑子,12 個白子;右下三角型有 13 個黑子,8 個白子。

讓每個黑子重 4 克,白子重 5 克,那就可以平衡: 94+125=134+859*4+12*5 = 13*4+8*5

所以,可以說:這個棋盤上的每個黑子重 4 克,白子重 5 克時,最後一格必須是 w,藍線左上與右下的棋子總重才能平衡。

答案為 x

同理,要 x 的話,左上三角型有 9 個黑子,12 個白子;右下三角型有 13 個黑子,9 個白子。那黑子重 3 克,白子重 4 克,就可平衡:93+124=133+949*3+12*4 = 13*3+9*4

答案為 y

y 的話,左上三角型有 9 個黑子,12 個白子;右下三角型有 12 個黑子,8 個白子。那黑子重 4 克,白子重 3 克,就可平衡:94+123=124+839*4+12*3 = 12*4+8*3

答案為 z

z 的話,左上三角型有 9 個黑子,12 個白子;右下三角型有 12 個黑子,10 個白子。那黑子重 2 克,白子重 3 克,就可平衡:92+123=122+1039*2+12*3 = 12*2+10*3


所以,要什麼答案,就來湊不同的重量比。


解四:槓桿

如果要把各子位置的槓桿長度考慮進來也可,甚至可以在中心點平衡。

此解與前解類似,只不過每一子之前有個加權係數(與中線的垂直距離;原小方格可以用九宮格細分,以三角函數算圓心座標,再用畢式定理算距離)。總之就是解二元方程式,算出黑白子所需的重量比就可以了。這裡略去細節。



解五:多項式解法之我實在太閒了

這個方法是利用高維度的多項式來解。一樣,要什麼答案都可以。不過為了篇幅,我們不考慮唯一點在中央的 y (要考慮的話,把所有其他的小方格正中央視為空白,像六面骰子點數排列一樣)。

我們就選 z 來當答案,看規則要怎麼變。

編碼

要運用多項式,首先要把各個小方格轉成數值。為了它的唯一性,我們把所有的可能性編碼。拿 b1 來說,從左上角開始,順時鐘方向來看,這格可以表示成「白空白黑」。我們把它用數字替代,空=0,白=1,黑=2,得 1012。這個數字是三進位數,轉成十進位得 32。

格序小方格內容三進位十進位
1a1黑白黑黑212271
2a2空空白白00114
3a3白黑白白121149
4a4白黑空空120045
5b1白空白黑101232
6b2空空白黑00125
7b3黑白黑白212170
8b4白白黑黑112244
9c1黑黑白白221176
10c2白黑白黑121250
11c3白黑黑白122152
12c4黑白空空210063
13d1空空黑白00217
14d2黑白白黑211268
15d3空空黑黑00228
16d4?????????
w黑黑空空220072
x黑空黑白202161
z空白黑白012116

其實編碼什麼方法都好,只要代表數字與小方格是一對一對應就好。把所有可能性列出來,然後隨意指定一個不重覆的數字也可以。

這裡只是借用三進位制的方便性。

另外,編了碼後,其實就可以用任何一種機器學習(machine learning; ML)的方法來解。但ML中有許多方法雖然能得解,但建立出來的模型卻不直觀,不易說明原理。所以這裡不用ML中依靠機率的模型(比方說類神經網路)。

瘋狂的多項式

好,解法很簡單,就代入這個多項式:

96419n15326918592000+367963n14968647680083433193n1337362124800+76018199n129580032003905893151n112052864000+2834174039n1087091200748402863991n91828915200+780710080883n820321280035360802693773n71306368000+6209534662753n64354560056937672552137n5102643200+186397079118703n41197504004585643519077501n31513512000+289798498820219n275675600125147426197n145045+857840\begin{aligned} & - \frac{96419 n^{15}}{326918592000} + \frac{367963 n^{14}}{9686476800} - \frac{83433193 n^{13}}{37362124800} + \frac{76018199 n^{12}}{958003200} \\ & - \frac{3905893151 n^{11}}{2052864000} + \frac{2834174039 n^{10}}{87091200} - \frac{748402863991 n^{9}}{1828915200} \\ & + \frac{780710080883 n^{8}}{203212800} - \frac{35360802693773 n^{7}}{1306368000} + \frac{6209534662753 n^{6}}{43545600} \\ & - \frac{56937672552137 n^{5}}{102643200} + \frac{186397079118703 n^{4}}{119750400} - \frac{4585643519077501 n^{3}}{1513512000} \\ & + \frac{289798498820219 n^{2}}{75675600} - \frac{125147426197 n^{1}}{45045} + 857840 \end{aligned}

其中,n 代表位置號,如圖:

「你在開玩笑嗎?」

真的,上面的多項式可以精確地算出每一格的內容。

舉個例,拿第 10 格來說,也就是原來的 c2 (白黑白黑,三進位 1212),最後轉換出來的十進位代表值應該是 50 (見編碼表格)。n=10n=10 代入上面那個多項式,算出來的數值正是 50。

964191015326918592000+3679631014968647680083433193101337362124800+760181991012958003200390589315110112052864000+28341740391010870912007484028639911091828915200+780710080883108203212800353608026937731071306368000+62095346627531064354560056937672552137105102643200+18639707911870310411975040045856435190775011031513512000+2897984988202191027567560012514742619710145045+857840\begin{aligned} & - \frac{96419 * 10^{15}}{326918592000} + \frac{367963 * 10^{14}}{9686476800} - \frac{83433193 * 10^{13}}{37362124800} \\ & + \frac{76018199 * 10^{12}}{958003200} - \frac{3905893151 * 10^{11}}{2052864000} + \frac{2834174039 * 10^{10}}{87091200} \\ & - \frac{748402863991 * 10^{9}}{1828915200} + \frac{780710080883 * 10^{8}}{203212800} \\ & - \frac{35360802693773 * 10^{7}}{1306368000} + \frac{6209534662753 * 10^{6}}{43545600} \\ & - \frac{56937672552137 * 10^{5}}{102643200} + \frac{186397079118703 * 10^{4}}{119750400} \\ & - \frac{4585643519077501 * 10^{3}}{1513512000} + \frac{289798498820219 * 10^{2}}{75675600} \\ & - \frac{125147426197 * 10^{1}}{45045} + 857840 \end{aligned}

註:不想手動驗算,可以把下面的算式貼入網上高精度的計算機算。

-96419*10^15/326918592000+367963*10^14/9686476800-83433193*10^13/37362124800+76018199*10^12/958003200-3905893151*10^11/2052864000+2834174039*10^10/87091200-748402863991*10^9/1828915200+780710080883*10^8/203212800-35360802693773*10^7/1306368000+6209534662753*10^6/43545600-56937672552137*10^5/102643200+186397079118703*10^4/119750400-4585643519077501*10^3/1513512000+289798498820219*10^2/75675600-125147426197*10^1/45045+857840

再換個例子,第2格(a2),n=2n=2代入:

-96419*2^15/326918592000+367963*2^14/9686476800-83433193*2^13/37362124800+76018199*2^12/958003200-3905893151*2^11/2052864000+2834174039*2^10/87091200-748402863991*2^9/1828915200+780710080883*2^8/203212800-35360802693773*2^7/1306368000+6209534662753*2^6/43545600-56937672552137*2^5/102643200+186397079118703*2^4/119750400-4585643519077501*2^3/1513512000+289798498820219*2^2/75675600-125147426197*2^1/45045+857840

算出來總和是十進位的 4,換成三進位得 11,前面補上 0 得 0011,為「空空白白」,的確就是 a2 的內容。

終於輪到 z 了

最後來算第 16 格,n=16n=16,代入後結果為十進位的 16,換成三進位 121,補 0 成 0121,「空白黑白」。正是 z 的內容。

-96419*16^15/326918592000+367963*16^14/9686476800-83433193*16^13/37362124800+76018199*16^12/958003200-3905893151*16^11/2052864000+2834174039*16^10/87091200-748402863991*16^9/1828915200+780710080883*16^8/203212800-35360802693773*16^7/1306368000+6209534662753*16^6/43545600-56937672552137*16^5/102643200+186397079118703*16^4/119750400-4585643519077501*16^3/1513512000+289798498820219*16^2/75675600-125147426197*16^1/45045+857840

多項式是怎麼來的?

雖然多項式的維度與係數看來很嚇人,但其實沒什麼了不起。整個解法就是解下面的聯立方程而已:

f(n)=An15+Bn14+Cn13+Dn12+En11+Fn10+Gn9+Hn8+In7+Jn6+Kn5+Ln4+Mn3+Nn2+On1+Pn0f(n)=A*n^{15}+ B*n^{14}+ C*n^{13}+ D*n^{12}+ E*n^{11}+ F*n^{10}+ G*n^{9}+ H*n^{8}+ I*n^{7}+ J*n^{6}+ K*n^{5}+ L*n^{4}+ M*n^{3}+ N*n^{2}+ O*n^{1}+ P*n^{0}

n 以 1 至 16 分別代入,依原表格的十進位數一欄,得下列十六式:

f(1)=71;f(2)=4;f(3)=49;.;f(15)=8;f(16)=16f(1) = 71; f(2)=4; f(3)=49; ….; f(15)=8; f(16)=16 (z格的十進位)

十六式聯立,可以算出A,B,C,,PA, B, C, …, P 等十六個係數。

矩陣法

把上面聯立方程改寫為下列矩陣式,把 XX 代入想要解的值(解答是z,就代入表格裡算出的X=16X=16),就可以求得 A,B,C,,PA, B, C, … , P 等係數的值了。

[115114113112111110191817161514131211102152142132122112102928272625242322212031531431331231131039383736353433323130415414413412411410494847464544434241405155145135125115105958575655545352515061561461361261161069686766656463626160715714713712711710797877767574737271708158148138128118108988878685848382818091591491391291191099989796959493929190101510141013101210111010109108107106105104103102101100111511141113111211111110119118117116115114113112111110121512141213121212111210129128127126125124123122121120131513141313131213111310139138137136135134133132131130141514141413141214111410149148147146145144143142141140151515141513151215111510159158157156155154153152151150161516141613161216111610169168167166165164163162161160][ABCDEFGHIJKLMNOP]=[71449453257044765052637688X]\begin{bmatrix} 1^{15} & 1^{14} & 1^{13} & 1^{12} & 1^{11} & 1^{10} & 1^{9} & 1^{8} & 1^{7} & 1^{6} & 1^{5} & 1^{4} & 1^{3} & 1^{2} & 1^{1} & 1^{0} \\ 2^{15} & 2^{14} & 2^{13} & 2^{12} & 2^{11} & 2^{10} & 2^{9} & 2^{8} & 2^{7} & 2^{6} & 2^{5} & 2^{4} & 2^{3} & 2^{2} & 2^{1} & 2^{0} \\ 3^{15} & 3^{14} & 3^{13} & 3^{12} & 3^{11} & 3^{10} & 3^{9} & 3^{8} & 3^{7} & 3^{6} & 3^{5} & 3^{4} & 3^{3} & 3^{2} & 3^{1} & 3^{0} \\ 4^{15} & 4^{14} & 4^{13} & 4^{12} & 4^{11} & 4^{10} & 4^{9} & 4^{8} & 4^{7} & 4^{6} & 4^{5} & 4^{4} & 4^{3} & 4^{2} & 4^{1} & 4^{0} \\ 5^{15} & 5^{14} & 5^{13} & 5^{12} & 5^{11} & 5^{10} & 5^{9} & 5^{8} & 5^{7} & 5^{6} & 5^{5} & 5^{4} & 5^{3} & 5^{2} & 5^{1} & 5^{0} \\ 6^{15} & 6^{14} & 6^{13} & 6^{12} & 6^{11} & 6^{10} & 6^{9} & 6^{8} & 6^{7} & 6^{6} & 6^{5} & 6^{4} & 6^{3} & 6^{2} & 6^{1} & 6^{0} \\ 7^{15} & 7^{14} & 7^{13} & 7^{12} & 7^{11} & 7^{10} & 7^{9} & 7^{8} & 7^{7} & 7^{6} & 7^{5} & 7^{4} & 7^{3} & 7^{2} & 7^{1} & 7^{0} \\ 8^{15} & 8^{14} & 8^{13} & 8^{12} & 8^{11} & 8^{10} & 8^{9} & 8^{8} & 8^{7} & 8^{6} & 8^{5} & 8^{4} & 8^{3} & 8^{2} & 8^{1} & 8^{0} \\ 9^{15} & 9^{14} & 9^{13} & 9^{12} & 9^{11} & 9^{10} & 9^{9} & 9^{8} & 9^{7} & 9^{6} & 9^{5} & 9^{4} & 9^{3} & 9^{2} & 9^{1} & 9^{0} \\ 10^{15} & 10^{14} & 10^{13} & 10^{12} & 10^{11} & 10^{10} & 10^{9} & 10^{8} & 10^{7} & 10^{6} & 10^{5} & 10^{4} & 10^{3} & 10^{2} & 10^{1} & 10^{0} \\ 11^{15} & 11^{14} & 11^{13} & 11^{12} & 11^{11} & 11^{10} & 11^{9} & 11^{8} & 11^{7} & 11^{6} & 11^{5} & 11^{4} & 11^{3} & 11^{2} & 11^{1} & 11^{0} \\ 12^{15} & 12^{14} & 12^{13} & 12^{12} & 12^{11} & 12^{10} & 12^{9} & 12^{8} & 12^{7} & 12^{6} & 12^{5} & 12^{4} & 12^{3} & 12^{2} & 12^{1} & 12^{0} \\ 13^{15} & 13^{14} & 13^{13} & 13^{12} & 13^{11} & 13^{10} & 13^{9} & 13^{8} & 13^{7} & 13^{6} & 13^{5} & 13^{4} & 13^{3} & 13^{2} & 13^{1} & 13^{0} \\ 14^{15} & 14^{14} & 14^{13} & 14^{12} & 14^{11} & 14^{10} & 14^{9} & 14^{8} & 14^{7} & 14^{6} & 14^{5} & 14^{4} & 14^{3} & 14^{2} & 14^{1} & 14^{0} \\ 15^{15} & 15^{14} & 15^{13} & 15^{12} & 15^{11} & 15^{10} & 15^{9} & 15^{8} & 15^{7} & 15^{6} & 15^{5} & 15^{4} & 15^{3} & 15^{2} & 15^{1} & 15^{0} \\ 16^{15} & 16^{14} & 16^{13} & 16^{12} & 16^{11} & 16^{10} & 16^{9} & 16^{8} & 16^{7} & 16^{6} & 16^{5} & 16^{4} & 16^{3} & 16^{2} & 16^{1} & 16^{0} \end{bmatrix} \begin{bmatrix} A \\ B \\ C \\ D \\ E \\ F \\ G \\ H \\ I \\ J \\ K \\ L \\ M \\ N \\ O \\ P \end{bmatrix} = \begin{bmatrix} 71 \\ 4 \\ 49 \\ 45 \\ 32 \\ 5 \\ 70 \\ 44 \\ 76 \\ 50 \\ 52 \\ 63 \\ 7 \\ 68 \\ 8 \\ X \end{bmatrix}

用矩陣解聯立,求出來的 A,B,C,,PA, B, C, … , P 等值,就是之前已先列出的多項式係數。A 是第一項係數 96419326918592000\frac{-96419}{326918592000}, P 是最後一項係數 857840857840 等等。

96419n15326918592000+367963n14968647680083433193n1337362124800+76018199n129580032003905893151n112052864000+2834174039n1087091200748402863991n91828915200+780710080883n820321280035360802693773n71306368000+6209534662753n64354560056937672552137n5102643200+186397079118703n41197504004585643519077501n31513512000+289798498820219n275675600125147426197n145045+857840\begin{aligned} & - \frac{96419 n^{15}}{326918592000} + \frac{367963 n^{14}}{9686476800} - \frac{83433193 n^{13}}{37362124800} + \frac{76018199 n^{12}}{958003200} \\ & - \frac{3905893151 n^{11}}{2052864000} + \frac{2834174039 n^{10}}{87091200} - \frac{748402863991 n^{9}}{1828915200} \\ & + \frac{780710080883 n^{8}}{203212800} - \frac{35360802693773 n^{7}}{1306368000} + \frac{6209534662753 n^{6}}{43545600} \\ & - \frac{56937672552137 n^{5}}{102643200} + \frac{186397079118703 n^{4}}{119750400} - \frac{4585643519077501 n^{3}}{1513512000} \\ & + \frac{289798498820219 n^{2}}{75675600} - \frac{125147426197 n^{1}}{45045} + 857840 \end{aligned}

總之,最後一格想要什麼答案,就把它編碼成十進位表示法,代入矩陣式中的XX,算出係數,然後就可以用得出的多項式來算十六格中任一格的內容。

後記

如果題目條件定義不完整,那答案就能千奇百怪,甚至隨心所欲而不逾矩。大部份網路上,甚至於許多學校裡的考試題目,都有這樣的漏洞。要人去猜出題者想要的是眾多解中的哪一個,實在意義不大。不過,如果能要解題者說明過程,也許有訓練分析力、想像力及嚴謹執行力的功能。

用高維度多項式來捕捉題目及想要的解答,其實有點算作弊。說穿了,其實就是把一大堆資訊編入這些係數裡。它只是對現象提供一種描述,而不是更深的的解釋。而且,它大概與奧坎剃刀法則有所衝突。

順道一提,在機器學習裡,這叫做 over-fitting;意思是說,這個模型能完美捕捉現有已觀測的現象,但在預測尚未觀測的現象就會出問題了。比方 說,有了這個多項式,我們甚至可算出第一百格的三進位:

-221102221101221221122102022021222022122010021211

但它並沒有意義, 因為我們事先定義的根只到第十六格,而且我們沒有特別去捕捉各小方格之間像是順序或鄰接等關係,所以第十七格之後的結果和我們的題目是無關的。

Anything Goes

這篇的英文標題,我選用歌舞劇名曲的標題 Anything Goes,是因為這首曲子的旋律讓我聯想到這類題目可能的複雜度。

看類簡單的五聲音階(以及這個早期版本的簡單和聲),卻配上複雜的切分節奏,正如看似容易的題目,背後可以有高度複雜的解法。