প্রদত্ত বছর এবং মাসে সপ্তাহের নবম দিনের তারিখ পান


17

ভূমিকা

প্রায়শই লোকেরা তারিখগুলিকে "আগস্ট, 2018 এর দ্বিতীয় শুক্রবার" বা "মার্চ, 2012 এর চতুর্থ রবিবার" হিসাবে উল্লেখ করে। তবে কী তারিখ তা বলা মুশকিল! আপনার কাজটি হ'ল একটি প্রোগ্রাম লিখুন যা এক বছর, এক মাস, সপ্তাহের একটি দিন এবং একটি পূর্ণসংখ্যা এবং সেই তারিখের আউটপুট দেয়।

চ্যালেঞ্জ

  • ইনপুট জন্য, আপনি এক বছর, এক মাস, সপ্তাহের একটি দিন এবং একটি সংখ্যা পাবেন।

  • আপনি যে কোনও যুক্তিসঙ্গত বিন্যাসে ইনপুট নিতে পারেন, যেমন সপ্তাহের দিনের জন্য স্ট্রিং ব্যবহার করা বা শূন্য সূচকযুক্ত সপ্তাহের দিন ব্যবহার করা, বা একক স্ট্রিংয়ে এমনকি বছর এবং মাস গ্রহণ করা। যদিও আপনার উত্তরে আপনার ইনপুট ফর্ম্যাটটি ব্যাখ্যা করবেন।

  • পূর্ণসংখ্যা যা আপনাকে জানায় যে মাসের সপ্তাহের কোন দিনটিকে লক্ষ্য করতে হবে এটি 1-5 থেকে পূর্ণসংখ্যা হবে। পূর্ণসংখ্যার কখনও অস্তিত্বে থাকা সপ্তাহের কোনও দিনটিকে বোঝায় না (যেমন ফেব্রুয়ারী 2019 এর পঞ্চম শুক্রবার, যা বিদ্যমান নেই)।

  • বছরগুলি সর্বদা ইতিবাচক হবে।

  • আপনার আউটপুট আপনার চূড়ান্ত তারিখ মুদ্রণ সহ যে কোনও যুক্তিসঙ্গত বিন্যাসে হতে পারে। তবে দয়া করে আপনার উত্তর অন করে আপনার আউটপুট ফর্ম্যাটটি ব্যাখ্যা করুন।

  • আউটপুটে বছর এবং মাস সরবরাহ করা isচ্ছিক। এছাড়াও, আপনি ধরে নিতে পারেন তারিখটি বৈধ।

উদাহরণ ইনপুট এবং আউটপুট

এই ইনপুটটি বিবেচনা করুন, ফর্ম্যাটটি বছরটিতে 4 সংখ্যার সংখ্যা হিসাবে, মাস হিসাবে পূর্ণসংখ্যার হিসাবে, সপ্তাহের স্ট্রিং হিসাবে দিন এবং পূর্ণসংখ্যার হিসাবে অর্ডিনাল সংখ্যাটি গ্রহণ করে:

2019, 3, শনিবার, 2
2019, 12, রবিবার, 1
2019, 9 শনিবার, 1

আউটপুট:

মার্চ 9
ডিসেম্বর 1
সেপ্টেম্বর 7

এটি , তাই সংক্ষিপ্ত উত্তর জেতে।


1
আমি ভেবেছিলাম আমি জিএনইউ ব্যবহার করতে সক্ষম হতে পারি dateতবে মজারভাবে পার্সারের এখানে একটি আকর্ষণীয় ব্যাখ্যা রয়েছে।
ডুরকনব

মে সপ্তাহের সংখ্যা 0-সূচী করা হতে পারে?
জো কিং

অবশ্যই, যদি এটি আপনার প্রোগ্রামের সাথে উপযুক্ত হয়
অজ্ঞতার

প্রস্তাবিত পরীক্ষার কেস: 2018, 12, রবিবার 1
অ্যাডাম

প্রস্তাবিত পরীক্ষার কেস: সেপ্টেম্বর 2019 এর প্রথম শনিবার
শেগি

উত্তর:


4

মিডিয়াউইকি টেম্পলেট, 19 বাইট

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

এটি এই পিএইচপি উত্তরের একটি মিডিয়াউইকি টেম্পলেট পার্সারফিউশনগুলি বন্দর

দ্রষ্টব্য: #timeপিএইচপি strtotimeঅভ্যন্তরীণভাবে ব্যবহার করুন ।


নমুনা ইনপুট

time {# সময়: আর | মার্চ 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 বাইটস @ এম্বোডিমেন্টঅফ অজ্ঞতার জন্য ধন্যবাদ!

কম গল্ফড কোড ...

// 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

ফেরতের মান অনুরোধের তারিখের মাসের জন্য একটি পূর্ণসংখ্যা ger


আপনি যদি কেবলমাত্র সেই মাসের দিনটি ফেরত দেন যা অনুমোদিত, আপনি এটিকে 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- 0সূচকযুক্ত , 1 = রবিবার), 2 অঙ্ক- প্যাডড

আউটপুট মাসের দিন, 0 সূচকযুক্ত।
মার্চ 2019 এর 2 য় শনিবার হবে 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 মাসের 7th তম দিন থাকবে)

