किसी दिए गए वर्ष और महीने में सप्ताह के पहले दिन की तारीख प्राप्त करें


17

परिचय

अक्सर, लोग तारीखों को "अगस्त में दूसरा शुक्रवार, 2018" या "मार्च, 2012 में चौथा रविवार" कहते हैं। लेकिन यह बताना मुश्किल है कि वह कौन सी तारीख है! आपका कार्य एक कार्यक्रम लिखना है जो एक वर्ष, एक महीने, सप्ताह का एक दिन और एक पूर्णांक, और उस दिनांक को आउटपुट करता है।

चुनौती

  • इनपुट के लिए, आपको एक वर्ष, एक महीना, सप्ताह का एक दिन और एक नंबर मिलेगा।

  • आप किसी भी उचित प्रारूप में इनपुट ले सकते हैं, जैसे सप्ताह के दिन के लिए एक स्ट्रिंग का उपयोग करना या एक शून्य अनुक्रमित सप्ताह के दिन का उपयोग करना, या यहां तक ​​कि एक ही स्ट्रिंग में वर्ष और महीना भी ले सकते हैं। अपने इनपुट प्रारूप को अपने उत्तर में स्पष्ट करें, हालाँकि।

  • पूर्णांक जो आपको बताता है कि सप्ताह के किस दिन को लक्षित करने के लिए 1-5 से पूर्णांक होगा। पूर्णांक कभी भी सप्ताह के उस दिन को संदर्भित नहीं करेगा जो अस्तित्व में नहीं है (उदाहरण के लिए फरवरी 2019 का पांचवा शुक्रवार, जो मौजूद नहीं है)।

  • साल हमेशा सकारात्मक रहेगा।

  • आपका आउटपुट किसी भी उचित प्रारूप में हो सकता है, जिसमें आपकी अंतिम तिथि को प्रिंट करना शामिल है। हालाँकि, कृपया अपने आउटपुट प्रारूप को अपने उत्तर को स्पष्ट करें।

  • आउटपुट में वर्ष और महीना प्रदान करना वैकल्पिक है। इसके अलावा, आप मान सकते हैं कि तारीख वैध है।

उदाहरण इनपुट और आउटपुट

इस इनपुट पर विचार करें, इस प्रारूप में वर्ष में 4 अंकों की संख्या, पूर्णांक के रूप में महीना, स्ट्रिंग के रूप में सप्ताह का दिन और पूर्णांक के रूप में क्रमिक संख्या के रूप में लिया जा रहा है:

2019, 3, शनिवार, 2
2019, 12, रविवार, 1
2019, 9 शनिवार, 1

आउटपुट:

मार्च 9
दिसंबर 1
सितंबर 7

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


1
मुझे लगा कि मैं GNU का उपयोग करने में सक्षम हो सकता हूं date, लेकिन आश्चर्यजनक रूप से, पार्सर की एक ... यहां दिलचस्प व्याख्या है।
दरवाज़े

मई सप्ताह की संख्या 0-अनुक्रमित हो सकती है?
जो राजा

ज़रूर, अगर यह आपके कार्यक्रम को सूट करता है
इग्नोरेंस

सुझाया गया टेस्ट केस: 2018, 12, रविवार 1
Adám

सुझाया गया परीक्षण मामला: सितंबर 2019 में पहला शनिवार
झबरा

जवाबों:


4

मीडियाविकि टेम्पलेट, 19 बाइट्स

