थैंक्सगिविंग कब है?


38

पृष्ठभूमि

कुछ छुट्टियां निश्चित, आसानी से याद रखने वाली तारीखें होती हैं, जैसे कि 31 अक्टूबर, 25 दिसंबर, आदि। हालांकि, कुछ लोग परेशान होना चाहते हैं। वे "सितंबर में पहला सोमवार" या "नवंबर में चौथा गुरुवार" जैसी चीजों के रूप में निर्दिष्ट हैं। मुझे यह कैसे पता होना चाहिए कि कब क्या है?

मुझे पता है कि थैंक्सगिविंग तेजी से आगे बढ़ रहा है, इसलिए मुझे यह पता लगाने के लिए एक कार्यक्रम की आवश्यकता है कि यह कब होगा। कुछ लोग यहां तक ​​कहते हैं कि यह कल है , इसलिए आपके कार्यक्रम को यथासंभव कम करने की आवश्यकता है ताकि मैं यह सुनिश्चित कर सकूं कि यह समय में फिर से टाइप कर सकता है।

चुनौती

एक प्रोग्राम या फ़ंक्शन बनाएँ, जो एक अप-टू-चार-डिजिट वर्ष (जैसे 2015 या 1984) दिया गया हो, उस वर्ष संयुक्त राज्य अमेरिका के धन्यवाद के आउटपुट या रिटर्न देता है। धन्यवाद को विकिपीडिया पृष्ठ के अनुसार नवंबर के चौथे गुरुवार के रूप में परिभाषित किया गया है । (संकेत: उस पृष्ठ में दिनांक पैटर्न पर कुछ रोचक जानकारी भी शामिल है।)

इनपुट : एक दशमलव संख्या जिसमें अधिकतम चार अंक एक वर्ष में सामान्य युग (सीई) का प्रतिनिधित्व करते हैं। उदाहरण: 987, 1984, 2101

आउटपुट : वह महीना और दिन सहित, जिस दिन थैंक्सगिविंग गिर जाता है, या उस वर्ष मौजूद होने पर गिर जाता है। यह किसी भी उचित प्रारूप में हो सकता है; अपने सर्वोत्तम निर्णय का उपयोग करें। सभी मामलों में ग्रेगोरियन कैलेंडर का उपयोग करें, भले ही वह उस समय उपयोग में न हो।

(नोट: लीप वर्ष को सही ढंग से संभालना सुनिश्चित करें!)

परीक्षण के मामले इनपुट 1:

2015

आउटपुट 1:

Nov 26

इनपुट 2:

1917

आउटपुट 2:

Nov 22

स्कोरिंग

प्रस्तुतियाँ बाइट्स में बनाई जाएंगी । मैं इस वेबसाइट को आपके बाइट काउंट पर नज़र रखने की सलाह देता हूँ , हालाँकि आप अपनी पसंद के किसी भी काउंटर का उपयोग कर सकते हैं।

बोनस

-25% अपने स्कोर के लिए यदि आप बीसीई तारीखों को नकारात्मक संख्या के रूप में संभालते हैं (जैसे -480 थर्मोपाइले की लड़ाई का वर्ष होगा)।

नकारात्मक परीक्षण केस इनपुट:

-480

संगत उत्पादन:

Nov 25

यह , इसलिए सबसे कम स्कोर जीतता है!

संपादित करें: मैं थॉमस क्वा के TI-BASIC सबमिशन को चिह्नित कर रहा हूं। नई प्रविष्टियाँ सबमिट करने से आप इसे हतोत्साहित न करें!

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिख रहा है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

# Language Name, N bytes

Nआपके प्रस्तुत करने का आकार कहां है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं , उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

# Ruby, <s>104</s> <s>101</s> 96 bytes

यदि आप अपने हेडर में कई संख्याओं को शामिल करना चाहते हैं (जैसे कि आपका स्कोर दो फ़ाइलों का योग है या आप दुभाषिया ध्वज दंड को अलग से सूचीबद्ध करना चाहते हैं), तो सुनिश्चित करें कि हेडर में वास्तविक अंक अंतिम संख्या है:

# Perl, 43 + 2 (-p flag) = 45 bytes

आप भाषा के नाम को एक लिंक भी बना सकते हैं जो लीडरबोर्ड स्निपेट में दिखाई देगा:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


25
किसी के लिए भी जो सोच रहा है कि इस साल थैंक्सगिविंग कब आएगा: थैंक्सगिविंग कल होगा।
TheNumberOne

6
लेकिन मैंने 10 अक्टूबर को धन्यवाद दिया था? मुझे खेद है कि आपका प्रश्न देर से है।
जिमीजैजएक्स

5
@Downgoat आप चाहे तो बाइट काउंटर का उपयोग करें। यह सिर्फ एक है जिसे मैं व्यक्तिगत रूप से उपयोग करता हूं और सिफारिश करूंगा।
bkul

22
"कुछ छुट्टियां तय हो गई हैं, आसानी से याद रखने वाली तारीखें, जैसे 31 अक्टूबर, 25 दिसंबर" उन उदाहरणों को याद रखना आसान है क्योंकि वे वास्तव में एक ही दिन हैं: ऑक्टल 31 == दशमलव 25. ;-)
एड्रियन मैक्कार्थी

7
एक उत्तर के लिए जो बोनस करता है, क्या -1 और 1 के बीच एक वर्ष 0 होना चाहिए या नहीं?
फेर्सुम

जवाबों:


40

TI-BASIC, 15 बाइट्स * 0.75 = 11.25

मेरे TI-84 + कैलकुलेटर पर परीक्षण किया गया

