लुईस कैरोल – किसी खास तारीख का weekday निकालने की तकनीक (1887)
(futilitycloset.com)- Lewis Carroll ने 31 मार्च 1887 को Nature को भेजे एक पत्र में किसी भी तारीख का weekday मानसिक गणना से निकालने की एक प्रक्रिया प्रस्तावित की
- तारीख को century·year·month·day इन चार मदों में बाँटकर जोड़ा जाता है, और गणना के हर मध्य चरण में केवल 7 से भाग देने पर बचा remainder रखा जाता है ताकि जटिलता कम रहे
- Carroll ने कहा कि उन्हें खुद इसमें औसतन लगभग 20 सेकंड लगते हैं, और उनके अनुसार तेज गणना करने वाला व्यक्ति इसे 15 सेकंड के भीतर भी कर सकता है
- नियमों में Old Style और New Style का अंतर, leap year correction, और हर महीने के item value शामिल हैं, और अंतिम मान को 0=Sunday, 1=Monday के क्रम में पढ़ा जाता है
- उदाहरण में 18 सितंबर 1783 का परिणाम Thursday आता है, और 23 फ़रवरी 1676 leap year correction के बाद Wednesday बनता है
तारीख को चार मदों में बाँटने का तरीका
- Lewis Carroll ने 31 मार्च 1887 को Nature को भेजे एक पत्र में किसी खास तारीख का weekday mental calculation से निकालने की विधि प्रस्तुत की
- इनपुट तारीख को चार भागों में बाँटा जाता है
- Century-Item: वर्ष के शुरुआती दो अंक
- Year-Item: century के बाद वाला वर्ष भाग
- Month-Item: महीना
- Day-Item: उस महीने की तारीख
- हर item की गणना करके उसे cumulative sum में जोड़ा जाता है, और यदि item या sum 7 से बड़ा हो जाए तो केवल 7 से भाग देने पर बचा remainder ही रखा जाता है
हर item के लिए गणना के नियम
-
Century-Item
- Old Style को 2 सितंबर 1752 पर समाप्त माना जाता है, और century value को 18 से घटाया जाता है
- New Style को 14 सितंबर 1752 से शुरू माना जाता है, और century value को 4 से भाग देने पर जो remainder मिले उसे 3 से घटाकर फिर 2 से गुणा किया जाता है
- उदाहरण के लिए 1811 के Century-Item में शुरुआती दो अंक 18 इस्तेमाल होते हैं
-
Year-Item
- century के बाद वाले वर्ष में 12 के समूहों की संख्या, बचा हुआ मान, और उस बचे हुए मान में 4 के समूहों की संख्या को जोड़ा जाता है
-
Month-Item
- यदि महीने का नाम vowel से शुरू होता है या vowel पर खत्म होता है, तो उस महीने के वर्षक्रम को 10 से घटाया जाता है
- इसमें उस महीने के दिनों की संख्या जोड़ने पर अगले महीने का item value मिलता है
- 7 से भाग देने के बाद उपयोग होने वाले monthly values इस प्रकार हैं
- 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
- उस महीने की वास्तविक तारीख ही ली जाती है
-
leap year correction
- यदि तारीख leap year के January या February में हो, तो final sum में से 1 घटाया जाता है
- यदि sum 0 हो, तो पहले उसमें 7 जोड़ा जाता है और फिर 1 घटाया जाता है
- leap year वह वर्ष है जो 4 से विभाज्य हो, लेकिन New Style के century year में अपवाद यह है कि यदि century number 4 से विभाज्य न हो तो वह leap year नहीं माना जाएगा
- उदाहरण के तौर पर 1800 New Style में इसी अपवाद के अंतर्गत आता है
- अंतिम परिणाम को weekday number के रूप में पढ़ा जाता है, जहाँ 0 Sunday है, 1 Monday है, और आगे क्रम इसी तरह चलता है
गणना के उदाहरण और स्रोत
- 18 सितंबर 1783 की गणना का परिणाम Thursday है
- 23 फ़रवरी 1676 leap year correction के बाद Wednesday बनता है
- यह प्रक्रिया Edward Wakeling की Rediscovered Lewis Carroll Puzzles, 1995 के माध्यम से दर्ज है
1 टिप्पणियां
Hacker News टिप्पणियाँ
यह तरीका मेरे इस्तेमाल किए जाने वाले तरीके से बहुत मिलता-जुलता है, और Art Benjamin से बात करने पर पता चला कि वे भी मिलता-जुलता तरीका इस्तेमाल कर रहे थे। 10–15 सेकंड के अंदर करना आसान है, लेकिन अभ्यास, बहुत थोड़ी याददाश्त और थोड़ा mental arithmetic चाहिए
मैं इसे अपनी पकड़ बनाए रखने के लिए भी अक्सर इस्तेमाल करता हूँ, और एक बार सीख लेने पर यह आश्चर्यजनक रूप से उपयोगी निकलता है, इसलिए इस्तेमाल जारी रहता है। J. H. Conway एक अलग तकनीक, Doomsday rule इस्तेमाल करते थे, और इस साल की तारीखें निकालते समय मैं उसी पर चला गया। यह ज्यादा तेज़ और आसान है, लेकिन दूसरे वर्षों का “Doomsday” निकालना ज्यादा कठिन है, इसलिए उस समय मैं अपने मूल तरीके पर लौट जाता हूँ
उदाहरण के लिए 2024/05/24 के लिए 2012 के बाद 12 साल, 3 leap years, मई का magic number 2, और तारीख 24 जोड़कर mod 7 लें तो
(12+3+2+24)=6, यानी शुक्रवार होता है। हर महीने के magic numbers को144 / 025 / 036 / 146के रूप में याद किया जा सकता है, और ज़रूरत हो तो सिद्धांत से भी निकाला जा सकता है144 : Jan, Feb, Marको Jan=1, Feb=4, Mar=4 जैसे अर्थ में समझा जा सकता है20+5+4+7 ≡ 1आया, इसलिए रविवार की उम्मीद थी, लेकिन असल में शनिवार था; वजह यह थी कि 2032 leap year है और तारीख 29 फरवरी से पहले की हैऐसे मामलों में, यानी leap year में 29 फरवरी से पहले या उसी दिन तक, 1 घटाना होता है
0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4हर महीने की 1 तारीख के साल में दिन-क्रम और, यह मानने पर कि पिछले सभी महीने 30 दिन के थे, उस दिन-क्रम के बीच का offset हैउदाहरण के लिए अगर पहले 11 महीने सभी 30 दिन के होते, तो 25 दिसंबर
30×11+25=355वां दिन होता, और इसमें 12वां offset 4 जोड़ने पर वास्तविक 359वां दिन बनता है। यह offset sequence याद रखना आसान है, और याद हो जाने पर महीनेवार magic numberMagic(n)=2n+Offset(n)+cसे निकाला जा सकता है1 4 4 0 2 5 0 3 6 1 4 6magic numbers मेंc=-1है, और दिसंबर2×12+4-1 ≡ 6 (mod 7)बनता है। उल्टा, याद किए हुए magic numbers सेMagic(n)-2n-cनिकालकर offset भी वापस पाया जा सकता है, बस यह याद रखना होता है कि offset range[-1,4]हैलेख पढ़ते-पढ़ते मैंने Old Style/New Style dates के अंतर और 1752 में हुई चीज़ों को खोजा। Calendar (New Style) Act 1750 के अनुसार, 18वीं सदी तक ब्रिटेन के कानून में साल कई सदियों तक 25 मार्च, यानी Lady Day, से शुरू होता था
इसलिए उदाहरण के लिए 24 मार्च 1707 के ठीक अगले दिन 25 मार्च 1708 होता था, और 31 दिसंबर 1708 के अगले दिन भी 1 जनवरी 1708 ही होता था; 1709 लगभग तीन महीने बाद आता था। अच्छा हुआ कि यह बदल गया
मुझे जिज्ञासा है कि क्या दूसरे देशों में भी ऐसे पुराने legacy patches इतने बचे हुए हैं
लेकिन Carroll तरीका 1 जनवरी को नए साल का पहला दिन मानता है, इसलिए सही जवाब “Friday” तक नहीं पहुँचता। दिलचस्प है कि Carroll तरीके को फिर से प्रकाशित करने वालों ने इस गलती को नहीं पकड़ा, और linked लेख में भी वही कमी है
calutility में सितंबर 1752 को पहचानने के लिए special handling है: https://github.com/util-linux/util-linux/blob/9f15d2de8117732845b2e891a2d24d987ee4e3ed/misc-utils/cal.c#L1079cal 1752चलाकर देखा तो सितंबर के calendar में बुधवार 2 तारीख और गुरुवार 14 तारीख के बीच की तारीखें गायब हैंविवाद तो है, लेकिन यह व्याख्या भी है कि Gregorian calendar में संक्रमण ही April Fools' Day की उत्पत्ति है: https://en.wikipedia.org/wiki/April_Fools%27_Day, https://en.wikipedia.org/wiki/Gregorian_calendar
लेख की महीने के item की गणना विधि को समझना मुश्किल है। लेख बताता है कि अगर कोई महीना vowel से शुरू या खत्म होता है, तो साल में उस महीने के क्रम को 10 से घटाएँ, और इसमें उस महीने के दिनों की संख्या जोड़ दें, तो अगले महीने का item मिल जाता है।
लेकिन January से पहले वाला महीना December है, और वह vowel से न तो शुरू होता है न खत्म, इसलिए 10 से घटाए बिना
12+31 ≡ 1होना चाहिए, जबकि लेख 0 कहता है। February भी, क्योंकि January vowel पर खत्म होता है,10-1+31 ≡ 4बनता है, लेकिन लेख में 3 है; और March भी February के आधार पर गिनें तो मेल नहीं खाता।April और May सही हैं, लेकिन June फिर से नहीं मिलता, इसलिए समझ नहीं आ रहा कि मैं क्या गलत समझ रहा हूँ।
(10-क्रम)+दिनों की संख्या mod 7वाला logic पिछले महीने के आधार पर सिर्फ May, July, September, November जैसे एक-छोड़-एक महीनों पर सही बैठता है, और vowel rule यह याद रखने की mnemonic जैसा लगता है कि यह calculation किन महीनों पर लागू करनी है। बाकी महीनों में शायद पिछले महीने काitem+days mod 7इस्तेमाल होता है, लेकिन यह interpretation लेख में कहाँ से निकलती है, यह साफ नहीं है।January का कोई पिछला महीना नहीं है, इसलिए सबको 0 मानकर result भी 0 रखा जाता है। जिस महीने तक पहुँचना है, वहाँ तक January से हर बार calculation करने की जरूरत नहीं; जिन महीनों की शुरुआत या अंत vowel से होता है, उनके लिए उस महीने का item number
10-महीना नंबरवाला shortcut इस्तेमाल किया जा सकता है। यहाँyको vowel नहीं माना जाता। या फिर सीधे याद कर लेना शायद और आसान हो।Carroll का algorithm समय के साथ विकसित हुआ है। First Sunday Doomsday Algorithm(https://firstsundaydoomsday.blogspot.com/2009/12/quick-start-guide.html) में 2023 तक public किए गए improvements शामिल हैं, और year code निकालने के लिए Fong & Walters का “odd+11” rule भी है: https://arxiv.org/abs/1010.0765
मुझे लगा कि इसे ज्यादा intuitively calculate करने का यह तरीका है, इसलिए मैंने एक लेख में इसे व्यवस्थित कर रखा है: https://gcanyon.wordpress.com/2013/04/09/a-better-way-to-calculate-the-day-of-the-week/
Art Benjamin को TED talk में यह करते देखना वाकई दिलचस्प है। ध्यान से देखें तो दिखता है कि वे intermediate calculations को track करने के लिए हाथों की हरकतें इस्तेमाल कर रहे हैं।
जान लेने के बाद यह obvious लगता है, लेकिन बेहद clever है। https://www.ted.com/talks/arthur_benjamin_a_performance_of_mathemagic में 7:47 से शुरू होता है।
Lewis Carroll के तरीके से आज, यानी 24 मई 2024, की calculation ऐसी है। century item 20वीं सदी के लिए है, इसलिए
20/4=5, remainder 0,3-0=3,3×2=6।year item में
24/12=2, remainder 0, उसके अंदर 4 की संख्या 0, इसलिए2+0+0=2। month item लेख में May=1 है, और day item 24 है। सब जोड़ने पर6+2+1+24=33,33 mod 7 = 5, इसलिए Friday आता है।जो लोग कहते हैं कि notation महत्वपूर्ण नहीं है, उनसे कहना चाहूँगा कि बेहतर नई notation मिलने से पहले पूरी mathematics कुछ ऐसी ही दिखती थी।
यह तक कहा जा सकता है कि mathematics में notation के अलावा बहुत कम चीजें इतनी महत्वपूर्ण हैं, और computer science में भी यही बात है। variables explicit होने पर Lisp-family languages साफ तौर पर choice क्यों बनती हैं, वजह भी यही है।
1600s की शुरुआत में यह “The white king commands his owne knight into the third house before his owne bishop.” था, 1700s के मध्य में
K. knight to His Bishop's 3d., 1800s की शुरुआत मेंK.Kt. to B.third sq., 1890 के आसपासKKt-B3, 1900s के मध्य मेंN-KB3, और अबNf3या भाषा-विशेष piece names से बचना हो तो♘f3हो गया: https://www.knightschessclub.org/the_history_of_notation.htmlअगर यह 20 seconds के अंदर किया, तो इसे impressive कहा जा सकता है। वे खुद को fast calculator नहीं मानते थे।
Python में day-of-week calculation script लिखकर
2024-05-24डालें तो Friday आता है। यह century item, year item, month item array, और day item को जोड़कर, January–February के लिए leap year correction apply करने का तरीका है।14 सितंबर 1752 से पहले के लिए अलग century item इस्तेमाल करने की handling भी की गई।
ये गायब हुई dates दुनिया भर में एक साथ apply नहीं हुईं, और देश तथा record रखने वाले के religion के हिसाब से उनका लागू होने का समय अलग-अलग था, इसलिए historical records में यह लगातार headache बना रहता है।