{{#time:r|{{{1}}}}}

यह इस PHP उत्तर का एक MediaWiki टेम्पलेट ParserFunctions पोर्ट है

नोट: #timePHP का strtotimeआंतरिक रूप से उपयोग करें ।


नमूना इनपुट

{# समय: आर | मार्च 2019 का दूसरा शनिवार}}

नमूना आउटपुट

शनि, 09 मार्च 2019 00:00:00 +0000


3

जाप, 19 15 बाइट्स

इनपुट है: वर्ष, महीने का 0-आधारित सूचकांक, सप्ताह के दिन का 0-आधारित सूचकांक ( 0रविवार है) और n

_XµW¶Ze}f@ÐUVYÄ

कोशिश करो

                    :Implicit input of U=year, V=month, W=weekday & X=n
       }f           :Output the first element generated by the right function that returns
                    : falsey (0) when passed through the left function
         @          :Right function. Y=0-based index of current iteration
          ÐUVYÄ     :  new Date(U,V,Y+1)
_                   :Left function. Z=date being passed
 Xµ                 :  Decrement X by
   W¶               :   Test W for equality with
     Ze             :    Z.getDay()

2

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 59 बाइट्स

(y,m,d,w)=>1+(d-(int)new DateTime(y,m,1).DayOfWeek+7)%7+7*w

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

-27 बाइट्स @EmbodimentOfIgnorance की बदौलत!

कम गोल्फ कोड ...

// y: year
// m: month
// d: day of week (0 is Sunday)
// w: week number (0 based)
(y,m,d,w)=>
  // start on the first day of the month
  1+
  // determine the number of days to
  // the first occurrence of the
  // requested weekday
  (d-(int)new DateTime(y,m,1).DayOfWeek+7)%7+
  // add the number of requested weeks
  7*w

अनुरोधित तिथि के महीने के दिन के लिए रिटर्न वैल्यू एक पूर्णांक है।


यदि आप केवल महीने का दिन लौटाते हैं, जिसकी अनुमति है, तो आप इसे 59 बाइट्स के
को अज्ञानता

टिप के लिए फिर से धन्यवाद - (यह आज 2x है;) मैं अपने उत्तर अपडेट करूंगा।
दाना

2

स्माइलबासिक, 58 51 48 46 45 बाइट्स

READ N,M$DTREAD M$OUT,,D,W?(5-W+D*2)MOD 7+N*7

इनपुट फॉर्म में है: week,year/month/weekday

  • week: सप्ताह संख्या, 0-अनुक्रमित
  • year: वर्ष, 4 अंक
  • month: महीना (1-अनुक्रमित), 2 अंक- 0आधारित
  • weekday: सप्ताह का दिन (1-अनुक्रमित, 1 = रविवार), 2 अंक- 0अंकित

आउटपुट महीने का दिन है, 0 अनुक्रमित है।
मार्च 2019 में दूसरा शनिवार 1,2019/03/078(9 मार्च) होगा

Ungolfed

READ WEEK,M$
DTREAD M$ OUT ,,D,W
'Functions in SB can output multiple values using OUT.
'In this case, we don't need the first 2 values, so no variables are given.

PRINT (5-W+ D*2) MOD 7 +WEEK*7

व्याख्या

इनपुट फॉर्म को विशेष रूप से चुना गया था ताकि वर्ष / महीना / कार्यदिवस को सीधे पारित किया जा सके DTREAD, जो कि एक ऐसा कार्य है जो एक YYYY/MM/DDस्ट्रिंग को पार करता है और वर्ष / महीने / दिन को संख्याओं के साथ-साथ सप्ताह के दिन की गणना करता है।

हालाँकि, ध्यान दें कि, जहाँ DTREADमहीने के दिन की उम्मीद है, हम इसे सप्ताह के दिन के बजाय दे रहे हैं। यह चीजों को जटिल करता है, लेकिन इसका मतलब यह भी है कि कम इनपुट मूल्य हैं और हमें /01तारीख स्ट्रिंग के अंत में जोड़ने की आवश्यकता नहीं है ।

DTREADआउटपुट Wऔर D
Wसप्ताह का दिन है, और Dमहीने के Wवें दिन का दिन है।
(तो, अगर आप इनपुट 7काम करने के दिन के रूप में, Dहो जाएगा 7और Wहो जाएगा जो कुछ दिन के इस सप्ताह इस माह के 7 वें दिन है)

अभिव्यक्ति (5-W+D*2)MOD 7का उपयोग इनपुट कार्यदिवस की पहली घटना को प्राप्त करने के लिए किया जाता है, महीने के 0-अनुक्रमित दिन के रूप में। (मुझे यह पता चला कि ज्यादातर परीक्षण और त्रुटि के माध्यम से)

उसके बाद, प्रोग्राम सिर्फ जोड़ता है WEEK*7


मैं वास्तव में "सप्ताह के दिन" और "महीने का दिन" के लिए अलग-अलग शब्द थे।


2

पर्ल 6 , 52 48 बाइट्स

{1+($^c+4-Date.new($^a,$^b,1).daycount)%7+$^d*7}

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

अनाम कोड ब्लॉक जो वर्ष, महीने, सप्ताह के दिन (रविवार को 0) और सप्ताह संख्या (0 अनुक्रमित) के रूप में इनपुट लेता है। आउटपुट एक दिनांक ऑब्जेक्ट है।

पुरानी व्याख्या:

{                                                  } # Anonymous code block
 (   Date.new(         ))   # Create a new date with
              $^a,$^b,1     # With year, month and the first day
  $_=                       # Save in the variable $_
                         +  # Add to this
                           $^c+4                     # The given day plus 4
                          (     -.daycount)          # The number of days since 17 Nov, 1858
                                           %7        # Modulo 7 to get the correct day
                                             +$^d*7  # Plus the 7 times the number of weeks

मुझे लगता है कि सप्ताह की संख्या को 1-अनुक्रमित करने की आवश्यकता है
12M2121

@ 12Me21 सवाल यह है कि इनपुट लचीला है, लेकिन मैंने पूछा है कि क्या हम एक सप्ताह के नंबर को 0 अनुक्रमित करते हैं
जो किंग

यह अन्य महीनों के लिए काम नहीं करता है। मुझे लगता है कि आपको जरूरत है $^c+4-$!.daycount
nwellnhof

@nwellnhof आह, मुझे लगता है कि परीक्षण और त्रुटि के बजाय, योग्य होना चाहिए। अब तय किया जाना चाहिए
जो राजा

1

MATL , 28 27 बाइट्स

'1 'ihYO31:q+t8XOi=!A)i)1XO

