आज का दिन (या अन्य तिथियां) क्या है?


12

कार्य

एक प्रोग्राम या एक फ़ंक्शन लिखें जो एक उपयोगकर्ता द्वारा इनपुट की गई तारीख के एक सप्ताह के दिन के नाम की गणना करता है।

इनपुट आउटपुट

इनपुट, एक स्ट्रिंग है YYYYMMDD

इनपुट मानों का उदाहरण:

20110617: 17 जून, 2011
19040229: 29 फरवरी, 1904
06661225: 25 दिसंबर, 666
00000101: 1 जनवरी, 0
99991231: 31 दिसंबर, 9999

आप मान सकते हैं कि सभी इनपुट मान्य हैं। ध्यान दें कि वर्ष शून्य मान्य है।

आउटपुट के बीच एक पूर्णांक है 0और 6। प्रत्येक पूर्णांक एक सप्ताह के दिन के नाम का प्रतिनिधित्व करता है। आप स्वतंत्र रूप से तय कर सकते हैं कि कौन सा पूर्णांक एक सप्ताह के दिन का नाम दर्शाता है, जैसे यह

0: सोमवार
1: मंगलवार
2: बुधवार
...
6: रविवार

(क्रम में) या यह एक

0: सोमवार
1: बुधवार
2: रविवार
...
6: शनिवार

(क्रम में नहीं)।

परीक्षण के मामलों

इनपुट वीक-डे आउटपुट ([0..6 -> सोमवार। रविवार] इस उदाहरण में उपयोग किया जाता है।)

20110617 शुक्रवार 4
19500101 रविवार 6
22220202 शनिवार 5
19000228 बुधवार 2
19000301 गुरुवार 3
19450815 बुधवार 2
19040229 सोमवार ०
19040301 मंगलवार 1
17760704 गुरुवार 3
२००००२२ 0 सोमवार ०
२००००२२ ९ मंगलवार १
२००००३०१ बुधवार २
20121223 रविवार 6
00000401 शनिवार 5
66660606 बुधवार 2
59161021 शनिवार 5

बंधन

आपको किसी भी प्रकार के फ़ंक्शन / वर्ग / ... का उपयोग नहीं करना चाहिए, जो टाइमस्टैम्प या दिनांक से संबंधित हैं, जैसे कक्षा में / / , या में फ़ंक्शन ।DateJavaJavaScriptActionScriptgetdatePHP

आपको ग्रेगोरियन कैलेंडर का उपयोग करना चाहिए , जिसका उपयोग अब कई लोग करते हैं।

बेशक, सबसे छोटा कोड जीतता है। यदि दो कोड की लंबाई समान है, तो उच्चतम वोटों वाला कोड जीत जाता है।

(वहां: जब 5 से अधिक कोड हों, जिनमें +1वोट (या बराबर) से अधिक हों ।)


आज? क्यों, क्रिसमस दिवस!
जोए एडम्स

3
बैश (6 वर्णों) में लिखा गया आशावादी समाधान echo 4:।
सच्चाई

1
@trutheality नहीं, मेरा मतलब यह नहीं था कि मैं जो चाहता था वह एक ऐसा कोड है जो किसी को टाइप किए हुए तारीख के सप्ताह का दिन / रिटर्न देता है, न कि केवल आज के सप्ताह के दिन का प्रिंट।
जमिनपी

ओह, मुझे पता है। यही वह करता है।
सच्चाई १ity

यह कम से कम 14% समय है!
ड्रैक 18s अब

जवाबों:


2

रूबी, ९ ५ ९ अक्षर

0: सोमवार, के साथ सीधा रूबी कार्यान्वयन

p ((y=(d=gets.to_i)/(k=100)/k-((m=d/k%k)<3?1:0))+y/4-y/k+y/400+"squsptrotqro"[-m].ord+d%k)%7

4

PHP - 101 97 103 125 अक्षर

  • सकामोटो एल्गोरिथम
  • 0 = रविवार

कोड

<?php fscanf(STDIN,"%4d%2d%2d",$y,$m,$d);@$a=a032503514624;$y-=$m<3;$z=$y+1;echo($y+$y/4%$z-$y/100%$z+$y/400%$z+$a[$m]+$d)%7;

ध्यान दें

दुर्भाग्य से, PHP के गतिशील, कमजोर टाइपिंग के कारण, सकामोटो एल्गोरिदम प्रत्येक डिवीजन ऑपरेशन को स्पष्ट रूप से फर्श के बिना ठीक से काम नहीं करता है।


क्या आप फिर से परीक्षण कर सकते हैं? कुछ वर्षों के लिए यह मुझे अलग-अलग परिणाम देता है (उदाहरण के लिए टेस्टकेस 17760704 पैदावार के बजाय मंगलवार का दिन)।
हावर्ड

@ यह कितना अजीब है; 17760704 के लिए, मुझे बुधवार मिलता है। मुझे अन्य असंगतताएं मिलती हैं, हालांकि, जिसका मैं हिसाब नहीं कर सकता, उदाहरण के लिए 19040229 मंगलवार। निश्चित नहीं है कि यह क्या कारण हो सकता है। जब मैं वापस एल्गोरिथ्म का विस्तार करता हूं तो मुझे वही परिणाम मिलते हैं y+y/4-y/100+y/400
१६:११ बजे

