謝麗爾的生日

雪莉的生日（Cheryl's birthday）是一個數學問題的非正式名稱，是新加坡及亞洲中學數學奧林匹克競賽的題目，在2015年4月10日由江堅文（Kenneth Kong）貼上Facebook，之後在網路上爆紅，已獲得《紐約時報》、《衛報》、英國廣播公司（BBC）的報導，出題者也相當意外。
在題目中，名叫雪莉（Cheryl）又譯雪莉、雪露、雪瑞兒、謝麗爾等。的女生給了她剛認識的朋友艾伯特（Albert）和柏納（Bernard）一些有關她生日的資訊，讀者要根據這些資訊及她朋友的回覆判斷雪莉的生日。

**起源**
此問題是由新加坡《獅城有約》的電視主持人江堅文貼上Facebook，之後有數千個回覆，包括一些有趣的回覆，例如認為雪莉根本不希望艾伯特和柏納知道她的生日，這一題引發了江堅文和他妻子的爭論，江堅文誤以為這是小學數學考試的一部份，且是針對5至6歲的兒童。江堅文後來更正這是2015新加坡及亞洲學校數學奧林匹克（SASMO）的題目，是針對14歲的學生設計。比賽在2015年4月8日舉行，有二萬八千名來自新加坡、泰國、越南、中國及英國的學生參加。SASMO的主辦人員表示，此問題是針對參賽者中的前40%，目的是為了「篩選出更好的學生」。SASMO的執行董事告訴BBC：「這樣的邏輯及分析思考可以用在生活上及工作中。」。

**問題**
此問題是在25個問題中的第24個，問題如下：
2017年，該問題出現一個涉及4個人的版本，更復雜一些，但解題原理相同。

**答案和解法**
謝麗爾的生日是7月16日。
其解法是推理的方式，刪去不可能的日期，這也是Alex Bellos在英國的《衛報》解出此題的方式：
可能的生日用表格方式條列如下，將同月的放在同一列，同日的放在同一欄：
（第一句話）艾伯特：我不知道雪莉的生日是哪一天，但我知道柏納也不知道。
艾伯特知道的是月份，而每一個月都有一個以上的可能日期，不論艾伯特知道的月份是哪一個月，都不可能會知道雪莉的生日，第一句話的前半沒有提供有關生日的資訊。
柏納若要知道明確的生日日期，唯一的可能是生日日期的日在十個可能日期中只出現過一次，十個可能日期中，只有18日和19日各出現過一次，例如若柏納知道生日的日是18或是19，就可以立刻推理得到生日是6月18日或5月19日。
但艾伯特說他知道柏納也不知道生日是哪一天，因此可以推測他知道的月份是5月或6月以外的月份（即7月或8月），因為若是5月或6月，柏納有可能知道生日是哪一天。
（第二句話）柏納：一開始我不知道雪莉的生日，但現在我知道了
根據第一句話柏納可以推測月份是7月或8月，而他已經知道生日是哪一天，表示他知道的日是在7月或8月中只出現過一次的日，因此可以排除7月及8月可能生日中都有出現的14日，柏納知道的日可能是15日、16日或17日。
（第三句話）艾伯特：那我也知道雪莉的生日了
目前還有可能的生日是7月16日、8月15日及8月17日，而艾伯特在聽完第二句話就可以知道生日是哪一天，表示他知道的月份在7月16日、8月15日及8月17日中只出現一次。因此他知道的月份是7月，生日是7月16日。
答案是7月16日。

**對題意的另一種理解**
除了上述答案外，有些人認為8月17日也是一個可能的答案。但新加坡及亞洲學校數學奧林匹克認為此答案無效。

**存在爭議之處**
造成對題意存在不同理解的原因是題目的表述不夠準確，至少在避免歧義方面做得不夠完善。“但我知道柏納也不知道”這一句的英文原文“but I know that Bernard doesn't know too”就存在此問題。所以這是一個英文語言表達與理解的問題。一些人覺得此處的“知道柏納也不知道”是指“能很有把握地猜測柏納也不知道”，而另一些人則認為應該是指“已經由某種方式準確地知曉柏納確實不知道的事實”。其實聯繫上下文就可以發現，出題人在文中此處所指（或暗示）的應該是前一種意思，即艾伯特只是在進行“猜測”，而非已知曉部分事實。
一般來說，數理內容的敘述要儘量措辭準確，避免引起可能的歧義，但以此題來說，艾伯特是否事先知道有關柏納所知的部分事實，會干擾他自己第一步的思路，從而將這個推理過程最終引向完全不同的方向，如下所示。