यह तीन इनपुट का उपयोग करता है:

  • महीने और वर्ष के साथ स्ट्रिंग: 'March 2019'
  • तीन अक्षरों के साथ स्ट्रिंग, पहले पूंजीकृत, सप्ताह के दिन का संकेत: ' Sat'
  • संख्या: 2

आउटपुट दिन के साथ एक स्ट्रिंग है, वर्ष और महीने डैश के साथ अलग किए जाते हैं 09-Mar-2019:।

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

व्याख्या

आदानों पर विचार करें 'March 2019', 'Sat', 2

'1 '    % Push this string
        % STACK: '1 '
ih      % Input string: month and year. Concatenate
        % STACK: '1 March 2019'
YO      % Convert to serial date number
        % STACK: 737485
31:q+   % Create vector [0 1 2 ... 30] and add element-wise
        % STACK: [737485 737486 737487 ... 737515]
t8XO    % Duplicate. Convert to date format 'ddd': day of week in three letters. Gives
        % a 2D char array
        % STACK: [737485 737486 737487 ... 737515], ['Fri'; 'Sat'; 'Sun'; ...; 'Sun']
i=      % Input string: day of week in three letters. Compare element-wise with broadcast
        % STACK: [737485 737486 737487 ... 737515],
        % [0 0 0; 0 0 0; ...; 1 1 1; 0 0 0; ... 1 1 1; ...]
!A      % True for rows containing only 1
        % STACK: [737485 737486 737487 ... 737515], [0 0 ... 1 ... 0 ... 1 ...]
)       % Index: uses the second vector as a mask into the first
        % STACK: [737486 737493 737500 737507 737514]
i)      % Input number. Index
        % STACK: 737493
1XO     % Convert to date format 'dd-mmm-yyyy'. Implicit display
        % STACK: '09-Mar-2019'

1

पायथन 3 , 92 82 बाइट्स

@ ब्यो राजा को 82 बाइट्स धन्यवाद

lambda y,m,d,w:z(y,m)[w-(z(y,m)[0][d]>0)][d]
from calendar import*
z=monthcalendar

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

मूल संस्करण, 92 बाइट्स

