1 คะแนน โดย GN⁺ 2024-05-26 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

วิธีคำนวณวันที่ที่ลูอิส แคร์รอลล์เสนอ

จดหมายที่ลูอิส แคร์รอลล์ส่งถึง Nature เมื่อวันที่ 31 มีนาคม 1887:

ข้าพเจ้าได้ค้นพบวิธีคำนวณวันในสัปดาห์ของวันที่ที่กำหนดได้ด้วยใจ จึงคิดว่าน่าจะเป็นเรื่องที่น่าสนใจสำหรับผู้อ่าน ข้าพเจ้าไม่ใช่นักคำนวณเร็ว และโดยเฉลี่ยใช้เวลาประมาณ 20 วินาทีในการแก้ปัญหาลักษณะนี้ ดังนั้นจึงมั่นใจว่านักคำนวณเร็วคงใช้เวลาไม่ถึง 15 วินาที

วิธีคำนวณ

  • แบ่งวันที่ที่กำหนดออกเป็น 4 ส่วน: ศตวรรษ, ปี, เดือน, วัน
  • คำนวณ 4 รายการต่อไปนี้ แล้วบวกแต่ละรายการเข้ากับผลรวมของรายการก่อนหน้า หากรายการหรือผลรวมเกิน 7 ให้หารด้วย 7 และเก็บไว้เฉพาะเศษ

รายการศตวรรษ

  • แบบเก่า (ก่อน 2 กันยายน 1752): ลบออกจาก 18
  • แบบใหม่ (หลัง 14 กันยายน 1752): หารด้วย 4 แล้วนำเศษไปลบออกจาก 3 จากนั้นคูณเศษนั้นด้วย 2
  • ตัวอย่าง: ในกรณีปี 1811 รายการศตวรรษคือ 18

รายการปี

  • บวกจำนวนเท่าของ 12, เศษ, และจำนวนเท่าของ 4 ของเศษนั้น

รายการเดือน

  • หากขึ้นต้นหรือจบด้วยสระ ให้นำลำดับของเดือนนั้นไปลบออกจาก 10 แล้วบวกจำนวนวันของเดือนนั้นเข้ากับค่านี้
  • ตัวอย่าง: รายการของเดือนมกราคมคือ '0', เดือนกุมภาพันธ์หรือมีนาคมคือ '3', เดือนธันวาคมคือ '12'
  • ค่าสุดท้าย: มกราคม 0, กุมภาพันธ์ 3, มีนาคม 3, เมษายน 6, พฤษภาคม 1, มิถุนายน 4, กรกฎาคม 6, สิงหาคม 2, กันยายน 5, ตุลาคม 0, พฤศจิกายน 3, ธันวาคม 5

รายการวัน

  • จำนวนวันของเดือนนั้น

การปรับปีอธิกสุรทิน

  • หากเป็นเดือนมกราคมหรือกุมภาพันธ์ของปีอธิกสุรทิน ให้ลบ '1' ออกจากผลรวมสุดท้าย หากผลรวมเป็น '0' ให้บวก 7 ก่อน
  • ปีอธิกสุรทิน: ปีที่หารด้วย 4 ลงตัว แต่ในแบบใหม่ให้ยกเว้นปีต้นศตวรรษที่หารด้วย 4 ไม่ลงตัว (เช่น 1800)

ผลลัพธ์สุดท้าย

  • ผลลัพธ์สุดท้ายแทนวันในสัปดาห์ '0' คือวันอาทิตย์, '1' คือวันจันทร์, และต่อไปตามลำดับ

ตัวอย่าง

18 กันยายน 1783

  • รายการศตวรรษ: 17 หารด้วย 4 เหลือเศษ '1' 3 ลบ 1 ได้ '2' 2 คูณ 2 ได้ '4'
  • รายการปี: 83 คือ 6 โหลกับ 11 รวมเป็น 17 บวก 2 ได้ 19 หารด้วย 7 เหลือ '5' ผลรวมทั้งหมดเป็น 9 หารด้วย 7 เหลือ '2'
  • รายการเดือน: รายการของเดือนสิงหาคมคือ '10 ลบ 8' คือ '2' รายการของเดือนกันยายนคือ '2 บวก 3' คือ '5' ผลรวมทั้งหมดเป็น 7 หารด้วย 7 เหลือ '0'
  • รายการวัน: 18 คือ '4'
  • ผลลัพธ์สุดท้าย: 'วันพฤหัสบดี'

23 กุมภาพันธ์ 1676

  • รายการศตวรรษ: 18 ลบ 16 ได้ '2'
  • รายการปี: 76 คือ 6 โหลกับ 4 รวมเป็น 10 บวก 1 ได้ 11 หารด้วย 7 เหลือ '4' ผลรวมทั้งหมดเป็น '6'
  • รายการเดือน: รายการของเดือนกุมภาพันธ์คือ '3' ผลรวมทั้งหมดเป็น 9 หารด้วย 7 เหลือ '2'
  • รายการวัน: 23 คือ '2' ผลรวมทั้งหมดเป็น '4'
  • การปรับปีอธิกสุรทิน: '3'
  • ผลลัพธ์สุดท้าย: 'วันพุธ'

(ที่มา: Edward Wakeling, Rediscovered Lewis Carroll Puzzles, 1995.)

ความเห็นของ GN⁺

  • วิธีคำนวณวันที่ของลูอิส แคร์รอลล์มีประโยชน์ต่อการพัฒนาการคิดเชิงคณิตศาสตร์
  • วิธีนี้เป็นแนวทางที่น่าสนใจในการคำนวณวันที่ได้โดยไม่ต้องใช้คอมพิวเตอร์
  • หากเข้าใจรายละเอียดอย่างการคำนวณปีอธิกสุรทิน ก็จะได้ผลลัพธ์ที่แม่นยำยิ่งขึ้น
  • การลองเปรียบเทียบกับการคำนวณปฏิทินแบบสมัยใหม่ก็น่าสนุกเช่นกัน
  • สำหรับผู้ที่ชื่นชอบปริศนาคณิตศาสตร์ เรื่องนี้อาจเป็นโจทย์ที่ท้าทาย