**另一種理解的推理過程（版本1）**
（第一句話）艾伯特：我不知道謝麗爾的生日是哪一天，但我知道柏納也不知道。
艾伯特知道的是月份，而每一個月都有一個以上的可能日期，不論艾伯特知道的月份是哪一個月，都不可能會知道謝麗爾的生日，第一句話的前半沒有提供有關生日的資訊。
柏納若要知道明確的生日日期，唯一的可能是生日日期的日在十個可能日期中只出現過一次，十個可能日期中，只有18日和19日各出現過一次，例如若柏納知道生日的日是18或是19，就可以立刻推理得到生日是6月18日或5月19日。因此，首先排除6月18日和5月19日這兩天。
注意到，這時6月只剩下17日這一天。如果艾伯特知道的月份是6月，那麼這時他已經知道了謝麗爾的生日。但艾伯特並不知道，所以又排除6月17日這一天。
（第二句話）柏納：一開始我不知道謝麗爾的生日，但現在我知道了。
根據第一句，剩餘的日期中，14日、15日和16日分別出現在兩個月中，只有17日只出現在8月。現在柏納知道了謝麗爾的生日，這表明柏納知道的日期是17日，所以謝麗爾的生日是8月17日。
（第三句話）艾伯特：那我也知道謝麗爾的生日了。
艾伯特也知道只有17日是唯一的，因此在聽到第二句話之後，艾伯特也知道了謝麗爾的生日是8月17日。
答案是8月17日。

**另一種理解的推理過程（版本2）**
下面假設“艾伯特在說第1句話時已經由某種方式準確地知曉柏納確實不知道的事實”，並指出此情形下的解法以及與前一種情形的步驟差異。
如果艾伯特在第1次講話前事先被人明確告知柏納根據自己所知的日期推不出生日，則第1步可排除18日與19日。但是此情形下柏納得知的日期是仍有可能屬於5月或6月的，只不過不可能是在18日或19日。（與在第1步就可排除掉2行的上1種情況相比，區別在於在此情形的第1步只能排除2個可能選項。換句話說，這一種情形下在第1步排除的選項要少很多。）而在排除18日與19日後，在剩下的選項中，僅有6月17日可由月份數唯一確定。但此時艾伯特作出了“我還不知道”的判斷。說明生日也不可能在6月17日。
足夠聰明的柏納也是這麼想的。而且在聽到艾伯特還推不出生日時，表示自己已經推出了答案。說明在上一步所剩的各個選項中，已經能由日期唯一地確定出生日，但尚不能僅月份確定。也就是說，在剩下來的選項中，生日的月份數一定出現了不只一次，但日期數一定只出現了一次。唯一符合這條件的選項只有8月17日。（14日、15日、16日都在不同月份中出現了2次，僅17日出現了1次（出現在8月）；另外，8月此時也確實有3個不同的候選日期。故生日應為8月17日。）

**2種情形的解法步驟比較**
對比7月16日和8月17日兩種答案的推理過程，可以知道：
*根據第一句話首先排除的是5月和6月這兩個月份，而不僅僅是5月19日和6月18日這兩天。
*8月17日的推理過程隱含了對第一句話的錯誤理解，即理解成了“因為艾伯特知道柏納不知道謝麗爾的生日是哪一天，所以艾伯特也不知道”。6月17日就因為這種理解被排除的。而第一句話的正確理解是“艾伯特不知道謝麗爾的生日是哪一天，並且柏納也不知道”。
*由於對第一句話內在邏輯的不同理解，出現了版本1；又由於對“知道（know）”一詞的不同理解，出現了版本2。
以下各表中以“×”號表示因被排除而被劃去的日期。為美觀起見，實際操作時，各表還可以簡寫為數陣的形式。
這一步如果用矩陣語言表述，就是找出獨佔一列的元素“18日”與“19日”，並根據題意排除它們及其所在行，即劃去它們的所在行。
這一步如果用矩陣語言表述，就是找出獨佔一列的元素“18日”與“19日”，並根據題意排除它們，即劃去這2個元素。（不劃去所在行的其它元素。）
第二步結果 
上一步完成後，現在只剩下7月和8月這2個可選的月份，即餘下的矩陣的行秩為2。這一步的做法用矩陣語言表述就是在餘下的矩陣中找出並劃去行滿秩的列（向量），即劃去同時出現在7月和8月的“14日”。因為此時的行滿秩向量不能僅由日期做出判斷，與題意中“柏納已經在這一步可由日期唯一推知生日”這一事實不符，故被整列地排除掉。
這一步仍是對艾伯特所說的第1句話的推斷。因在上一步操作後，剩下了一個“6月17日”可由月份唯一確定，但艾伯特又肯定說自己還推不出日期，所以“6月17日”可以排除。這一步的做法用矩陣語言表述就是在餘下矩陣中找出只在各行出現一次的日期（此例中是“17日”，它是6月裡唯一出現的日期），並劃其所在行。
第三步結果 
艾伯特在第2次發言時已表示自己也可推出生日，說明在餘下的選項中，已經可以由月份唯一確定出生日。這一步的做法用矩陣語言表述就是在餘下的矩陣中找出只在各行出現一次的日期（此例中是“16日”，它是7月裡唯一出現的日期），並劃去其餘的行。
柏納發言時已表示自己也可推出生日，說明在餘下的選項中，已經可以由日期唯一確定出生日。這一步的做法用矩陣語言表述就是在餘下的矩陣中找出只在各列出現一次的日期（此例中是“17日”，它只在8月出現），並劃去其餘的列。
注意在這種情形中，艾伯特的第2次發言是多餘條件。但艾伯特的第1次發言在推斷中應用了2次。