from calendar import*
def f(y,m,d,w):
 x=monthcalendar(y,m)
 if x[0][d]:w-=1
 return x[w][d]

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

वर्ष को पूर्णांक के रूप में लेता है, महीने को 1-इंडेक्स पूर्णांक के रूप में, सप्ताह के दिन को 0-इंडेक्स पूर्णांक के रूप में, जहां पिछले है 0 और रविवार को है 6, और महीने के सप्ताह को 1-इंडेक्स पूर्णांक के रूप में देखता है।

यह काम किस प्रकार करता है:

# import monthcalendar
from calendar import*
# function with 4 inputs
def f(y,m,d,w):
 # get a 2-D array representing the specified month
 # each week is represented by an array
 # and the value of each element is its date of the month
 # Monday is the 0th element of each week, Sunday is the 6th element
 # days of the first week of the month before the 1st are 0s 
 x=monthcalendar(y,m)
 # if the first week of the month includes the desired day of week
 # convert the week of month to 0-index so that it takes into account the first week
 if x[0][d]:w-=1
 # return the weekday of the week number specified
 return x[w][d]

1

आर , 72 69 बाइट्स

function(y,m,d,n,D=as.Date(paste0(y,-m,-1))+0:31)D[weekdays(D)==d][n]

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

इनपुट के रूप में लेना:

  • वर्ष संख्या
  • माह संख्या (1-12)
  • वर्तमान लोकेशन में साप्ताहिक स्ट्रिंग (TIO के लिए बड़े अक्षर के साथ अंग्रेजी नाम की आवश्यकता होती है)
  • साधारण संख्या (1-अनुक्रमित)

0

PHP , 46 , 43 , 31 बाइट्स

<?=date(d,strtotime($argv[1]));

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

कार्यक्रम इनपुट की तरह एक स्ट्रिंग प्राप्त करता है "second saturday of March 2019"

कार्यक्रम दिन की संख्या प्रिंट करता है।

-12 बाइट्स शैगी को धन्यवाद।



इसके अलावा, मुझे नहीं लगता कि आपको ofइनपुट की आवश्यकता है ।
शैगी

@ शैगी, मुझे लगता है कि ये विवरण हैं। कई विकल्प हो सकते हैं।
Кирилл Малышев



0

लाल , 64 60 बाइट्स

func[y m d n][a: to-date[1 m y]d - a/10 - 7 % 7 +(n * 7)+ a]

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

वर्ष, माह और सप्ताह के दिनों को संख्या के रूप में लेता है, 1-अनुक्रमित, सोमवार सप्ताह का पहला दिन है।


हुंह, to-dateएक बात है। शायद यह क्रिस्मस ईव फॉर्मेट चैलेंज
एएससीआईआई-ओनली

@ ASCII- केवल हमने nowउस चुनौती के लिए उपयोग किया
गैलेन इवानोव

1
हाँ, लेकिन मैं वैकल्पिक तरीकों के बारे में सोच रहा था (यानी, <दोहराने " Eve"DATE2-DATE1 बार> विधि iirc)
ASCII-केवल

@ ASCII- केवल>> 25-Dec-2019 - 1-1-2019 == 358
गैलेन इवानोव

0

एपीएल (Dyalog यूनिकोड) , 36 बाइट्स SBCS

पूरा कार्यक्रम। के लिए संकेत [year,month](जनवरी 1 है), फिर दिन के लिए (रविवार 0 है), फिर एन के लिए (पहले 1 है)।

date⎕⊃d/⍨⎕=7|d←(⍳31)+days⎕⊣⎕CY'dfns'

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

⎕CY'dfns'सी। ons लाइब्रेरी में p y

 उस के परिणाम को त्यागें ...

 शीघ्र सांत्वना [year,month]संख्या के

days[ग]  दिन [एन] १-12 ९९ -१२-३१ के बाद से उस महीने के ० वें दिन

(⍳31)+ जोड़ें मैं ntegers 1 ... 31 कि करने के लिए

d← सग्रह करना d (के लिए ay संख्या)

7| विभाजन तब शेष रहता है जब 7 से विभाजित होता है (रविवार को दिन के साथ-साथ सप्ताह अच्छा होने के कारण 0 होता है)