1 ความคิดเห็น

 
GN⁺ 2024-05-26
ความคิดเห็นบน Hacker News

สรุปความคิดเห็นจาก Hacker News

  • ผู้ใช้ A: วิธีนี้คล้ายกับวิธีที่ฉันใช้มาก และ Art Benjamin ก็ใช้วิธีนี้เช่นกัน ทำได้ภายใน 10–15 วินาที แต่ต้องอาศัยการฝึก การท่องจำเล็กน้อย และการคำนวณเลขง่าย ๆ เมื่อฝึกเทคนิคนี้ได้แล้วจะมีประโยชน์มาก

    • ตัวอย่าง: การคำนวณวันในสัปดาห์ของวันที่ 24 พฤษภาคม 2024
      12 ปีหลังจากปี 2012
      ปีอธิกสุรทิน 3 ครั้ง
      หมายเลขเดือนวิเศษ 2
      วันที่ 24
      รวมแล้วหาร 7 หาเศษ: วันศุกร์
      
  • ผู้ใช้ B: JH Conway ใช้เทคนิคอีกแบบหนึ่ง ซึ่งเร็วและง่ายกว่าสำหรับการคำนวณวันในสัปดาห์ของปีปัจจุบัน แต่เมื่อคำนวณ "Doomsday" ของปีอื่น ๆ จะยากกว่า จึงกลับไปใช้วิธีพื้นฐาน

  • ผู้ใช้ C: รู้สึกว่าน่าสนใจเมื่อได้อ่านเกี่ยวกับความต่างระหว่างวันที่แบบเก่าและแบบใหม่ที่เกิดขึ้นในปี 1752 ในศตวรรษที่ 18 ปีตามกฎหมายของอังกฤษเริ่มต้นในวันที่ 25 มีนาคม

  • ผู้ใช้ D: กำลังมีปัญหาในการทำความเข้าใจอัลกอริทึมสำหรับคำนวณหมายเลขเดือน อธิบายวิธีคำนวณหมายเลขของแต่ละเดือน และชี้ให้เห็นว่าผลจากการลองทำเองไม่ตรงกับผลที่บทความนำเสนอ

  • ผู้ใช้ E: อัลกอริทึมของ Carroll ได้พัฒนามาเรื่อย ๆ ตามกาลเวลา และได้แนะนำ First Sunday Doomsday Algorithm ที่รวมการปรับปรุงล่าสุดไว้แล้ว

  • ผู้ใช้ F: ได้เขียนบล็อกโพสต์ที่อธิบายวิธีที่ง่ายกว่า และสามารถดูรายละเอียดเพิ่มเติมได้จากลิงก์

  • ผู้ใช้ G: รู้สึกว่าน่าสนใจมากที่ได้ดู Art Benjamin สาธิตเทคนิคนี้ในการบรรยาย TED สามารถตามการคำนวณระหว่างทางได้จากการเคลื่อนไหวมือของเขา

  • ผู้ใช้ H: ใช้วิธีของ Lewis Carroll เพื่อคำนวณวันในสัปดาห์ของวันที่ 24 พฤษภาคม 2024

    • ตัวอย่าง:
      ค่าศตวรรษ: 6
      ค่าปี: 2
      ค่าเดือน: 1
      ค่าวันที่: 24
      ผลรวม: วันศุกร์
      
  • ผู้ใช้ I: แบ่งปันวิธีใช้โค้ด Python เพื่อคำนวณวันในสัปดาห์ของวันที่

    def compute_day_of_week(date):
        day, month, year = date
        century = year // 100
        year_part = year % 100
    
        # 세기 항목 계산
        if year < 1752 or (year == 1752 and (month < 9 or (month == 9 and day < 14))):
            century_item = (18 - century) % 7
        else:
            century_item = ((3 - (century % 4)) * 2) % 7
    
        # 연도 항목 계산
        year_item = (year_part + (year_part // 4)) % 7
    
        # 월 항목 계산
        month_items = [0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5]
        month_item = month_items[month - 1]
    
        # 날짜 항목 계산
        day_item = day % 7
    
        # 총합
        total = (century_item + year_item + month_item + day_item) % 7
    
        # 윤년 보정
        if month <= 2 and (year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)):
            total = (total - 1 + 7) % 7
    
        return total
    
    def day_of_week_string(day_index):
        days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
        return days[day_index]
    
    # 날짜 입력 받기
    date_input = input("Enter a date (yyyy-mm-dd): ")
    year, month, day = map(int, date_input.split('-'))
    date = (day, month, year)
    
    # 요일 계산 및 출력
    day_index = compute_day_of_week(date)
    day_name = day_of_week_string(day_index)
    print(f"The day of the week for {date_input} is {day_name}.")
    
  • ผู้ใช้ J: เน้นย้ำว่าการเขียนสัญลักษณ์มีความสำคัญเพียงใดในคณิตศาสตร์ และกล่าวว่ามันเป็นองค์ประกอบที่สำคัญมากในทั้งคณิตศาสตร์และวิทยาการคอมพิวเตอร์

  • ผู้ใช้ K: ถ้าทำสิ่งนี้ได้ภายใน 20 วินาทีก็น่าทึ่งมาก เพราะตัวเองไม่เคยคิดว่าตัวเองเป็น "เครื่องคิดเลขเร็ว"