**由此引申出的矛盾**
通過以上推理，可以總結出：如果艾伯特是“猜測”到柏納不知道謝麗爾的生日，那麼不論日期為15日、16日還是17日，柏納在聽到第一句話後都能“猜測”出謝麗爾的生日；而如果艾伯特“已經由某種方式準確地知曉柏納確實不知道的事實”，那麼只有當日期為17日時，柏納才能在聽到第一句話之後知道謝麗爾的生日。
於是有了這樣一種可能，先假定以下三點：
*艾伯特確實“已經由某種方式準確地知曉柏納確實不知道的事實”，因此說了第一句話；
*柏納卻把第一句話理解成了艾伯特“能很有把握地猜測柏納也不知道”；
*謝麗爾的生日是8月15日，告訴了艾伯特8月，又告訴了柏納15日。
然後，柏納聽到第一句話之後“猜測”出謝麗爾的生日是8月15日，因此說了第二句話。艾伯特按自己的理解說了第三句話，但其實他以為謝麗爾的生日是8月17日。這便是矛盾之處。
實際上，艾伯特在知道8月的情況下，即使不存在“某種方式”，他也可以知道柏納也不知道。然而，由於“某種方式”的存在，使得艾伯特忽略了這一點。另一方面，柏納或許沒有想到“某種方式”的存在，因而與艾伯特產生誤會。
最後，柏納甚至可能對艾伯特說第四句話：“你怎麼知道是15日還是17日的？”

**推廣**
本題可抽象和推廣為一類在層層遞進的限制條件下，從高維向量空間的有限點集中篩選特定點的問題。為保證問題可解且有唯一的解，作為猜測範圍的有限點集必須是精心選取的。
這裡以4維情況為例作一個說明。X先生從4維歐幾里德空間中精心挑選出一個點集作為參考範圍（要保證謎題可解），再從中挑選出一個特定的點作為猜測對象。X先生取的Standard basis作為參考基底，從而中各點都有了唯一的座標數值。設點在標準基下的座標表示為。X先生將寫在紙片上遞給了甲，將寫在紙片上遞給了乙，將寫在紙片上遞給了丙，將寫在紙片上遞給了丁。然後由4人輪流或自由發言，但只能談及自己是否能準確推知的所有座標值，或者是否能有把握地預測另一人的推斷結果。這裡還需要假定這4個參與者都足夠聰明，且都在積極思考答案。當所有人都確信自己已可推出答案時（即此問題可解時），再由讀者來推斷的座標。
上例所示的4維點集篩選問題可自然地推廣至n維。當n=2時，此類問題可用列出數表的方法（先列出一個包含所有參考選項的2維數表，再根據題設條件一步一步劃去不符合題意的選項）求解。n≥3時，考察集合已難以用簡潔的數表描述，但可視作n維數組或n階張量（考察集合是點集，點集的座標當然符合張量變換規律，所以可視作張量），並易於利用計算機編程求解。以2維點集的篩選為例，其算法大體上就是先根據說話人的描述對象（是自己的猜測還是對別人的猜測）所屬的組別確定是篩選行向量還是列向量，並根據說話人的判斷情況選擇是劃去選出的子向量組還是劃去未選中的向量組。然後根據說話人的發言順序逐步循環篩選下去。因為對話數量是有限的，所以只要題目所設條件信息充分，在有限步驟內一定可以完成篩選循環。求解答案的算法實際上也是判斷可解性的算法，如果到最後一個條件用完後還算不出答案，那麼原題一定無解。
除參考集合可以推廣至高維向量空間外，求解的對象也可由一個點推廣為多個點。即求解的某個元素變為求解的某個子集。當求解的點數增多時，與直接靠腦力思考的方法相比，代數方法仍具有判斷速度快和可程序化處理的優勢。

**另見**
 和與積的問題

**參考資料與腳註**
分類:2015年新加坡