⎕= दिन-प्रति-सप्ताह की संख्या के लिए संकेत कंसोल और जहां सप्ताह के दिनों की संख्या के बराबर मुखौटा प्राप्त करें

d/⍨ फिल्टर dउस मास्क से

⎕⊃ एन के लिए शीघ्र सांत्वना और दिन की संख्या की सूची से लेने के लिए उपयोग करें

date[c]  डेटाइम स्टैम्प [n] (घंटे, मिनट, सेकंड, मिलीसेकंड के लिए शून्य को पीछे कर रहा है)


नोट के लिए [c] कोड के लिए और [n] पर क्लिक करें ।


0

जावास्क्रिप्ट (ईएस 6), 49 48 बाइट्स

f=
(a,d,n)=>(d+6-new Date(...a,7).getDay())%7+n*7-6
<div oninput=o.textContent=f([+y.value,+m.value],+d.value,+n.value)>Year: <input id=y type=number value=2019><br>Month: <select id=m><option value=0>Jan<option value=1>Feb<option value=2>Mar<option value=3>Apr<option value=4>May<option value=5>Jun<option value=6>Jul<option value=7>Aug<option value=8>Sep<option value=9>Oct<option value=10>Nov<option value=11>Dec</select><br>Day: <select id=d><option value=0>Sun<option value=1>Mon<option value=2>Tue<option value=3>Wed<option value=4>Thu<option value=5>Fri<option value=6>Sat</select><br>Count: <input id=n type=number value=1 min=1 max=5><pre id=o>

के रूप में पैरामीटर लेता है f([year, month], day, number)। सप्ताह का महीना और दिन (रविवार से शुरू) शून्य-अनुक्रमित हैं। संपादित करें: @ बस्ती के लिए 1 बाइट का धन्यवाद सहेजा गया।


सप्ताह का दिन रविवार-शनिवार या सोमवार-रविवार है?
अज्ञानता

@EmbodimentofIgnorance क्षमा करें, मुझे पता था कि मैं कुछ भूल गया था। (स्निपेट अब इसे आसान बनाने के लिए चुनिंदा का उपयोग करता है।)
नील

@EmbodimentofIgnorance, रविवार 0जेएस में है।
शैगी

ओह। मुझे नहीं पता था कि, मैं जावास्क्रिप्ट से परिचित नहीं हूँ।
अज्ञानता



0

कोटलिन , 131 84 बाइट्स

47 बाइट्स ASCII- केवल कोड और टिप्पणी के लिए धन्यवाद।

इनपुट: वर्ष, माहनंबर, कार्यदिवस निंबर, सप्ताहनंबर

सिंगल लाइन पर सभी पूर्णांक 1 से अधिकतम। सप्ताह का दिन नंबर 1 से शनिवार के दिन 7 से 7 है। मुख्य कार्यक्रम वर्ष को 1900 तारीख वर्ग के लिए खो देता है और महीने और सप्ताह के दिन को लैम्बडा कॉल करने से पहले एक के बजाय शून्य से शुरू करने के लिए स्थानांतरित कर दिया जाता है। आप अपनी स्वयं की तिथियों को आज़माने के लिए इनपुट टेक्स्ट बॉक्स में अपने तर्क दर्ज कर सकते हैं।

आउटपुट: एक तिथि वर्ग उदाहरण। मुख्य कार्यक्रम परिणाम प्रदर्शित करता है जैसे: सत मार 09 00:00:00 यूटीसी 2019।

अधिक जानने के इच्छुक लोगों के लिए कोड की व्याख्या करने वाली टिप्पणियों के साथ एक विस्तारित संस्करण है।

{y,m,d,w->val r=java.util.Date(y,m,7*w)
r.setDate(r.getDate()-(r.getDay()+7-d)%7)
r}

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


1
74 - स्काला और ग्रूवी के उत्तर के समान विधि का उपयोग करता है
ASCII-only


1
आयात आदेश की अब कोई आवश्यकता नहीं है, इसलिए यह समस्या नहीं है: P
ASCII-only
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.