1129-dayOfWk(Ans+ᴇ4,9,1

धन्यवाद का समय 29 नवंबर है, 1 सितंबर के सप्ताह का दिन, जहां 1 रविवार है और 7 शनिवार है। यह प्रारूप में आउटपुट करता है MMDD

परीक्षण के मामले: 2015-> 1126, 1917-> 1122, -480-> 1125सत्यापित किए गए हैं। सभी तिथियों के लिए TI-BASIC ग्रेगोरियन कैलेंडर का उपयोग करता है।

TI-BASIC नकारात्मक वर्षों का समर्थन नहीं करता है, लेकिन यह बोनस प्राप्त करता है क्योंकि हम इनपुट में 10000 जोड़ते हैं। क्योंकि ग्रेगोरियन कैलेंडर की अवधि 400 वर्ष है, इसलिए यह सप्ताह का दिन नहीं बदलता है।


5
बकवास। xD मैंने कभी नहीं सोचा होगा कि यह इस तरह काम करेगा, +1।
Addison Crump

10000 जोड़ने का अच्छा विचार है। अच्छा लगा।
agtoever

मैंने 23 पत्र गिने। यह 15 बाइट्स कैसे हो सकती हैं?
Stephan Schinkel

1
@StephanSchinkel TI-BASIC टोकन का उपयोग करता है जो कैलकुलेटर मेमोरी में स्टोर किए जाते हैं, मेरा मानना ​​है कि यहां सभी कैरेक्टर टोकन को छोड़कर 1 बाइट हैं dayofWK(और Ansजो 2 और 1 बाइट्स हैं।
FryAmTheEggman 15

आपने इसे कैलकुलेटर पर परीक्षण किया है? वाह।

23

PHP, 65 48 42 41 36 (+2 के लिए -F) = 38 बाइट्स

<?date(Md,strtotime("4thuXI$argn"));

पहली कमांड लाइन तर्क के रूप में इनपुट लेता है। चेतावनियों के साथ चलता है, जो हमारे नियमों द्वारा स्वीकार्य हैं। प्रिंट्स NovDD, जहां DDधन्यवाद का दिन है।

कोई ऑनलाइन लिंक नहीं है क्योंकि ideone कमांड लाइन आर्ग्स का समर्थन नहीं करता है और मुझे ऐसा नहीं है कि एक ऑनलाइन दुभाषिया का पता नहीं है।

अलेक्जेंडर ओ'मैरा को मुझे एक नई चाल सिखाने के लिए धन्यवाद, और एक महत्वपूर्ण कमी के लिए प्राइमो


2
यह गणितज्ञ की तुलना में मजेदार है।
lirtosiast

2
@ और भी छोटा "4thuXI":। आप वर्ष के बीच की जगह भी छोड़ सकते हैं "4thuXI2015"
अलेक्जेंडर ओ'मैरा

1
कमांड लाइन विकल्प का उपयोग करके -F, इनपुट को छोटा किया जा सकता है "4thuXI$argn"
प्रिमो

3
रुको, यह वास्तव में काम करता है? यही ... बस यही ... मैं भी नहीं ...
ETHproductions

1
मेरे लिए काम करता है । जबकि मैं इस पर हूँ Md, E_NOTICEअक्षम के साथ कोई उद्धरण की जरूरत है ।
प्रिमो

18

गणितज्ञ, ५ ९ ३ 59 बाइट्स

DayRange[{#,11},{#,12},Thursday][[4]]&

+1 चतुर। वहाँ भी है WolframAlpha["Thanksgiving " <> #] &जहाँ दिनांक एक स्ट्रिंग के रूप में दर्ज किया गया है।
डेविड नोव

वुल्फरामअल्फा ने 1863 से अमेरिकी धन्यवाद दिवस की तारीखें लौटाईं (जब लिंकन ने इसे नवंबर के आखिरी गुरुवार को घोषित किया)। अमेरिका ने 1789 से थैंक्सगिविंग मनाया है।
डेविड नोव

@DavidCarraher हालाँकि, ओपी बताता है कि कार्यक्रम में कम से कम 0 - 9999 CE के लिए काम करना है
LegionMammal978

17

जावास्क्रिप्ट (ईएस 6), 42 40 31 बाइट्स - 25% = 23.25

a=>28.11-new Date(a,8).getDay()

चूंकि तिथि "किसी भी उचित प्रारूप में हो सकती है", यह फ़ंक्शन उपयोग करता है DD.MM। मैंने एक अलग तकनीक के साथ टेस्क्रिप्ट उत्तर लिखा , लेकिन यह सूत्र छोटा था।

व्याख्या

जैसा कि महीने शून्य आधारित हैं, new Date(a,10)एक Dateनिर्दिष्ट वर्ष के 1 नवंबर का प्रतिनिधित्व करने वाली वस्तु देता है ।

चूंकि हम getDay()उस सप्ताह के दिन का प्रतिनिधित्व करते हैं, जिससे 0..6हम मानचित्र बनाना चाहते हैं

Su Mo Tu We Th Fr Sa 
0  1  2  3  4  5  6  
to to to to to to to
4  3  2  1  0  6  5  

फिर 22 जोड़ें। यह पता चला है कि (11 - new Date(a,10).getDay()) % 7चाल चलेगा। जैसा कि @ थोमस क्वा ने बताया, यह वही है 28-new Date(a,8).getDay()जो 1 सितंबर के सप्ताह का 28 मिनट है


अच्छा समाधान, मुझे प्यार है कि यह कितना छोटा है और यह अभी भी अधिकांश प्रविष्टियों की तुलना में अधिक समझ में आता है।
मार्को ग्रीज़क

16

जाप , 43 37 36 35 29 बाइट्स - 25% = 21.75

Japt , Ja vaScri pt का छोटा संस्करण है ।

`{28.11-?w D?e(U,8).getDay()}

हाहाहा, मुझे वास्तव में एक धोखा देने वाली ट्रिक मिली: दुभाषिया किसी भी कोष्ठक को स्ट्रिंग के अंदर अनदेखा कर देता है (कोड डालने के लिए उपयोग किया जाता है), ताकि हम एक बाइट को बचाने के लिए पूरे स्रोत कोड को संपीड़ित कर सकें:> D

दो ?एस क्रमशः यूनिकोड unprintables U + 0098 और U + 0085 होना चाहिए। इसे ऑनलाइन आज़माएं!

विघटन के बाद, कोड इस का मूल्यांकन करता है:

"{28.11-new Date(U,8).getDay()}"

जो मूल्यांकन करता है:

""+(28.11-new Date(U,8).getDay())+""

जो उचित आउटपुट देता है।

इंट्रीपिडोडर की तकनीक का उपयोग करता है , प्रारूप में आउटपुट करता है dd.mm। नकारात्मक वर्षों का उचित समर्थन करता है। सुझावों का स्वागत है!

संपादित करें: 2 दिसंबर तक, आप अब इस 11-बाइट कोड ( 8.25 अंक स्कोरिंग ) का उपयोग कर सकते हैं :

28.11-ÐU8 e

(मैं चाहता हूं कि मैंने इसे जल्द लागू किया था!)


बहुत अच्छी तरह से किया।
bkul

यह अब वेनिला जावास्क्रिप्ट से अधिक है। थॉमस क्वा का एक बहुत छोटा फार्मूला है
intrepidcoder

@intrepidcoder धन्यवाद, निश्चित।
ETHproductions

12

विटसी , 44 बाइट्स

मैं शुद्ध गणितज्ञों के साथ गणना कर रहा हूँ !

golfed:

Ve2 * V2-V41m + वा * Dv1m-Vv4 * 1m + 7M-भेड़ * / + N
/ D1M-

Ungolfed (इसे पठनीय बनाने के लिए पहली पंक्ति में विधि कॉल को स्थानांतरित किया गया):

Ve2 * V2-V4 / D1M- + वा * DV / D1M - Vv4 * / D1M- + 7M-भेड़ * / + N

V इनपुट को अंतिम चर के रूप में सहेजें।
 e2 * स्टैक के लिए 28 पुश।
    V स्टैक में इनपुट पुश करें।
     2- दो घटाना।
       V4 / D1M- मंजिल प्राप्त करें (इनपुट / 4)
              + इसे कुल में जोड़ें।
               Vaa * Dv / D1M- मंजिल प्राप्त करें (इनपुट / 100), और एक अस्थायी के रूप में 100 बचाएं
                                    प्रक्रिया में परिवर्तनशील।
                          - इसे कुल से घटाएं।
                           Vv4 * / D1M- मंजिल प्राप्त करें (इनपुट / 400)।
                                    + इसे कुल में जोड़ें।
                                     7M मोडुलो बाई सात।
                                       - परिणाम 28 से घटाएं।
                                        baa * / + जोड़ें ।11
                                              संख्या के रूप में एन आउटपुट।

इसके लिए शायद एक बेहतर एल्गोरिथ्म है (और यह संभवतः बुरी तरह से गोल्फ है), लेकिन उन लोगों के लिए, मेरा एल्गोरिथ्म यहां से आता है

इसे ऑनलाइन आज़माएं!

क्या मुझे इसकी गणना करने और बिल्कुल 42 बाइट्स के लिए बोनस अंक मिलते हैं? सपने बर्बाद हो गए।

धन्यवाद करने के लिए @ होशो 250 के लिए धन्यवाद मैं गलत कर रहा था। : डी फिक्स्ड।


2
नहीं, लेकिन आप मुझसे एक +1 प्राप्त करते हैं;)
कॉनर ओ'ब्रायन

यह कहता है कि 2016 में थैंक्सगिविंग 28 नवंबर है। यह वास्तव में 24 नवंबर है।
होशे 250

@ होशो 250 आप अभी ठीक कर रहे हैं।
Addison Crump

10

पायथन, 38 * 0.75 = 28.5 बाइट्स

lambda x:28.11-(x-2+x/4-x/100+x/400)%7

यह प्रश्न में निर्दिष्ट तरीके से नकारात्मक वर्षों के साथ काम करता है, हालांकि यह मेरे ध्यान में है कि ग्रेगोरियन कैलेंडर में कोई वर्ष 0 नहीं है, इसलिए यह व्यवहार थोड़ा संदिग्ध है।


1
तुम गिरा सकते हो f=
22

1
यह नकारात्मक तिथियों के लिए कैसे काम करता है? क्या पायथन में मोड्यूल नकारात्मक पर लागू होता है? : O
Addison Crump

यह स्ट्रिंग प्रतिनिधि का उपयोग करने के लिए छोटा होना चाहिए,"Nov "+`...`
1

@VoteToClose पायथन मोडुलो दूसरे तर्क के समान संकेत के साथ एक उत्तर देता है। इस प्रकार -40%7==2लेकिन-40%-7==-5
क्विंटोपिया

@ क्विंटोपिया रुको, रुको, मैं एक बेवकूफ हूँ। ठीक है। यह समझ आता है।
Addison Crump

10

जावास्क्रिप्ट (ईएस 6), 43.5

वास्तविक बाइट गिनती 58 है। -25% का बोनस => 58 * 0.75 = 43.5 लागू होता है

s=>new Date(s,10,(a=new Date(s,10).getDay())<5?26-a:a+21)

बहुत सीधा और मूर्खतापूर्ण तरीका जैसा कि यह हो सकता है, बिना किसी पेचीदा वर्कअराउंड या गणना के।

डे-गोल्फ (ES5) + डेमो:

function t(s) {
    a = new Date(s, 10).getDay();
    alert(new Date(s,10,a<=4?26-a:a+21))
}

t(prompt())

ध्यान दें, कि 0-100 वर्ष में प्रवेश करने से 1900-2000 वर्ष का उत्पादन होता है। हालांकि, ऐसा लग रहा है कि 0-100 साल उसी तरह की तारीख देंगे जैसे 1900-2000, दूसरे जवाबों से देखते हुए।


के a+18साथ प्रतिस्थापित करना 22, क्योंकि इसे केवल "और" में कहा जाता है, और "और" केवल तभी होता है जब कोई न तो अधिक हो और न ही 4 से कम हो, अर्थात बिल्कुल 4।


के a<4?26-a:a>4?a+21:22साथ बदल रहा हैa<=4?26-a:a+21


2
यदि मुझे गलत लगता है तो क्षमा करें, लेकिन इसके a<4?x:a>4?y:a+18बराबर नहीं है a<4?x:a>4?y:22?
22

BTW, यह मुझे 0 से 99 तक किसी भी इनपुट के लिए गलत वर्ष बताता है। यकीन नहीं होता कि यह मायने रखता है, हालांकि।
ETHproductions

@ निश्चित रूप से आप सही हैं, ऐसा नहीं लगता कि हमेशा 4 + 18: D
nicael

@ हाँ, 0 से 99 वास्तव में गलत है, मेरी कोशिश है कि फिक्सिंग।
nicael

@ ऐसा लगता है कि 0-100 वही तारीख देते हैं जो 1900-2000, अन्य उत्तरों से देखते हैं।
nicael

8

टीस्क्रिप्ट, 35 33 24 बाइट्स - 25% = 18

28.11-new D(x,8).getDay¡

यह मेरे जावास्क्रिप्ट उत्तर के समान विधि है , जो थॉमस क्वा के चतुर सूत्र का उपयोग करता है।

स्पष्टीकरण के साथ वैकल्पिक संस्करण

r(22,28)F(#/h/t(new D(x,10,l)))+'-11'

r(22,28)    // Range from 22 to 28
        F(    // filter, keeps elements for which the function returns true. 
          #    // Expands to function(l,i,a,b)
           /h/    // RegExp literal, Thursday is the only day with an 'h'.
              t(    // test, true if date string contains an 'h'.
                new D(x,10,l) // Create date object
                             ))+'-11' // Append '-11' for the month.

यह 35 वर्ण है, लेकिन
n

@nicael इस साइट से नहीं , यह नहीं है;)
ETHproductions


@Downgoat आमतौर पर इस प्रारूप का उपयोग करता है , जिसमें U + 00FF तक के सभी चार्ट 1 बाइट हैं।
ETHproductions

5

जेथॉन, 141 155 बाइट्स

पायथन सिंटैक्स के साथ जावा कैलेंडर और स्कैनर कक्षाओं का उपयोग करता है।

import java.util.Scanner as s;import java.util.Calendar as c
d=c.getInstance();k=s(System.in);d.set(c.YEAR,k.nextInt());d.set(c.DAY_OF_WEEK,c.THURSDAY)

संपादित करें: मामूली वाक्यविन्यास मुद्दे, 14 बाइट्स जोड़े गए।

मेरा ब्रेनफैक संस्करण भी देखें ।


5

पायथन, 83 81 78 बाइट्स

from datetime import*
lambda a:'Nov '+`((10-datetime(a,11,1).weekday())%7)+22`
  • -2 बाइट्स: आयात करने के लिए एक नाम जोड़ा गया (धन्यवाद @ τρικσιΛίθι :ος)
  • -1 बाइट्स: बदलकर * आयात ** (धन्यवाद @FryAmTheEggman)
  • -2 बाइट्स: दिन बदलने के लिए repr बदल दिया (धन्यवाद @willem)

1
बस बाइट काउंट कम करने का एक सुझाव: उपयोग करें import datetime as dऔर फिर आप dहर बार datetimeअपने कार्यक्रम में उपयोग करने के लिए उपयोग कर सकते हैं ।
क्रिस्ति लिथोस

2
आप पंडों को भी आजमा सकते थे। import pandas;print'Nov '+`((10-pandas.datetime(input(),11,1).weekday())%7)+22`
विलेम

@ ΣριΚικσιΛίθοΚ लेकिन फिर datetime.datetime केवल d.datetime होगा, है ना?
तन्माथ

2
from datetime import*थोड़ा और भी छोटा है, क्योंकि आपको d.
FryAmTheEggman

5

एक्सेल, 367 154 53 - 25% = 39.75 बाइट्स

मान लेता है कि वर्ष सेल A1 में, दिनांक प्रारूप में आयोजित किया गया है। नवंबर में उस दिन की पूर्णांक संख्या लौटाता है, जिस दिन धन्यवाद आयोजित किया जाता है।

यह केवल सामान्य छलांग वर्षों के लिए खाता है। यह इस तथ्य के लिए जिम्मेदार नहीं है कि वर्ष, 2100, 2200, 2300 लीप वर्ष नहीं हैं।

यह केवल 1621 के बाद के लिए काम करने के लिए डिज़ाइन किया गया है - अर्थात जब से धन्यवाद आयोजित किया जाने लगा। (हालांकि यह निश्चित रूप से 0 एडी पर वापस काम करेगा)।

=IF(MOD(YEAR(A1),4)=0,IF(WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))<6,1127-WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy")))),1134-WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))),IF(WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))<6,1127-WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy")))),1134-WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))))

सुंदर मुद्रित:

=IF(MOD(YEAR(A1),4)=0,
    IF(WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))<6,
       1127-WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy")))),
       1134-WEEKDAY(305+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))),
    IF(WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))<6,
       1127-WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy")))),
       1134-WEEKDAY(304+DATEVALUE(("01/01/"&TEXT(A1,"yyyy"))))))

गाह! 1 जनवरी के आधार पर गणना करने के बजाय, फिर 29 फरवरी को सामना करने के लिए बहुत सारे लीप वर्ष की गणना कर रहे हैं, मुझे 1 नवंबर की गणना पर आधारित होना चाहिए। nb अब यह वर्ष 2100, 2200 और 2300 के साथ सही ढंग से व्यवहार करता है , लेकिन कार्यान्वयन को आपके एक्सेल इंस्टॉलेशन की डिफ़ॉल्ट तिथि प्रारूप पर निर्भर करता है। यह संस्करण dd / mm / yyyy के लिए डिज़ाइन किया गया है:

 =IF(WEEKDAY(DATEVALUE(("01/11/"&TEXT(C1,"yyyy"))))<6,  
     1127-WEEKDAY(DATEVALUE(("01/11/"&TEXT(C1,"yyyy")))),
     1134-WEEKDAY(DATEVALUE(("01/11/"&TEXT(C1,"yyyy")))))

और अब जब मैंने स्मॉलटाक में एक उलटी गणना प्राप्त करने के बारे में pfaffing किया है, तो इसे एक्सेल में परिणामित करना है:

=DATE(A1,11,MOD(12-WEEKDAY(DATE(9600+A1,11,1)),7)+22)

(अभी भी A1 में वर्ष के साथ, लेकिन पूर्णांक के रूप में)। यह 7700BC / E से सभी तिथियों के लिए, थॉमस क्वा के तारीख पुनरावृत्ति चाल का उपयोग करते हुए 2100, 2200 और 2300 वर्षों के लिए भी काम करता है।


1
जब मैं १ ९ ०० से पहले की तारीखों के साथ यह कोशिश करता हूं तो यह मेरी एक्सेल की कॉपी में काम नहीं करता है।
एंजेलो फुच्स

लंबे संस्करण के रूप में अच्छी तरह से काम नहीं करता है।
एंजेलो फुच्स

पुरानी तारीखों के लिए, एक्सेल उपयोगकर्ता की पूर्व 1900 की कार्यपुस्तिका का उपयोग करें। < exceluser.com/downloads/examples/post_900_123/index.html >
Euan M

इस बारे में प्रश्न कि क्या यह एक तरफ काम करता है, मुझे नहीं लगता कि आपको नवंबर में सिर्फ तारीख करने की अनुमति है; आपको किसी न किसी रूप में "नोव" या "11" चाहिए।
1

@Thomas Kwa दिनांक इनपुट प्रारूप प्रारूप में वर्ष है। गणना फिर सप्ताह के उस दिन काम करती है जो 1 नवंबर को गिरती है, फिर गणना करती है कि नवंबर में चौथा गुरुवार किस तारीख को है।
Euan M

4

पॉवरशेल, 67 64 84 72 58 45 बाइट्स

param($a)'Nov';28-(date "00$a/9/1").DayOfWeek

हम अपने इनपुट पूर्णांक के रूप में $a, और तुरंत आउटपुट Novऔर एक नई लाइन लेते हैं । फिर हम एक नया जेनरेट करने और यह निर्धारित करने से $aपहले कि इसे ज़ीरो और 1 सितंबर के साथ 00$a/9/1पहले से dateतय कर लेते हैं DayOfWeek। यदि 1 सितंबर रविवार ( .DayOfWeekबराबर 0) को है, तो धन्यवाद 28 तारीख को है। अगर 1 सितंबर सोमवार ( .DayOfWeekबराबर 1) को है, तो धन्यवाद 27 तारीख को है। और इसी तरह। इस प्रकार, हम 28अपने उत्तर को आउटपुट करने के लिए सप्ताह के उस दिन को घटाते हैं ।

तीन- या चार अंकों के वर्षों के लिए पार्सिंग को बाधित किए बिना एकल और दोहरे अंकों के वर्षों के लिए डबल-जीरो खातों के साथ प्रस्तुत करना। नकारात्मक संख्याओं के लिए काम नहीं करता है, क्योंकि .NET datetimeवर्षों से कम का समर्थन नहीं करता है 0

इस पर सहायता के लिए TessellatingHeckler और Toby Speight का धन्यवाद ।


"{0:D3}/Nov/$_" -f $aकी तुलना में कम है "$($a.ToString("000"))/Nov/$_"और एक ही परिणाम पैदा करता है, और मुझे लगता है कि आप 11Nov
n0rd

@ n0rd आह, उत्कृष्ट! हां - Novजब मैं इसे दो अंकों के वर्षों को ठीक से पहचानने के लिए कोशिश कर रहा था, तब से एक अवशेष था, इसलिए मैं इसे भी बाहर स्वैप करूंगा। धन्यवाद!
AdmBorkBork

@TessellatingHeckler वह दृष्टिकोण काम करता है, लेकिन आपको दो-शून्य को एक-अंक के वर्षों के लिए खाते में रखने की आवश्यकता है, अन्यथा आप 20XX में वापस आ गए हैं जिसमें मैं भाग गया था। सहायता के लिए धन्यवाद - मैंने उत्तर अपडेट किया।
AdmBorkBork

1
@TessellatingHeckler मेरे सिस्टम में, कम से कम, एकल-अंकों वाले वर्षों को date "11/1/$a"परिणामों में इनपुट करना Thursday, November 1, 2007 12:00:00 AM। इसका कारण यह है कि हम Calendar.TwoDigitYearMax संपत्ति का संपादन नहीं कर रहे हैं, इसलिए जब यह पार्स करता है , तो हम उस पर पहुंचने के लिए डबल-शून्य-पैडिंग के साथ फंस जाते हैं।
AdmBorkBork

ठीक ठीक। डबल पेडिंग है।
TessellatingHeckler

3

गोल्फस्क्रिप्ट, 25 * 0.75 = 18.75 बाइट्स

~.4/.25/.4/2---+7%28\--11

यह सप्ताह के दिन के लिए सकामोटो के सूत्र का उपयोग करता है। चूंकि लोग ऐसा कर रहे हैं, इसलिए आउटपुट के रूप में है dd-mm। मेरा पिछला सबमिशन नीचे पाया जा सकता है:

~.4/.25/.4/2---+7%"Nov "28@-

3

TSQL, 478 296 बाइट्स

सिर्फ मौज मस्ती के लिए। आमतौर पर, आपके पास इसे सरल बनाने के लिए एक तारीख आयामी तालिका होगी, select * from dimDate where [Year] = @Year and [Holiday] = 'Thanksgiving'लेकिन इसके अभाव में ...

create function a(@y varchar(4))returns date as begin declare @d date,@i int=0 set @d=convert(date,@y+'-11-01')declare @t table(d date,c int identity)while @i<28 begin if datepart(weekday,@d)=5 insert @t(d) select @d select @d=dateadd(d,1,@d),@i+=1 end select @d=d from @t where c=4 return @d end

Ungolfed:

if exists(select * from sys.objects where name='a' and [type]='FN') drop function a
go

create function a(@y varchar(4))returns date
-- select dbo.a('2015')
as
begin
    declare @d date,@i int=0;

    set @d=convert(date,@y+'-11-01'); -- cannot golf out dashes for dates <year 1000

    declare @t table(d date,c int identity)

    while @i<28 
    begin -- populate "November" array
        if datepart(weekday,@d)=5 insert @t(d) select @d -- assumes @@datefirst = 7
        select @d=dateadd(d,1,@d),@i+=1
    end;

    select @d=d from @t where c=4 

    return @d

end

क्या यह वास्तव में सबसे छोटा रास्ता है?
21

मुझे लगता है कि मैं कोड गोल्फ के नियमों से परिचित नहीं हो सकता, लेकिन उत्तर एक डीबी ऑब्जेक्ट बनाता है जो इनपुट को स्वीकार करता है और आउटपुट को ओपी से मिलान करता है। वहाँ कुछ स्पष्ट छोटा है कि अगर इनपुट इनलाइन कोड में स्वीकार किया जा सकता है, लेकिन यह फ़ंक्शन ऑब्जेक्ट प्रकार के लिए मेरा विचार था। मुझे यकीन है कि इसे किसी भी मामले में आगे बढ़ाया जा सकता है। @ThomasKwa, क्या आपके पास सुझाव हैं?
पीटर वांडिवियर

वैसे, यह मुझे लगता है कि आप शुद्ध-गणित के फार्मूले का उपयोग कर सकते हैं जिसमें इस उत्तर का उल्लेख है और उस सभी तारीख के सामान से परेशान नहीं हैं।
२१:

कड़ाई से शुद्ध-गणित समाधान नहीं, लेकिन उस उत्तर को पढ़ने से निश्चित रूप से मुझे 200 पात्रों को बाहर निकालने के कुछ विचार मिले। धन्यवाद!!
पीटर वांडिवियर

(मेरा मतलब था (28 - ( x - 2 + floor(x / 4) - floor(x / 100) + floor(x / 400) ) % 7) हाँ, अन्य उत्तर पढ़ने से बहुत मदद मिलती है।
२१:१५

3

पायथ, 30 28 * 75% = 21 बाइट्स

मैं 100% सकारात्मक हूं कि इसे कम किया जा सकता है, लेकिन हे, यह मेरा पहला पायथ कार्यक्रम है! \ O /

-28.11%+-+-Q2/Q4/Q100/Q400 7

परीक्षण सूट

dd.mmप्रारूप में दिनांक को आउटपुट करता है।

यदि आप यह कर सकते हैं तो कृपया गोल्फ को सुझाव दें! मैं अजगर के बारे में अधिक जानना चाहता हूं।


2

एक्सेल, 64 48

वर्ष A1 में

= DATE (A1,11, CHOOSE (कार्यदिवस (DATE (A1,11,1)), 26,25,24,23,22,28,27))

=DATE(A1,11,MOD(12-WEEKDAY(DATE(A1,11,1)),7)+22)

चूंकि एक्सेल स्थानीयकरण आधारित है और मैं इसका परीक्षण करना चाहूंगा। कृपया बताएं कि कार्य क्या करते हैं, इसलिए मैं अपनी भाषा में उचित का चयन कर सकता हूं।
एंजेलो फुच्स

1
इसके अलावा, यह 1900 से पहले की तारीखों (एक्सेल की मेरी कॉपी में) के लिए काम नहीं करता है
एंजेलो फुच्स

इसके अलावा, आप को बचाया 13पर बाइट्स TEXTसे =TEXT(DATE(A1,11,MOD(12-WEEKDAY(DATE(A1,11,1)),7)+22),"d mmm")उत्पादन स्वरूपण के बिना एक पूर्णांक है -।
user3819867

@ user3819867, कि एक्सेल अपनी तारीखों को कैसे स्टोर करता है। स्वरूपण उपयोगकर्ता के लिए छोड़ दिया जाता है
SeanC

@AngeloFuchs, DATE पैरामीटर के रूप में वर्ष, माह, दिन का उपयोग करते हुए, दिनांक मान लौटाता है। MOD एक विभाजन के शेष भाग (मापांक) को लौटाता है। WEEKDAY एक तारीख (1 = रविवार, 2 = सोमवार, आदि) के सप्ताह का दिन लौटाता है।
SeanC

2

Befunge, 41 बाइट्स

47*&:::4"d"*/\"d"/-\4/++5+7%-" voN",,,,.@

इस दुभाषिए पर चलाएँ ।

स्पष्टीकरण: एक सामान्य वर्ष 365 = 1 आधुनिक 7 दिन है, इसलिए वर्ष प्लस हर 4 वें वर्ष, शून्य से प्रत्येक 100 वेंd वर्ष ( एससीआई) वर्ष में, और हर 400 वें वर्ष में किसी भी लीप दिन (वर्तमान वर्ष सहित) के लिए खाते हैं। का परिणाम :::4"d"*/\"d"/-\4/++तो के रूप में मार्च 5 में सोचा जा सकता वें , पहले दिन के बाद फरवरी आम वर्षों में साल के पहले दिन के रूप में एक ही दिन में गिरावट। उसके बाद हम नवंबर 5+7%-के 28 वें ( 47*पहले संग्रहीत) से सप्ताह के कई दिनों को घटाते हुए पैटर्न को जांचते हैं । फिर प्रिंट करें।

ईसा पूर्व वर्षों के लिए सही होने वाला एक संस्करण वर्तमान में 59-25% = 44.25 बाइट्स के लिए प्रदान किए गए बोनस से अधिक लंबा है:

47*&v
!`0:<+*"(F"_v#
" voN",,,,.@>:::4"d"*/\"d"/-\4/++5+7%-


2

रूबी, 60 58 57 * 0.75 = 42.75 बाइट्स

->y{puts"Nov #{[5,4,3,2,1,7,6][Time.new(y,11).wday]+21}"}

58 बाइट्स

->y{puts "Nov #{[5,4,3,2,1,7,6][Time.new(y,11).wday]+21}"}

60 बाइट्स

->y{puts "Nov #{[5,4,3,2,1,7,6][Time.new(y,11,1).wday]+21}"}

Ungolfed:

-> y {
  puts "Nov #{[5,4,3,2,1,7,6][Time.new(y,11).wday]+21}"
}

उपयोग:

->y{puts"Nov #{[5,4,3,2,1,7,6][Time.new(y,11).wday]+21}"}

=> Nov 26

0

VBA, 124 बाइट्स * 75% = 93 बाइट्स

Function e(y)
For i = 1 To 7
x = DateSerial(y, 11, 21) + i
If Weekday(x) = 5 Then e = Format(x, "mmm dd")
Next
End Function

मुझे यकीन नहीं है कि यदि स्थान की गणना होती है, तो यह 102 और 124 के बीच कहीं है, संपादित करने के लिए स्वतंत्र महसूस करें।
यदि पूर्णांक एक वैध आउटपुट हैं तो मैं इस Formatभाग को हटाने के लिए अधिक खुश हूं ।


रिक्त स्थान की गणना; यदि वे इस कार्यक्रम के लिए अनावश्यक हैं, तो आप उन्हें हटा सकते हैं।
२१

0

PHP 5.3+, 59 बाइट्स

यह strtotimeतारीख को पार्स करने के लिए PHP बिल्टइन फ़ंक्शन का उपयोग करता है ।

<?=gmdate('M d',strtotime("Next Thursday $_GET[Y]-11-19"));

यह मान GET पैरामीटर Y या अधिक पर पारित होने की उम्मीद करता है php-cli Y=<year>

यह 19 नवंबर के बाद अगले अगले दिन खोजने की कोशिश करता है।
अब तक, मेरे द्वारा किए गए परीक्षणों के साथ, यह ठीक काम करता है।

विदित हो कि 2-अंकीय वर्षों की व्याख्या अलग तरीके से की जा सकती है।

मैं gmdateटाइमज़ोन के मुद्दों से बचने के लिए उपयोग करता हूं , लेकिन यह समान रूप से अच्छी तरह से काम करता है date(कम से कम, जहां मैं रहता हूं)।


1
एक इनपुट विधि की वैधता पर चर्चा करने के लिए एक उत्तर उपयुक्त जगह नहीं है। मैंने डिफ़ॉल्ट I / O मेटा पोस्ट में यह विकल्प बनाया है (इसलिए समुदाय इस पर वोट कर सकता है) और चैट करने के लिए आपकी बातचीत स्थानांतरित कर दी । (CC @Mego)
डेनिस

0

T-SQL 215 बाइट्स 248 * 0.75 = 186 बाइट्स

create function t(@y int)returns table return select x=convert(char(6),x,107)from(select x=cast(dateadd(dd,d,dateadd(yy,@y-2015+7600,'20151101'))as date)from(select d=21+n from(values(0),(1),(2),(3),(4),(5),(6))b(n))c)t where datepart(weekday,x)=5

Ungolfed

set nocount on;
if object_id('dbo.t') is not null drop function dbo.t
go

create function t(@y int)returns table return
    select x=convert(char(6),x,107)
    from (
        select
        x=cast(dateadd(dd,d,dateadd(yy,@y-2015+7600,'20151101'))as date)
        from (
            select d=21+n 
            from (values (0),(1),(2),(3),(4),(5),(6))b(n)
        )c
    )t
    where datepart(weekday,x)=5
go

इस परीक्षण के साथ जो मचान है

select 
  [ 2015 = Nov. 26]=(select x from dbo.t( 2015))
 ,[ 1917 = Nov. 22]=(select x from dbo.t( 1917))
 ,[ 1752 = Nov. 23]=(select x from dbo.t( 1752))
 ,[ 1582 = Nov. 25]=(select x from dbo.t( 1582))
 ,[ 1400 = Nov. 27]=(select x from dbo.t( 1400))
 ,[ -480 = Nov. 25]=(select x from dbo.t( -480))
 ,[-5480 = Nov. 28]=(select x from dbo.t(-5480))
;
go

इच्छानुसार उपज

2015 = Nov. 26  1917 = Nov. 22  1752 = Nov. 23  1582 = Nov. 25  1400 = Nov. 27  -480 = Nov. 25 -5480 = Nov. 28
--------------- --------------- --------------- --------------- --------------- --------------- ---------------
Nov 26          Nov 22          Nov 23          Nov 25          Nov 27          Nov 25          Nov 28

0

पाइक , 87 91 107 77 76 बाइट्स - 25% = 57

string t(int y){return"Nov "+((11-Calendar.Day(y,11,1)->week_day())%7+22);}

तुलना के लिए पुराने को छोड़ दें क्योंकि मुझे कैलेंडर मॉड्यूल का लाभ लेने के मामले में यह अधिक चतुर लगता है, लेकिन उपरोक्त तरीका छोटा है।

string t(int y){object n=Calendar.Month(y,11);return"Nov "+(n->weeks()->day(4)&n->days())[3]->month_day();}

यह इनपुट लेने के लिए प्रतीत नहीं होता है।
पीटर टेलर

हाँ, मैं इससे भ्रमित हो गया, कुछ समाधानों में एक फ़ंक्शन परिभाषा है और कुछ बस एक चर का उपयोग करते हैं जो कहीं भी परिभाषित नहीं है, इसलिए मुझे यकीन नहीं है कि मुझे बायटेकाउंट के लिए क्या उपयोग करना है।
ईएमबी

मुझे लगता है कि जो उत्तर आप " एक चर जिसे कहीं भी परिभाषित नहीं किया गया है " का उपयोग करते हुए देखते हैं, वास्तव में एक बहुत ही कम फ़ंक्शन घोषणा सिंटैक्स का उपयोग कर रहे हैं। एक या दो उत्तर हैं जो एसोलैंग का उपयोग करते हैं जिनके पास स्टडिन के लिए विशेष उपचार है और इसलिए पूर्ण कार्यक्रम लिखने के पक्ष में हैं। मैं पाइक को नहीं जानता, लेकिन यदि आप व्हाट्सएप को हटा सकते हैं और प्राप्त करने के लिए फ़ंक्शन नाम को संक्षिप्त कर सकते हैं string t(int y){object n=Calendar.Month(y,11);return"Nov "+(n->weeks()->day(4)&n->days())[3]->month_day();}तो मैं इसे 107 बाइट्स के रूप में गिनता हूं।
पीटर टेलर

मुझे लगता है कि मैंने कुछ ऐसे कार्य देखे हैं जो कार्य घोषणा नहीं थे, लेकिन वे तय किए गए प्रतीत होते हैं, केवल छोटा उदाहरण फिट नहीं होता है। अगर यह मान्य है तो मैं इस एक और 17 बाइट्स को शेव कर सकता
हूं

स्मॉलटाक संस्करण को एक कार्यक्रम के रूप में लिखा गया है - विशेष रूप से एक कार्यक्षेत्र अभिव्यक्ति। हमें बताया गया कि हमें इनपुट देने के बजाय इनपुट दिया गया है।
यूआन एम

0

स्मॉलटाक - स्क्वीक और फेरो , 69 57 54 49 35 34 33 32 - 25% = 24 बाइट्स

" नोव एनएन": 69 बी 49 बी (-25% = 36.75 बी)
11 एनएन (एनआईएनटी): 57 54 32 बी (-25% = 24 बी)

"Year supplied as an integer value, y  
 Result provided as an integer value, 11nn
 Methods Date>>y:m:d: and >>w created as duplicates 
 of year:month:day and weekdayIndex"
(12-(Date y:y m:11d:1)w)\\7+1122

पिछला संस्करण

11nn आउटपुट

"Year supplied as an integer value, y  
 Result provided as an integer value, 11nn"
(12-(Date year:y month:11 day:1) weekdayIndex)\\7+1122

"Year supplied as an integer value, y  
 Result provided as an integer value, d, prefixed by 11"
d:=(12-(Date year:y month:11 day:1) weekdayIndex)\\7+1122

Nov nn आउटपुट

"Year supplied as an integer value, y  Result provided as a string, 'Nov nn'"
'Nov ', (12-(Date year:y month:11 day:1) weekdayIndex\\7+22) asString

एनएन आउटपुट

"Year supplied as an integer value, y  Result provided as an integer value, d"
d:=(12-(Date year:y month:11 day:1) weekdayIndex)\\7+22

nb यह एक कार्यक्रम के रूप में प्रदान किया जाता है - विशेष रूप से एक कार्यक्षेत्र अभिव्यक्ति - बजाय एक विधि के रूप में।

यह मानता है कि इनपुट एक दिया गया है (जैसा कि वाक्यांश के अनुसार "एक अप-टू-फोर-डिजिट ईयर दिया गया है"।
इनपुट की घोषणा करने और देने में एक और 11 अक्षर शामिल होंगे:

|y|y:=2015.(12-(Date y:y m:11 d:1)w)\\7+1122

EMBee के लिए धन्यवाद, यह दिखाने के लिए कि 'w' से तुरंत पहले एक और चार - व्हाट्सएप को कैसे हटाया जाए।

दरअसल, इससे मुझे 'डी:' से पहले व्हॉट्सएप को हटाने की कोशिश करने की प्रेरणा मिली:
|y|y:=2015.(12-(Date y:y m:11d:1)w)\\7+1122
जो काम किया!


ओपी के स्पष्टीकरण के अनुसार , दिन संख्या संस्करण मान्य नहीं है।
मेगो

मैं सहमत हूं - लेकिन यह देखते हुए कि सूची में कुछ दिन-संख्या-केवल संस्करण हैं, मैंने इसे एक सेब-से-सेब की तुलना के लिए रखा
Euan M

0

जीएनयू कोरुटिल्स, 35 बाइट्स

seq -f$1-11-2%g 2 8|date -f-|grep h

बस सप्ताह 22-28 नवंबर को गुरुवार के लिए खोजता है। इसे C या POSIX लोकेल में चलाएं, क्योंकि मैं गुरुवार को केवल 'h' सम्‍मिलित करने के लिए एकमात्र दिन संक्षिप्त नाम पर निर्भर करता हूं।


यहाँ एक चतुर उत्तर है, यद्यपि एक बाइट लंबे समय तक:

echo Nov $((28-`date -d$1-5-5 +%w`))

हम मार्च और सितंबर (इसलिए दिन और महीने एक-एक अंक हैं, और हम एक संभावित छलांग दिन से प्रभावित नहीं होते हैं) के बीच काफी मनमानी सप्ताह में एक तारीख के दिन की संख्या को पुनः प्राप्त करते हैं। हम उस दिन को चुनते हैं ताकि यह रविवार ( %w==0) हो जब थैंक्सगिविंग 28 तारीख को हो। हम तब उचित गुरुवार को प्राप्त करने के लिए उस मूल्य को 28 से घटा सकते हैं।


2
यह काम करता है जब तक कि शॉन कॉनरी इसे नहीं चलाता।
bkul 21

0

TSQL, 53 52 बाइट्स

DECLARE @ CHAR(4)=2000

PRINT DATEADD(d,59,DATEDIFF(d,1,DATEADD(m,9,@))/7*7)

बेला

सितंबर 2 से पहले या 59 दिनों के लिए सोमवार की गणना करना

(4 अक्टूबर को या उससे पहले सोमवार को गणना करने और 31 दिनों को जोड़ने से बेहतर है क्योंकि अक्टूबर 10 वां महीना है, इस प्रकार 1 बाइट की बचत होती है)


-1

पर्ल, 92 बाइट्स

use Time::Local;(localtime(timelocal 0,0,0,$_,10,$ARGV[0]))[6]==4?print "Nov $_":0for 22..28

संपादित करें: फिक्स्ड आउटपुट प्रारूप, फिक्स्ड बग जैसे 2012 परिणाम, "प्रारूप" के लिए कम उपयोग किया जाता है। Msh210 के लिए धन्यवाद।


यह छोटा है और एक ही काम करता है use Time::Local;(localtime(timelocal 0,0,0,$_,10,$ARGV[0]))[6]==4?print:0for 22..29:। लेकिन दोनों स्क्रिप्ट एक ही दोष से पीड़ित हैं: (1) वे आवश्यकतानुसार महीने का प्रतिनिधित्व नहीं करते हैं; (2) उनके पास 2012 के लिए गलत आउटपुट है।
msh210
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.