मैं इसे y=4४ ९ y * y / ४०० के साथ घटित होते हुए देख सकता हूं: उस स्थिति में ४ रिटर्न के बजाय ५ से सही y+y/4+y/100+y/400(जहां केवल पहले दो शब्द चलन में आते हैं)। यह वही है जो मेरे जावास्क्रिप्ट उत्तर का विरोध करता है। क्या यह संभव है कि चींटियों के बजाय युगल पैदा किए जा रहे हैं? (मेरा PHP पता करने के लिए बहुत कमजोर है।)
डॉकमैक्स

@ डॉकमैक्स: विस्तारित अभिव्यक्ति को छोड़ने का एक ही परिणाम है (497y / 400 समतुल्य होना चाहिए: y / 100 घटाया गया और y / 400 को फिर से जोड़ा गया)। मैं अनुमान लगा रहा हूं कि PHP केवल राउंडिंग के बजाय दशमलव के बाद सब कुछ काट रही है। मैंने मोडुलो से पहले गोलाई में यह परीक्षण किया। यह दो विसंगतियों को ठीक करता है, लेकिन 19040229 अभी भी एक ही परिणाम देता है। कोई अन्य विचार?
१६:११

@rintaun मुझे नहीं लगता कि यह गोलाई है। वे मौलिक रूप से अलग हैं। ऊपर से उदाहरण लें (y = 4): 497 * 4/400 = 1988/400 = 4 लेकिन दूसरी ओर 4 + 4 / 4-4 / 100 + 4/400 = 4 + 1-0 + 0 = 5 । आपकी गणना में शब्द / 100 और / 400 बहुत अधिक हो जाते हैं जैसे कि 2000 तक नहीं पहुंचा जा सकता।
हावर्ड

2

सी - 129

main(y,m,d,s)
{
    scanf("%04d%02d%02d",&y,&m,&d);
    y-=s=86400;
    d+=y+"-addgbegcfadf"[m];
    m>2?y++:0;
    putchar(48+(d+y/4-y/100+y/400+s+s)%7);
}

यह गाली देता है कि कैसे विभाजन शून्य की ओर बढ़ता है, कम से कम मेरे सिस्टम (लिनक्स x86) पर।

जादू निरंतर, 86400दो उद्देश्यों में कार्य करता है:

  • सप्ताह के दिन को प्रभावित किए बिना, इसे नकारात्मक बनाने के लिए वर्ष से घटाएं। यह बनाता है ताकि विभाजन नीचे के बजाय गोल हो जाएगा।
  • दिन की संख्या को शिफ्ट करें इसलिए सोमवार 0 होगा।

यह एक दिन में सेकंड की संख्या भी होती है।


के y+=m>2;बजाय का उपयोग करें m>2?y++:0;और कुछ बाइट्स बंद दाढ़ी।
क्लीयर

2

जावास्क्रिप्ट, 126 123 वर्ण

0 = रविवार के साथ सकामोटो के एल्गोरिथ्म का उपयोग करना:

prompt().replace(/(....)(..)(..)/,function(_,y,m,d){y-=m<3;alert((+d+y-~(y/4)+~(y/100)-~(y/400)+ +".621462403513"[+m])%7)})

मुझे संदेह है कि विभाजन ध्वस्त हो सकते हैं, लेकिन अभी मैं इसे नहीं देख रहा हूं।

संपादित करें: विभाजनों में सुधार ( ~~जब आप अभी कर सकते हैं तो कोई ज़रूरत नहीं ~)।


2

पायथन 2 , 83 116 113 109 बाइट्स

सकामोटो के एल्गोरिथ्म को लागू करता है । गोल्फ सुझाव का स्वागत करते हैं। इसे ऑनलाइन आज़माएं!

संपादित करें: मुझे यह युग पहले तय करना चाहिए था। जोनाथन एलन के सुझावों से 6 बाइट्स +2 बाइट्स वास्तव में कोड को ठीक करने के लिए।

def w(s):m=int(s[4:6]);y,d=int(s[:4])-(m<3),int(s[6:]);return(y+y/4-y/100+y/400+int('032503514624'[m-1])+d)%7

इनपुट एक स्ट्रिंग होना चाहिए।
msh210

int('032503514624'[m-1])6 बचाता है
योनातन एलन

0

पर्ल - 110 बाइट्स

यहाँ perl -p source.pl या perl -pe 'यहाँ-इस-कोड' के साथ चलाया जाने वाला एक समाधान है।

s/((..)(..))(..)(..)/(1+3*$1+$2-2*($1%4+$2%4)-(2<$4?$4+(1&$4&&4-(8&$4)):(2^$4)+(!($3%4)-!-$3+!($2%4)))+$5)%7/e

बस परीक्षण के मामलों की प्रतिलिपि चिपकाएँ।

यह चर, स्ट्रिंग स्थिरांक और विभाजनों के बिना एकमात्र कोड प्रतीत होता है।


0

जावास्क्रिप्ट (ईएस 6), 73 बाइट्स (गैर-प्रतिस्पर्धात्मक)

d=>(w=new Date(d[s="slice"](0,4),d[s](4,6)-1,d[s](-2)).getDay())-(w?1:-6)

कोशिश करो

f=
d=>(w=new Date(d[s="slice"](0,4),d[s](4,6)-1,d[s](-2)).getDay())-(w?1:-6)
o.innerText=f(i.value="59161021")
oninput=_=>i.value.length==8&&(o.innerText=f(i.value))
<input id=i type=number><pre id=o>


गैर-प्रतिस्पर्धा क्यों?
प्रोग्रामर

@ प्रोग्रामर 5000, चुनौती पोस्ट की गई तारीख की जाँच करें;)
झबरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.