1 điểm bởi GN⁺ 2024-05-26 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2024-05-26
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, Mar có thể hiểu là Jan=1, Feb=4, Mar=4
    • Tôi có thể nhớ ngay phần giải thích này. Tuy nhiên, khi thử với ngày 7 tháng 2 năm 2032, 20+5+4+7 ≡ 1 nê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 2
      Trong 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
    • Kết hợp ghi nhớ và tính toán thì rất hữu ích. 0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4độ 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ày
      Ví 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ằng Magic(n)=2n+Offset(n)+c
      Với dãy con số ma thuật 1 4 4 0 2 5 0 3 6 1 4 6 thì 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ính Magic(n)-2n-c để khôi phục độ lệch, chỉ cần nhớ rằng phạm vi độ lệch là [-1,4]
    • Phương pháp của Lewis Carroll có vẻ đơn giản và nhanh hơn nhiều, nên tôi không rõ phương pháp này có ưu điểm gì hơn, và độ phức tạp dường như tăng lên khá nhiều
  • 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

    • Lý do năm thuế của Anh đến nay vẫn bắt đầu vào ngày 6 tháng 4 cũng liên quan đến việc chuyển từ lịch Julius sang lịch Gregory gần 300 năm trước: https://theconversation.com/why-the-uk-tax-year-begins-on-april-6-its-a-very-strange-tale-57247
      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
    • Trang wiki về phương pháp của Carroll cũng giải thích tại Lewis Carroll's method, với ví dụ ngày 23 tháng 2 năm 1676, rằng các ngày tháng ở Anh trước năm 1752 được ghi theo Old Style, lấy ngày 25 tháng 3 làm ngày đầu năm mới
      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
    • Tiện ích cal củ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#L1079
    • Khi chạy cal 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 14
      Dù 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
    • La Mã cũng dùng năm bắt đầu từ tháng 3. Vì vậy tháng 2 có ít ngày, và October theo nghĩa đen là tháng thứ tám
  • 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ên 10-1+31 ≡ 4, nhưng bài là 3; tháng 3 nếu tính theo February cũng không khớp
    Thá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

    • Có vẻ January là giá trị cố định 0, February và March là giá trị cố định 3, và December cũng được xem là giá trị cố định mà bài đưa trực tiếp
      Logic (10-thứ tự)+số ngày mod 7 chỉ 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ùng item+days mod 7 của tháng trước, nhưng không rõ cách diễn giải đó được rút ra từ đâu trong bài
    • Tôi cũng bị kẹt ở đoạn này, và cách hiểu hợp lý nhất là như sau. Số mục của mọi tháng có thể được tính bằng cách lấy số mục của tháng trước cộng với số ngày của tháng trước rồi lấy mod 7
      Thá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 đó y không được tính là nguyên âm. Hoặc có khi cứ học thuộc lại dễ hơn
    • Tôi cũng gặp cùng vấn đề, đã thử nhiều cách diễn giải lại công thức nhưng chẳng có cách nào giúp được
  • Thuậ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=6
    Mục năm là 24/12=2, phần dư 0, số nhóm 4 trong phần đó là 0, nên 2+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ả được 6+2+1+24=33, 33 mod 7 = 5, nên là thứ Sáu

    • Tôi đã mong phần May=1 trong mục tháng được viết giải thích rõ hơn. Đọc phần giải thích mà vẫn hoàn toàn không hiểu
  • Vớ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

    • Cờ vua cũng vậy. Nếu nghĩ đến nước đi đầu tiên của Trắng đưa mã gần vua trắng nhất từ vị trí xuất phát tiến hai ô và sang trái một ô, thì từ thế kỷ 17 đến nay cách ghi nước đó đã liên tục ngắn lại
      Đầ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.html
  • Nế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

    • Đối tượng mà ông lấy làm chuẩn có lẽ là các giáo sư khác đang dạy toán ở Oxbridge
  • Tôi đã viết một script Python tính thứ trong tuần, nhập 2024-05-24 thì 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~2
    Tôi cũng xử lý để dùng mục thế kỷ riêng cho các ngày trước 14/9/1752

    • Việc bao gồm năm 1752 khá rắc rối. Ở Đế quốc Anh, khi áp dụng lịch Gregory, họ đã bỏ qua các ngày 3~13 tháng 9, khiến năm đó là năm duy nhất chỉ có 355 ngày
      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ử