মুখের ভাব (5-W+D*2)MOD 7 মাসের 0-সূচকযুক্ত দিন হিসাবে ইনপুট সাপ্তাহিক দিনের 1 তম ঘটনাটি পেতে ব্যবহৃত হয়। (আমি এটিকে বেশিরভাগ পরীক্ষার এবং ত্রুটির মধ্য দিয়ে খুঁজে পেয়েছি)

এর পরে, প্রোগ্রামটি কেবল যুক্ত করে 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-
সূচকযুক্ত হওয়া দরকার

@ 12Me21 প্রশ্নটি বলছে যে ইনপুটটি নমনীয়, তবে আমি জিজ্ঞাসা করেছি যে আমরা সপ্তাহের সংখ্যাটিকে 0 সূচকযুক্ত হিসাবে বিবেচনা করি
জো কিং

এটি অন্যান্য মাস ধরে কাজ করবে বলে মনে হচ্ছে না। আমি মনে করি আপনার যা দরকার $^c+4-$!.daycount
nwellnhof

@ ননহ্নহফ, আহ, আমার বিচার ও ত্রুটির পরিবর্তে এটির কথা ভাবা উচিত ছিল, হ্যাঁ। এখনই স্থির করা উচিত
জো কিং

1

এমএটিএল , 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)
  • বর্তমান লোকালে সপ্তাহের দিন স্ট্রিং (টিআইওর মূল নামের সাথে ইংরেজী নাম প্রয়োজন)
  • সাধারণ সংখ্যা (1-সূচকযুক্ত)

0

পিএইচপি , 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"তারিখ 2-তারিখ 1 সময়> পদ্ধতি iirc)
ASCII- শুধুমাত্র

@ এএসসিআইআই-কেবল>> 25-Dec-2019 - 1-1-2019 == 358
গ্যালেন ইভানোভ

0

এপিএল (ডায়ালগ ইউনিকোড) , 36 বাইট এসবিসিএস

পুরো প্রোগ্রাম। [year,month](জানুয়ারী 1) এর জন্য প্রম্পট দেয় , তারপরে দিনের জন্য (রবিবার 0 হয়), তারপরে এন (প্রথম 1)।

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

এটি অনলাইন চেষ্টা করুন!

⎕CY'dfns'dfns এ সিপি ওয়াই গ্রন্থাগারে

 এর ফলাফলটি এর পক্ষে বাতিল করুন ...

[year,month]সংখ্যার  জন্য প্রম্পট কনসোল

days[সি]  দিন [এন] এই মাসের0 তম 1899-12-31 সাল থেকে

(⍳31)+i ntegers 1… 31 এ  যোগ করুন

d← সংরক্ষণ d(জন্য Ay নম্বর)

7| rema দ্বারা ভাগ করার সময় বিভাগের বাকী অংশ (রবিবারের সাথে সপ্তাহের দিনটি 0 শুভ যুগের কারণে খুব ভাল)

⎕= দিনের সপ্তাহের সংখ্যার জন্য প্রম্পট কনসোল এবং মাস্ক যেখানে সপ্তাহের দিনের সংখ্যার সমান হয় get

d/⍨dযে মুখোশ দিয়ে  ফিল্টার

⎕⊃ n এর জন্য প্রম্পট কনসোল এবং দিনের সংখ্যাগুলির তালিকা থেকে চয়ন করতে এটি ব্যবহার করুন

date[সি]  ডেটটাইম স্ট্যাম্প [এন] (ঘন্টা, মিনিট, সেকেন্ড, মিলিসেকেন্ডের জন্য পিছনে জিরো রয়েছে)


কোডের জন্য [সি] এবং নোটগুলির জন্য [এন] ক্লিক করুন ।


0

জাভাস্ক্রিপ্ট (ES6), 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 বাইট সংরক্ষিত।


রবিবার-শনিবার বা সোমবার-রবিবার ফরম্যাটে সপ্তাহের দিনটি কি?
অজ্ঞতার

অ্যাম্বোডিমেন্টফ অজ্ঞতা দুঃখিত, আমি জানতাম আমি কিছু ভুলে গেছি। (স্নিপেটটি এখন এটি আরও সহজ করার জন্য নির্বাচন ব্যবহার করে))
নীল

অ্যাম্বোডিমেন্টফ অজানা, রবিবার জেএসে আছে 0
শেগি

উহু. আমি এটি জানতাম না, আমি জাভাস্ক্রিপ্টের সাথে তেমন পরিচিত নই।
অজ্ঞতার


0

টিএসকিউএল, 106 বাইট

DECLARE @ datetime='2019',@m int=3,@w char(2)='saturday',@p int=2

SELECT dateadd(wk,datediff(d,x,dateadd(m,@m-1,@)-1)/7,x)+@p*7FROM(SELECT
charindex(@w,' tuwethfrsasu')/2x)x

আউটপুট:

2019-03-09 00:00:00.000

চেষ্টা কর


0

কোটলিন , 131 84 বাইট

47 বাইটস কেবলমাত্র এসসিআইআই-এর কোড এবং মন্তব্যে ধন্যবাদ।

ইনপুট: বছর, মাসের সংখ্যা, সপ্তাহের দিন সংখ্যা, সাপ্তাহিক সংখ্যা

একক লাইনে সমস্ত পূর্ণসংখ্যা 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-


1
আর আমদানি কমান্ডের দরকার নেই যাতে সমস্যা হয় না: P
ASCII-
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.