Lewis Carroll – Belirli Bir Tarihin Haftanın Hangi Gününe Geldiğini Hesaplama Tekniği (1887)
(futilitycloset.com)- Lewis Carroll, 31 Mart 1887'de Nature'a gönderdiği mektupta, herhangi bir tarihin haftanın gününü zihinden bulmak için bir yöntem önerir
- Tarihi yüzyıl·yıl·ay·gün olmak üzere dört öğeye ayırıp toplar; hesaplamanın her ara adımında yalnızca 7'ye bölümden kalanı bırakarak karmaşıklığı azaltır
- Carroll, kendisinin de ortalama yaklaşık 20 saniye sürdüğünü, hızlı hesap yapan birinin ise bunu 15 saniyenin altında yapabileceğini söyler
- Kurallar Old Style ile New Style arasındaki farkı, artık yıl düzeltmesini ve aylara göre öğe değerlerini içerir; son değer 0=Sunday, 1=Monday sırasıyla yorumlanır
- Örnek hesapta 18 Eylül 1783 Thursday, 23 Şubat 1676 ise artık yıl düzeltmesinden sonra Wednesday olur
Tarihi dört öğeye ayırma yöntemi
- Lewis Carroll, 31 Mart 1887'de Nature'a gönderdiği mektupta belirli bir tarihin haftanın hangi gününe geldiğini zihinden hesaplama yöntemini sunar
- Girilen tarih dört parçaya ayrılır
- Century-Item: yılın ilk iki hanesi
- Year-Item: yüzyıldan sonraki yıl
- Month-Item: ay
- Day-Item: ayın günü
- Her öğe hesaplanıp birikimli toplama eklenir; öğe ya da toplam 7'yi aşarsa yalnızca 7'ye bölümden kalan tutulur
Öğelere göre hesap kuralları
-
Century-Item
- Old Style'ın 2 Eylül 1752'de bittiği kabul edilir ve yüzyıl değeri 18'den çıkarılır
- New Style'ın 14 Eylül 1752'de başladığı kabul edilir; yüzyıl değerinin 4'e bölümünden kalan 3'ten çıkarılır, ardından 2 ile çarpılır
- Örneğin 1811 yılının Century-Item değeri için ilk iki hane olan 18 kullanılır
-
Year-Item
- Yüzyıldan sonraki yıl içinde kaç tane 12 olduğu, kalan değer ve kalan değerin içindeki 4 sayısı toplanır
-
Month-Item
- Ay adı bir sesli harfle başlıyor ya da bitiyorsa, o ayın yıl içindeki sırası 10'dan çıkarılır
- Buna o ayın gün sayısı eklenirse bir sonraki ayın öğe değeri elde edilir
- 7'ye bölümden sonra kullanılacak aylık değerler şöyledir
- 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
- Doğrudan o ayın günü kullanılır
-
Artık yıl düzeltmesi
- Tarih artık yılın January veya February aylarındaysa son toplamdan 1 çıkarılır
- Toplam 0 ise önce 7 eklenir, ardından 1 çıkarılır
- Artık yıl, 4'e bölünebilen yıldır; ancak New Style'daki yüzyıl yıllarında, yüzyıl sayısı 4'e bölünemiyorsa istisna uygulanır
- Örnek olarak 1800 yılı New Style'da bu istisnaya girer
- Nihai sonuç hafta günü numarası olarak yorumlanır; 0 Sunday, 1 Monday'dir ve sonrası sırayla devam eder
Hesap örnekleri ve kaynak
- 18 Eylül 1783 için hesap sonucu Thursday olur
- 23 Şubat 1676, artık yıl düzeltmesinden sonra Wednesday olur
- Bu yöntem, Edward Wakeling'in 1995 tarihli Rediscovered Lewis Carroll Puzzles kitabı aracılığıyla aktarılmıştır
1 yorum
Hacker News yorumları
Bu yöntem benim kullandığım yönteme çok benziyor; Art Benjamin’le konuştuğumda onun da benzer bir yöntem kullandığını gördüm. 10-15 saniye içinde yapmak kolay, ama pratik, çok az ezber ve biraz zihinden hesap gerektiriyor.
Ben bunu formumu korumak için de sık sık kullanıyorum; bir kez öğrenince şaşırtıcı derecede işe yarıyor ve kullanmaya devam ediyorsunuz. J. H. Conway farklı bir teknik olan Doomsday rule yöntemini kullanıyordu; ben de bu yılın tarihlerini hesaplarken ona geçtim. Daha hızlı ve kolay, ama başka yılların “Doomsday” değerini bulmak daha zor olduğundan o durumda asıl yöntemime dönüyorum.
Örneğin 2024/05/24 için 2012’den sonra 12 yıl, 3 artık yıl, Mayıs’ın sihirli sayısı 2 ve gün 24 toplanıp mod 7 alınırsa
(12+3+2+24)=6, yani Cuma olur. Her ayın sihirli sayısı144 / 025 / 036 / 146olarak ezberlenebilir; gerekirse mantığından da hesaplanabilir.144 : Jan, Feb, Mar, Jan=1, Feb=4, Mar=4 gibi anlaşılmalı.20+5+4+7 ≡ 1çıktığı için Pazar bekledim, oysa gerçekte Cumartesi’ydi; çünkü 2032 artık yıldı ve tarih 29 Şubat’tan önceydi.Bu gibi durumlarda, yani artık yılın 29 Şubat’ından önce veya o güne kadar, 1 çıkarmak gerekiyor.
0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4, her ayın 1. gününün yıl içindeki günü ile önceki ayların hepsi 30 günmüş varsayımıyla bulunan yıl içindeki gün arasındaki ofset değerleridir.Örneğin ilk 11 ayın hepsi 30 gün olsaydı 25 Aralık
30×11+25=355. gün olurdu; buna 12. ofset olan 4 eklenince gerçek 359. gün elde edilir. Bu ofset dizisini ezberlemek kolaydır; ezberledikten sonra aylık sihirli sayıMagic(n)=2n+Offset(n)+cile elde edilebilir.1 4 4 0 2 5 0 3 6 1 4 6sihirli sayılarındac=-1’dir ve Aralık2×12+4-1 ≡ 6 (mod 7)olur. Tersine, ezberlenen sihirli sayıdanMagic(n)-2n-chesaplanarak ofset de geri çıkarılabilir; yalnızca ofset aralığının[-1,4]olduğunu hatırlamak yeterlidir.Yazıyı okurken Old Style/New Style tarih farkını ve 1752’de olanları araştırmaya başladım. Calendar (New Style) Act 1750’ye göre, 18. yüzyıla kadar İngiltere’de hukukî olarak yıl, yüzyıllar boyunca 25 Mart’ta, yani Lady Day’de başlıyordu.
Bu yüzden örneğin 24 Mart 1707’nin hemen ertesi günü 25 Mart 1708’di; 31 Aralık 1708’in ertesi günü ise hâlâ 1 Ocak 1708’di ve 1709’a neredeyse üç ay vardı. Değişmiş olması gerçekten iyi olmuş.
Başka ülkelerde de böyle eski dönemlerden kalma çok sayıda miras yama var mı merak ediyorum.
Ancak Carroll yöntemi 1 Ocak’ı yılbaşı varsaydığı için doğru cevap olan “Friday” sonucuna ulaşamıyor. İlginç olan, Carroll yöntemini yeniden yayımlayan kişilerin bu hataya değinmemiş olması; bağlantı verilen yazıda da aynı kusur var.
calaracı Eylül 1752’yi tanıyan özel bir işleme sahip: https://github.com/util-linux/util-linux/blob/9f15d2de8117732845b2e891a2d24d987ee4e3ed/misc-utils/cal.c#L1079cal 1752çalıştırınca Eylül takviminde Çarşamba 2’si ile Perşembe 14’ü arasındaki tarihlerin eksik olduğunu gördüm.Tartışmalı olsa da Gregoryen takvimine geçişin 1 Nisan şakasının kökeni olduğu açıklaması da var: https://en.wikipedia.org/wiki/April_Fools%27_Day, https://en.wikipedia.org/wiki/Gregorian_calendar
Yazıdaki ay öğesini hesaplama yöntemini takip etmek zor. Yazı, bir ay sesli harfle başlıyor ya da bitiyorsa o ayın yıl içindeki sırasını 10’dan çıkarıp buna o ayın gün sayısını ekleyince sonraki ayın öğesinin elde edildiğini söylüyor.
Ancak Ocak’tan önceki ay olan Aralık sesli harfle başlamıyor ya da bitmiyor; bu yüzden 10’dan çıkarılmadan
12+31 ≡ 1olması gerekirken yazı 0 diyor. Şubat için de January sesli harfle bittiğinden10-1+31 ≡ 4olur, ama yazıda 3; Mart da February temel alınarak hesaplanınca tutmuyor.Nisan ve Mayıs tutuyor, ama Haziran yine tutmadığı için neyi yanlış anladığımı bilmiyorum.
(10-sıra)+gün sayısı mod 7mantığı önceki ay temel alındığında yalnızca May, July, September, November gibi iki ayda bir gelen aylarda tutuyor; sesli harf kuralı ise bu hesabın hangi aya uygulanacağını hatırlamak için kullanılan bir anımsatıcıya daha yakın görünüyor. Diğer aylar için önceki ayınitem+days mod 7değerinin kullanıldığı anlaşılıyor, ama bu yorumun yazının neresinden çıkarıldığı belirsiz.Ocak’ın önceki ayı olmadığından hepsini 0 kabul edip sonucu da 0 bırakıyoruz. İstenen aya kadar Ocak’tan başlayıp her seferinde hesaplamak gerekmiyor; başı ya da sonu sesli harf olan aylarda, o ayın öğe numarası için
10-ay numarasıkestirmesi kullanılabiliyor. Buradaysesli harf sayılmıyor. Ya da belki doğrudan ezberlemek daha kolay olabilir.Carroll’ın algoritması zaman içinde gelişti. First Sunday Doomsday Algorithm(https://firstsundaydoomsday.blogspot.com/2009/12/quick-start-guide.html) 2023’e kadar yayımlanmış iyileştirmeleri içeriyor; yıl kodunu hesaplayan Fong & Walters’ın “odd+11” kuralı da içinde: https://arxiv.org/abs/1010.0765
Bunu daha sezgisel hesaplama yöntemi olarak gördüğüm için derlediğim bir yazı var: https://gcanyon.wordpress.com/2013/04/09/a-better-way-to-calculate-the-day-of-the-week/
Art Benjamin’in TED konuşmasında bunu yaptığı sahne gerçekten ilginç. Dikkatli bakınca ara hesapları el hareketleriyle takip ettiğini görebiliyorsunuz.
Öğrenince bariz görünüyor, ama çok zekice. https://www.ted.com/talks/arthur_benjamin_a_performance_of_mathemagic adresinde 7:47’den itibaren başlıyor.
Lewis Carroll yöntemiyle bugünü, yani 24 Mayıs 2024’ü hesaplarsak şöyle. Yüzyıl öğesi 20. yüzyıl olduğu için
20/4=5, kalan 0,3-0=3,3×2=6.Yıl öğesi
24/12=2, kalan 0, bunun içindeki 4 sayısı 0 olduğundan2+0+0=2. Ay öğesi yazıda May=1, gün öğesi ise 24. Hepsini toplarsak6+2+1+24=33,33 mod 7 = 5; bu da Cuma eder.Gösterimin önemli olmadığını söyleyenlere, daha iyi yeni gösterimler elde edilmeden önce matematiğin tamamının böyle göründüğünü söylemek isterim.
Hatta matematikte gösterim dışında pek az şeyin önemli olduğu söylenebilir; bilgisayar biliminde de durum aynı. Değişkenler açık olduğunda Lisp ailesi dillerin bariz seçenek olmasının nedeni de bu.
1600’lerin başında “The white king commands his owne knight into the third house before his owne bishop.” idi; 1700’lerin ortasında
K. knight to His Bishop's 3d., 1800’lerin başındaK.Kt. to B.third sq., 1890 civarındaKKt-B3, 1900’lerin ortasındaN-KB3, bugün iseNf3ya da dile göre taş adlarından kaçınmak isterseniz♘f3oldu: https://www.knightschessclub.org/the_history_of_notation.html20 saniyenin altında yaptıysa buna etkileyici denir. Kendisi kendini hızlı hesap yapan biri olarak görmüyordu.
Python ile haftanın gününü hesaplayan bir betik yazıp
2024-05-24girince Friday çıkıyor. Yüzyıl öğesi, yıl öğesi, ay öğesi dizisi ve gün öğesini toplayıp Ocak-Şubat için artık yıl düzeltmesini uygulayan bir yöntem.14 Eylül 1752’den öncesi için ayrı bir yüzyıl öğesi kullanılacak şekilde ele aldım.
Bu kaybolan tarihler dünya genelinde tek seferde uygulanmadı; ülkeye ve kaydı tutanın dinine göre uygulama zamanı değiştiği için tarih kayıtlarında sürekli baş ağrısı olmaya devam ediyor.