Lewis Carroll – Kỹ thuật tính thứ trong tuần cho một ngày cụ thể (1887)
(futilitycloset.com)- Trong bức thư gửi Nature ngày 31/3/1887, Lewis Carroll đã đề xuất một quy trình để tính nhẩm thứ trong tuần của một ngày bất kỳ
- Ngày được tách thành bốn hạng mục thế kỷ·năm·tháng·ngày, cộng lại với nhau, và ở mỗi bước trung gian chỉ giữ lại phần dư khi chia cho 7 để giảm độ phức tạp
- Carroll nói rằng bản thân ông cũng mất trung bình khoảng 20 giây, và cho rằng người tính nhanh có thể làm trong vòng 15 giây
- Quy tắc bao gồm khác biệt giữa Old Style và New Style, điều chỉnh năm nhuận, cùng các giá trị hạng mục theo từng tháng; kết quả cuối được diễn giải theo thứ tự 0=Sunday, 1=Monday
- Trong các ví dụ tính toán, ngày 18/9/1783 cho ra Thursday, còn ngày 23/2/1676 sau điều chỉnh năm nhuận cho ra Wednesday
Cách chia ngày thành bốn hạng mục
- Trong bức thư gửi Nature ngày 31/3/1887, Lewis Carroll đã trình bày một phương pháp tìm thứ trong tuần của một ngày cụ thể bằng tính nhẩm
- Ngày đầu vào được chia thành bốn phần
- Century-Item: hai chữ số đầu của năm
- Year-Item: phần năm sau thế kỷ
- Month-Item: tháng
- Day-Item: ngày trong tháng đó
- Tính từng hạng mục rồi cộng vào tổng tích lũy; nếu hạng mục hoặc tổng vượt quá 7 thì chỉ giữ lại phần dư khi chia cho 7
Quy tắc tính cho từng hạng mục
-
Century-Item
- Với Old Style, coi mốc kết thúc là ngày 2/9/1752 và lấy 18 trừ đi giá trị thế kỷ
- Với New Style, coi mốc bắt đầu là ngày 14/9/1752, lấy 3 trừ đi phần dư của giá trị thế kỷ khi chia cho 4, rồi nhân với 2
- Ví dụ, Century-Item của năm 1811 dùng hai chữ số đầu là 18
-
Year-Item
- Lấy số lượng nhóm 12 trong phần năm sau thế kỷ, cộng với phần dư còn lại, rồi cộng thêm số lượng nhóm 4 có trong phần dư đó
-
Month-Item
- Nếu tên tháng bắt đầu hoặc kết thúc bằng một nguyên âm, lấy 10 trừ đi thứ tự của tháng trong năm
- Cộng thêm số ngày của tháng đó thì sẽ được giá trị hạng mục của tháng tiếp theo
- Các giá trị theo tháng dùng sau khi chia cho 7 như sau
- January 0, February 3, March 3, April 6, May 1, June 4
- July 6, August 2, September 5, October 0, November 3, December 5
-
Day-Item
- Dùng chính ngày trong tháng đó
-
Điều chỉnh năm nhuận
- Nếu ngày rơi vào January hoặc February của năm nhuận thì trừ 1 khỏi tổng cuối cùng
- Nếu tổng bằng 0 thì trước tiên cộng 7 rồi mới trừ 1
- Năm nhuận là năm chia hết cho 4, nhưng với năm tròn thế kỷ theo New Style thì là ngoại lệ nếu số thế kỷ không chia hết cho 4
- Ví dụ, 1800 là trường hợp ngoại lệ này trong New Style
- Kết quả cuối được diễn giải thành số thứ trong tuần, trong đó 0 là Sunday, 1 là Monday, và các giá trị tiếp theo tương ứng theo thứ tự
Ví dụ tính toán và nguồn
- Kết quả tính cho ngày 18/9/1783 là Thursday
- Ngày 23/2/1676 sau điều chỉnh năm nhuận cho ra Wednesday
- Quy trình này được truyền lại qua cuốn Rediscovered Lewis Carroll Puzzles, 1995 của Edward Wakeling
1 bình luận
Các ý kiến trên Hacker News
Cách này rất giống phương pháp tôi dùng, và khi nói chuyện với Art Benjamin thì ông ấy cũng dùng một phương pháp tương tự. Làm trong vòng 10–15 giây thì dễ, nhưng cần luyện tập, ghi nhớ rất ít và nhẩm tính một chút
Tôi cũng dùng thường xuyên để giữ cảm giác, và một khi đã quen thì nó hữu ích bất ngờ nên cứ tiếp tục dùng. J. H. Conway dùng một kỹ thuật khác là Doomsday rule, và khi tính ngày trong năm nay thì tôi chuyển sang cách đó. Nó nhanh hơn và dễ hơn, nhưng việc tìm “Doomsday” của các năm khác thì khó hơn, nên khi đó tôi quay lại phương pháp ban đầu
Ví dụ, với 2024/05/24, cộng 12 năm kể từ 2012, 3 năm nhuận, con số ma thuật của tháng 5 là 2, và ngày 24, rồi lấy mod 7:
(12+3+2+24)=6, tức là thứ Sáu. Con số ma thuật của từng tháng có thể nhớ là144 / 025 / 036 / 146, và nếu cần cũng có thể tính từ nguyên lý144 : Jan, Feb, Marcó thể hiểu là Jan=1, Feb=4, Mar=420+5+4+7 ≡ 1nên tôi kỳ vọng là Chủ nhật, nhưng thực tế lại là thứ Bảy; nguyên nhân là 2032 là năm nhuận và ngày đó nằm trước 29 tháng 2Trong những trường hợp như vậy, tức là trước ngày 29 tháng 2 của năm nhuận hoặc đúng đến ngày đó, phải trừ đi 1
0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4là độ lệch giữa ngày trong năm của ngày mùng 1 mỗi tháng và ngày trong năm nếu giả định tất cả các tháng trước đó đều có 30 ngàyVí dụ, nếu 11 tháng đầu đều có 30 ngày thì ngày 25 tháng 12 sẽ là ngày thứ
30×11+25=355, và cộng thêm độ lệch thứ 12 là 4 thì sẽ thành ngày thứ 359 thực tế. Dãy độ lệch này dễ nhớ, và sau khi nhớ thì con số ma thuật theo tháng có thể lấy bằngMagic(n)=2n+Offset(n)+cVới dãy con số ma thuật
1 4 4 0 2 5 0 3 6 1 4 6thìc=-1, và tháng 12 là2×12+4-1 ≡ 6 (mod 7). Ngược lại, từ con số ma thuật đã nhớ cũng có thể tínhMagic(n)-2n-cđể khôi phục độ lệch, chỉ cần nhớ rằng phạm vi độ lệch là[-1,4]Khi đọc bài, tôi đã tìm hiểu sự khác nhau giữa ngày tháng Old Style/New Style và những gì đã xảy ra năm 1752. Theo Calendar (New Style) Act 1750, cho đến thế kỷ 18, theo luật ở Anh, một năm trong nhiều thế kỷ bắt đầu vào ngày 25 tháng 3, tức Lady Day
Vì vậy, chẳng hạn ngay sau ngày 24 tháng 3 năm 1707 là ngày 25 tháng 3 năm 1708, còn ngày sau 31 tháng 12 năm 1708 vẫn là ngày 1 tháng 1 năm 1708, và năm 1709 phải gần ba tháng sau mới tới. Thật may là điều đó đã được thay đổi
Tôi tự hỏi ở các nước khác có còn nhiều “bản vá di sản” từ xa xưa như vậy không
Nhưng phương pháp của Carroll giả định ngày 1 tháng 1 là ngày đầu năm mới, nên không đi đến đáp án đúng là “Friday”. Điều thú vị là những người tái bản phương pháp của Carroll đã không chỉ ra lỗi này, và bài viết được liên kết cũng có cùng khiếm khuyết
calcủa Linux có xử lý đặc biệt để nhận biết tháng 9 năm 1752: https://github.com/util-linux/util-linux/blob/9f15d2de8117732845b2e891a2d24d987ee4e3ed/misc-utils/cal.c#L1079cal 1752, trong lịch tháng 9 bị thiếu các ngày nằm giữa thứ Tư ngày 2 và thứ Năm ngày 14Dù còn tranh luận, cũng có cách giải thích rằng việc chuyển sang lịch Gregory là nguồn gốc của Ngày Cá tháng Tư: https://en.wikipedia.org/wiki/April_Fools%27_Day, https://en.wikipedia.org/wiki/Gregorian_calendar
Khó theo dõi cách tính mục tháng trong bài. Bài giải thích rằng nếu tháng bắt đầu hoặc kết thúc bằng nguyên âm thì lấy 10 trừ đi thứ tự của tháng đó trong năm, rồi cộng thêm số ngày của tháng đó thì sẽ ra mục của tháng tiếp theo
Nhưng tháng trước của tháng 1 là tháng 12, vốn không bắt đầu hay kết thúc bằng nguyên âm, nên lẽ ra không trừ từ 10 mà phải là
12+31 ≡ 1, trong khi bài nói là 0. Tháng 2 cũng vậy: vì January kết thúc bằng nguyên âm nên10-1+31 ≡ 4, nhưng bài là 3; tháng 3 nếu tính theo February cũng không khớpTháng 4 và tháng 5 thì đúng, nhưng tháng 6 lại không đúng nữa, nên tôi không biết mình đã hiểu sai ở đâu
Logic
(10-thứ tự)+số ngày mod 7chỉ khớp với các tháng cách tháng như May, July, September, November khi lấy tháng trước làm chuẩn; còn quy tắc nguyên âm trông giống một mẹo ghi nhớ để nhớ nên áp dụng phép tính này cho tháng nào hơn. Các tháng còn lại dường như dùngitem+days mod 7của tháng trước, nhưng không rõ cách diễn giải đó được rút ra từ đâu trong bàiTháng 1 không có tháng trước, nên coi tất cả là 0 và để kết quả là 0. Không cần tính tuần tự từ tháng 1 đến tháng mong muốn; với những tháng bắt đầu hoặc kết thúc bằng nguyên âm, có thể dùng lối tắt rằng số mục của tháng đó là
10-số tháng. Khi đóykhông được tính là nguyên âm. Hoặc có khi cứ học thuộc lại dễ hơnThuật toán của Carroll đã phát triển theo thời gian. First Sunday Doomsday Algorithm(https://firstsundaydoomsday.blogspot.com/2009/12/quick-start-guide.html) bao gồm các cải tiến được công bố đến năm 2023, và cũng có quy tắc “odd+11” của Fong & Walters để tính mã năm: https://arxiv.org/abs/1010.0765
Tôi có một bài viết đã ghi lại vì cho rằng đây là cách tính trực quan hơn: https://gcanyon.wordpress.com/2013/04/09/a-better-way-to-calculate-the-day-of-the-week/
Cảnh Art Benjamin làm điều này trong bài TED thật sự rất thú vị. Nhìn kỹ sẽ thấy ông dùng cử động tay để theo dõi các phép tính trung gian
Biết rồi thì thấy hiển nhiên, nhưng rất thông minh. Bắt đầu từ 7:47 tại https://www.ted.com/talks/arthur_benjamin_a_performance_of_mathemagic
Nếu tính hôm nay, tức ngày 24/5/2024, theo cách của Lewis Carroll thì như sau. Mục thế kỷ là thế kỷ 20 nên
20/4=5, phần dư 0,3-0=3,3×2=6Mục năm là
24/12=2, phần dư 0, số nhóm 4 trong phần đó là 0, nên2+0+0=2. Mục tháng trong bài là May=1, và mục ngày là 24. Cộng tất cả được6+2+1+24=33,33 mod 7 = 5, nên là thứ SáuVới những người nói rằng ký hiệu không quan trọng, tôi muốn nói rằng toàn bộ toán học trước khi có được những hệ ký hiệu mới tốt hơn đều trông như thế này
Thậm chí có thể nói trong toán học hầu như không có gì quan trọng ngoài ký hiệu, và khoa học máy tính cũng vậy. Đây cũng là lý do khi các biến được viết tường minh thì các ngôn ngữ họ Lisp là lựa chọn hiển nhiên
Đầu những năm 1600 là “The white king commands his owne knight into the third house before his owne bishop.”, giữa những năm 1700 là
K. knight to His Bishop's 3d., đầu những năm 1800 làK.Kt. to B.third sq., khoảng năm 1890 làKKt-B3, giữa những năm 1900 làN-KB3, còn hiện nay làNf3, hoặc nếu muốn tránh tên quân theo từng ngôn ngữ thì là♘f3: https://www.knightschessclub.org/the_history_of_notation.htmlNếu làm được trong vòng 20 giây thì đáng gọi là ấn tượng. Bản thân ông không xem mình là một người tính nhẩm nhanh
Tôi đã viết một script Python tính thứ trong tuần, nhập
2024-05-24thì ra Friday. Cách làm là cộng mục thế kỷ, mục năm, mảng mục tháng và mục ngày, rồi áp dụng hiệu chỉnh năm nhuận cho tháng 1~2Tôi cũng xử lý để dùng mục thế kỷ riêng cho các ngày trước 14/9/1752
Những ngày bị biến mất như vậy không được áp dụng đồng loạt trên toàn thế giới; thời điểm áp dụng khác nhau tùy quốc gia và tôn giáo của người ghi chép, nên chúng tiếp tục là vấn đề đau đầu trong các ghi chép lịch sử