1 puan yazan GN⁺ 2024-05-26 | 1 yorum | WhatsApp'ta paylaş

Lewis Carroll'un önerdiği tarih hesaplama yöntemi

Lewis Carroll'un 31 Mart 1887'de Nature'a gönderdiği mektup:

Verilen bir tarihin haftanın hangi gününe denk geldiğini zihinden hesaplamaya yarayan şu yöntemi keşfettiğim için, okurların ilgisini çekebileceğini düşünerek gönderiyorum. Ben hızlı bir hesapçı değilim ve ortalama olarak bu tür bir problemi çözmem yaklaşık 20 saniye sürüyor. Dolayısıyla hızlı bir hesapçının bunun için 15 saniyeden de az zamana ihtiyaç duyacağından eminim.

Hesaplama yöntemi

  • Verilen tarihi 4 parçaya ayırın: yüzyıl, yıl, ay ve gün.
  • Aşağıdaki 4 kalemi hesaplayın ve her kalemi önceki kalemlerin toplamına ekleyin. Kalem ya da toplam 7'yi aşarsa 7'ye bölüp yalnızca kalanı tutun.

Yüzyıl kalemi

  • Eski usul (2 Eylül 1752'den önce): 18'den çıkarın.
  • Yeni usul (14 Eylül 1752'den sonra): 4'e bölün, kalanı 3'ten çıkarın, sonra sonucu 2 ile çarpın.
  • Örnek: 1811 için yüzyıl kalemi 18'dir.

Yıl kalemi

  • 12'nin katlarını, kalanı ve kalanın 4'e bölümünü toplayın.

Ay kalemi

  • Bir sesli harfle başlıyor ya da bitiyorsa, o ayın sıra numarasını 10'dan çıkarın. Bu değere o ayın gün sayısını ekleyin.
  • Örnek: Ocak'ın kalemi '0', Şubat veya Mart'ınki '3', Aralık'ınki '12'.
  • Son değerler: Ocak 0, Şubat 3, Mart 3, Nisan 6, Mayıs 1, Haziran 4, Temmuz 6, Ağustos 2, Eylül 5, Ekim 0, Kasım 3, Aralık 5.

Gün kalemi

  • Ayın günü.

Artık yıl düzeltmesi

  • Artık yılda Ocak veya Şubat ise, son toplamdan '1' çıkarın. Toplam '0' ise, önce 7 ekleyin.
  • Artık yıl: 4'e bölünen yıl; ancak yeni usulde yüzyıl yılları 4'e bölünmüyorsa hariç tutulur (ör. 1800).

Nihai sonuç

  • Nihai sonuç haftanın gününü gösterir. '0' Pazar, '1' Pazartesi, vb.

Örnekler

18 Eylül 1783

  • Yüzyıl kalemi: 17, 4'e bölününce kalan '1'. 3'ten 1 çıkarılınca '2'. 2, 2 ile çarpılınca '4'.
  • Yıl kalemi: 83, 6 düzine ve 11 eder, toplam 17. 2 eklenince 19, 7'ye bölününce '5'. Genel toplam 9, 7'ye bölününce '2'.
  • Ay kalemi: Ağustos'un kalemi '10'dan 8 çıkarılınca', yani '2'. Eylül'ünki '2'ye 3 eklenince, yani '5'. Genel toplam 7, 7'ye bölününce '0'.
  • Gün kalemi: 18, yani '4'.
  • Nihai sonuç: 'Perşembe'.

23 Şubat 1676

  • Yüzyıl kalemi: 16, 18'den çıkarılınca '2'.
  • Yıl kalemi: 76, 6 düzine ve 4 eder, toplam 10. 1 eklenince 11, 7'ye bölününce '4'. Genel toplam '6'.
  • Ay kalemi: Şubat'ın kalemi '3'. Genel toplam 9, 7'ye bölününce '2'.
  • Gün kalemi: 23, yani '2'. Genel toplam '4'.
  • Artık yıl düzeltmesi: '3'.
  • Nihai sonuç: 'Çarşamba'.

(Kaynak: Edward Wakeling, Rediscovered Lewis Carroll Puzzles, 1995.)

GN⁺ görüşü

  • Lewis Carroll'un tarih hesaplama yöntemi, matematiksel düşünmeyi geliştirmek için yararlıdır.
  • Bu yöntem, bilgisayar olmadan da tarih hesaplamanın ilginç bir yoludur.
  • Artık yıl hesabı gibi ayrıntıları anlamak daha doğru sonuçlar elde etmeyi sağlar.
  • Modern takvim hesaplamalarıyla karşılaştırmak da eğlenceli olabilir.
  • Matematiksel bulmacaları sevenler için zorlayıcı bir problem olabilir.

1 yorum

 
GN⁺ 2024-05-26
Hacker News görüşü

Hacker News yorumları derleme özeti

  • Kullanıcı A: Bu yöntem, benim kullandığım yöntemle ve Art Benjamin’in kullandığı yöntemle çok benzer. 10–15 saniye içinde yapılabiliyor, ancak pratik, biraz ezber ve basit aritmetik gerektiriyor. Bu tekniği öğrenince çok faydalı oluyor.

    • Örnek: 24 Mayıs 2024’ün haftanın hangi günü olduğunu hesaplama
      2012'den sonra 12 yıl
      3 artık yıl
      Sihirli ay numarası 2
      Gün 24
      Toplamın 7’ye bölümünden kalan: Cuma
      
  • Kullanıcı B: JH Conway farklı bir teknik kullanıyordu ve mevcut yılın haftanın gününü hesaplarken daha hızlı ve kolay. Ancak başka yıllar için "Doomsday" hesaplamak zor olduğu için temel yönteme geri dönüyor.

  • Kullanıcı C: 1752’de meydana gelen eski ve yeni tarih sistemi farkını okumak ilginç geldi. 18. yüzyılda İngiltere’de yasal yıl 25 Mart’ta başlıyordu.

  • Kullanıcı D: Ay numarası hesaplama algoritmasını anlamakta zorlanıyor. Her ayın numarasının nasıl hesaplandığını açıklıyor ve kendi denemesiyle makalede verilen sonuçların uyuşmadığını belirtiyor.

  • Kullanıcı E: Carroll’un algoritması zaman içinde evrim geçirmiş. En yeni iyileştirmeleri içeren First Sunday Doomsday Algorithm’i tanıtıyor.

  • Kullanıcı F: Daha basit bir yöntemi açıklayan bir blog yazısı yazmış. Ayrıntılar bağlantı üzerinden görülebilir.

  • Kullanıcı G: Art Benjamin’in bu tekniği bir TED konuşmasında sergilemesini izlemenin çok ilginç olduğunu söylüyor. El hareketlerinden ara hesaplamaları takip etmek mümkün.

  • Kullanıcı H: Lewis Carroll’un yöntemini kullanarak 24 Mayıs 2024’ün haftanın gününü hesaplıyor.

    • Örnek:
      Yüzyıl kalemi: 6
      Yıl kalemi: 2
      Ay kalemi: 1
      Gün kalemi: 24
      Toplam: Cuma
      
  • Kullanıcı I: Python kodu kullanarak bir tarihin haftanın gününü hesaplama yöntemini paylaşıyor.

    def compute_day_of_week(date):
        day, month, year = date
        century = year // 100
        year_part = year % 100
    
        # Yüzyıl kalemini hesapla
        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
    
        # Yıl kalemini hesapla
        year_item = (year_part + (year_part // 4)) % 7
    
        # Ay kalemini hesapla
        month_items = [0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5]
        month_item = month_items[month - 1]
    
        # Gün kalemini hesapla
        day_item = day % 7
    
        # Toplam
        total = (century_item + year_item + month_item + day_item) % 7
    
        # Artık yıl düzeltmesi
        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]
    
    # Tarih girdisini al
    date_input = input("Enter a date (yyyy-mm-dd): ")
    year, month, day = map(int, date_input.split('-'))
    date = (day, month, year)
    
    # Haftanın gününü hesapla ve yazdır
    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}.")
    
  • Kullanıcı J: Matematikte gösterimin ne kadar önemli olduğunu vurguluyor. Gösterimin matematik ve bilgisayar bilimlerinde çok önemli bir unsur olduğunu belirtiyor.

  • Kullanıcı K: Bunu 20 saniye içinde yapabilmek etkileyici olurdu. Kendisini hiç "hızlı hesapçı" olarak görmemiş.