আজ কেন্দ্র


36

যে কোনও সুবিধাজনক বিন্যাসে ইনপুট হিসাবে একটি তারিখ দেওয়া হয়েছে, পাঁচ সপ্তাহের উইন্ডোটির সঠিক কেন্দ্র হিসাবে সেই তারিখের সাথে একটি ক্যালেন্ডার আউটপুট করুন। ক্যালেন্ডারের শিরোনামে অবশ্যই সপ্তাহের দিনগুলিতে (অর্থাত্ Su Mo Tu We Th Fr Sa) দ্বি-বর্ণ সংক্ষিপ্তসার অন্তর্ভুক্ত করতে হবে । দিনের তিন-চিঠি বা অন্যান্য সংক্ষিপ্তসার অনুমোদিত নয়।

উদাহরণস্বরূপ, April 2 2019ইনপুট হিসাবে দেওয়া , আউটপুট হওয়া উচিত

Sa Su Mo Tu We Th Fr
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31  1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19

যাতে প্রদত্ত তারিখটি ক্যালেন্ডারের ঠিক মাঝখানে।

দেওয়া February 19 2020, আউটপুট

Su Mo Tu We Th Fr Sa
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
 1  2  3  4  5  6  7

জন্য September 14 1752, নিম্নলিখিতটি দেখান:

Mo Tu We Th Fr Sa Su
28 29 30 31  1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  1

  • ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক পদ্ধতি দ্বারা দেওয়া যেতে পারে ।
  • ইনপুটটি গ্যারান্টিযুক্ত খালি এবং বৈধ (যেমন, আপনি কখনই পাবেন না ""বা Feb 31ইত্যাদি)।
  • সমস্ত তারিখের জন্য গ্রেগরিয়ান ক্যালেন্ডার ধরে নিন।
  • লিপ বছর অবশ্যই জবাবদিহি করতে হবে।
  • ইনপুট তারিখগুলি থেকে শুরু Jan 1 1600করে Dec 31 2500
  • আপনি এটি STDOUT এ মুদ্রণ করতে পারেন বা কোনও ফাংশন ফলাফল হিসাবে এটি ফিরিয়ে দিতে পারেন।
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য।
  • অক্ষরের যথাযথভাবে সীমাবদ্ধ থাকাকালীন যে কোনও পরিমাণ বহিরাগত শ্বেত স্পেস গ্রহণযোগ্য।
  • একক-অঙ্কের দিনগুলিতে শীর্ষস্থানীয় শূন্যগুলি অনুমোদিত, যেমন একক-অঙ্কের দিনগুলি বাম-প্রান্তিককরণের পরিবর্তে প্রান্তিককরণ করছে।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

উত্তর:


12

আর , 77 72 বাইট

function(d,`~`=format)write(c(strtrim(d+-3:3~"%a",2),d+-17:17~"%e"),1,7)

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

2 অক্ষরের দিনের সংক্ষেপণ ব্যবহারের জন্য স্থির আউটপুট।

-1 বাইট অ্যারন হেইম্যানকেstrtrim ধন্যবাদ ব্যবহার করে ।

শীর্ষস্থানীয় 0 সেগুলির সাথে প্যাডের তারিখ সংখ্যা; একটি হিসাবে ইনপুট নেয় Date, যা ব্যবহার করে তৈরি করা যেতে পারে as.Date("YYYY/MM/DD")

একটি আর উত্তরের জন্য অদ্ভুতভাবে সংক্ষিপ্ত ...


8

05 এ বি 1 ই , 175 174 172 171 160 বাইট

¦WΘ1š-1šVтFY`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝVY})DJIJk18+£35.£¬.•4ιõ÷‡o‹ƶ¸•2ôs`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()DćsćsO7%._s€нT‰J«7ô»

ফর্ম্যাট ইনপুট [day, month, year]0একক-অঙ্কের দিনগুলির জন্য শীর্ষস্থানীয় এসগুলির সাথে আউটপুট এবং ছোট হাতের moমাধ্যমে su(+1 বাইট যোগ করা যায় যদি টাইটেলিকেস বাধ্যতামূলক হয়)।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

পবিত্র ছিঃ .. এটি আমার পক্ষে সবচেয়ে দীর্ঘতম 05 এফ 1 ই উত্তরের রেকর্ড হতে পারে এবং তারপরে আমি কিছু জটিল জটিল চ্যালেঞ্জগুলি আমি অন্তর্ভুক্ত করেছি ...>।> সম্পাদনা: হুম ঠিক আছে, প্রায় ..; পি

গুরুত্বপূর্ণ দ্রষ্টব্য: 05AB1E তারিখের বিষয়গুলি বা গণনার জন্য কোনও বিল্টিন নেই। এটির তারিখ সম্পর্কিত একমাত্র বিল্টিন হ'ল আজকের বছর / মাস / দিন / ঘন্টা / মিনিট / সেকেন্ড / মাইক্রোসেকেন্ড।

সুতরাং সেই কারণে, আপনি যে কোডগুলি দেখতে পান তার প্রায় সবগুলি হ'ল আগের এবং পরের দিনগুলি গণনা করার জন্য ম্যানুয়াল গণনা (বহু বছরের পরিক্রমণ এবং লিপ বছরগুলি মাথায় রেখে) এবং জেলের মিলন ব্যবহার করে সপ্তাহের দিন গণনা করা ।

কোডটির বিশাল অংশগুলি আমার এই পূর্বের 05AB1E উত্তর থেকে অনুলিপি করা হয়েছে , যা নীচের ব্যাখ্যার জন্যও প্রাসঙ্গিক হবে।

ব্যাখ্যা:

আমরা আগের মাসের প্রথম দিনটিতে গিয়ে শুরু করি:

¦          # Remove the first item (the days) from the (implicit) input
 W         # Get the minimum (without popping the list itself)
           # (since the year is guaranteed to be above 1599, this is the month)
  Θ        # Check if its exactly 1 (1 if 1, 0 if in the range [2,31])
   1š      # Prepend a 1 as list (so we now have either [1,1] or [1,0]
     -     # Subtract this from the month and year
      1š   # And prepend a 1 for the day
        V  # Pop and store this first day of the previous month in variable `Y`

তারপরে আমি সেই তারিখটি শুরুর তারিখ হিসাবে ব্যবহার করি এবং পরবর্তী 100 দিন গণনা করি:

тF    # Loop 100 times:
  Y`2ô0Kθ4ÖUD2Qi\28X+ë<731α}‹iY¬>0ëY1¾ǝDÅsD12i>1ë\1Dǝ¤>2}}ǝV
      #  Calculate the next day in line
      #  (see the linked challenge above for a detailed explanation of this)
   Y  #  And leave it on the stack
 })   # After the loop: wrap the entire stack into a list, which contains our 100 days

তারপরে, মধ্যম হিসাবে ইনপুট-তারিখটি সহ, আমি কেবল 17 টি আগে এবং 17 তালিকা থেকে ইনপুট-তারিখ ছাড়ি:

DJ          # Duplicate the 100 dates, and join the day/month/year together to strings
  IJ        # Push the input, also joined together
    k       # Get the 0-based index of the input in this list
            # (the joins are necessary, because indexing doesn't work for 2D lists)
     18+    # Add 18 to this index (18 instead of 17, because the index is 0-based)
        £   # Only leave the first index+18 items from the 100 dates
     35.£   # Then only leave the last 35 items

এখন আমাদের 35 দিন কেটে গেছে। পরবর্তী পদক্ষেপটি সপ্তাহের দিন গণনা করা এবং আউটপুট-টেবিলের শিরোনাম তৈরি করা হয়:

¬                # Get the first date of the list (without popping the list itself)
 .•4ιõ÷‡o‹ƶ¸•    # Push compressed string "sasumotuwethfr"
             2ô  # Split it into chunks of size 2
s                # Swap to get the first date again
 `UÐ312*+>13*5÷s3Xα©т%D4÷®т÷©4÷®·()DćsćsO7%
                 # Calculate the day of the week (sa=0; su=1; ...; fr=6)
                 # (see the linked challenge above for a detailed explanation of this)
  ._             # Rotate the list of strings that many times

আমার এই 05AB1E টিপটি দেখুন (বিভাগটি কীভাবে স্ট্রিংগুলি সংকুচিত করবেন? ) কেন .•4ιõ÷‡o‹ƶ¸•তা বোঝার জন্য "sasumotuwethfr"

তারপরে আমরা আমাদের আগের তৈরি তারিখের তালিকার উপর ভিত্তি করে টেবিলটি পূরণ করার দিনগুলি তৈরি করি। যা আমরা শিরোনামের সাথে একত্রীকরণ করব। যার পরে আমরা চূড়ান্ত ফলাফল মুদ্রণ করতে পারি:

s           # Swap to get the list of dates again
 €н         # Only leave the first item of each date (the days)
   T       # Take the divmod 10 of each
     J      # Join those divmod results together
            # (we now have leading 0s for single-digit days)
      «     # Merge this list together with the header list
       7ô   # Split it into chunks of size 7
         »  # Join each inner list by spaces, and then each string by newlines
            # (and output the result implicitly)

2
এটি একটি বিশাল পরিমাণে কাজ!
লুইস মেন্ডো

2
হ্যাঁ, জাভা 05AB1E মার! : ডি প্রথমবারের মতো, আমার অনুমান ;-)
অলিভিয়ের গ্রাগোয়ার

@ লুইস মেন্ডো বেশিরভাগ সময় শেষ বার সংযুক্ত চ্যালেঞ্জের সাথে সম্পন্ন হয়েছিল, তবে হ্যাঁ, এটি অনেক কাজ ছিল ..;) বিটিডব্লিউ যোগ করা হয়েছে।
কেভিন ক্রুইজসেন

@ অলিভিয়ারগ্রোওয়ের এখন আমরা একই উপ-গণনা করছি। ;)
কেভিন ক্রুইজসেন

@ অলিভিয়ারগ্রোগোয়ার এবং এখন এটি আবার কম, দুঃখিত। ; পি
কেভিন ক্রুইজসেন

6

জাভাস্ক্রিপ্ট (ES6),  141  126 বাইট

নীলের উত্তর.toUTCString().slice(0,2) থেকে ধার করে 15 বাইট সংরক্ষণ করা হয়েছে

তারিখ অবজেক্ট হিসাবে ইনপুট নেয়।

f=(d,n=0)=>n<42?(D=new Date(d-864e5*(24-n)),n<7?D.toUTCString().slice(0,2):(i=D.getDate())>9?i:' '+i)+`
 `[++n%7&&1]+f(d,n):''

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


হু, আমি শপথ করতে পারি যে আমার কোডটি তৃতীয় পরীক্ষার ক্ষেত্রে ব্যর্থ হয়েছিল যখন আমি মূলত এটি লিখেছিলাম ... ভাল এটি আমার 52 বাইট সংরক্ষণ করে ...
নীল

4

জাভাস্ক্রিপ্ট (নোড.জেএস) , 205 152 145 বাইট

f=
d=>`012345`.replace(g=/./g,r=>`0123456
`.replace(g,c=>`${new Date(d-864e5*(24-c-r*7))[+r?`getUTCDate`:`toUTCString`]()}`.slice(0,2).padStart(3)))
<input type=date oninput=o.textContent=f(this.valueAsDate)><pre id=o>

এটি অনলাইন চেষ্টা করুন! জাভাস্ক্রিপ্ট তারিখ অবজেক্ট বা টাইমস্ট্যাম্প হিসাবে ইনপুট নেয়। সম্পাদনা: @ এম্বোডিমেন্টফআইজানিয়াকে 1 বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে, যা আমাকে পরে আউটপুটে ট্রেলিং নিউলাইন যোগ করে আরও 7 বাইট সংরক্ষণ করতে দেয়। 52 বাইট সংরক্ষণ করা যখন আমি আবিষ্কার করলাম যে আমি এমন আচরণের আশপাশে কাজ করছি যা আসলে প্রথম জায়গায় বাগি ছিল না ...


padStart(2)-> padStart(3), -1 বাইটের জন্য জোড় স্ট্রিংয়ের স্থানটি সরিয়ে ফেলুন
অজ্ঞতার প্রতিমূর্তি



2

ওল্ফ্রাম ভাষা (গণিত) , 123 বাইট

(s=#;Grid@Join[{StringTake[ToString@DayName[s~d~#]&/@Range[-3,3],2]},Partition[Last@d[s,#]&/@Range[-17,17],7]])&
d=DatePlus

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

আমি জানি না কেন Gridটিআইও-তে কাজ করে না তবে এই কোডটি এটিকে আউটপুট করে

এখানে চিত্র বর্ণনা লিখুন

@ ডেভিডসি 1 বাইট সংরক্ষণ করেছেন


GridTIO আপনার ছবির মতো আইটেমগুলি কেন্দ্র করতে পারে না বলেই কাজ করতে পারে না?
অ্যাডমবর্কবার্ক

@ অ্যাডমবার্কবার্ক টিআইওতে গ্রাফিক্স লোড করার একটি উপায় আছে is গত বছর কেউ আমাকে দেখিয়েছিল বলে আমি মনে করি। তবে আমি কীভাবে এটি করব তা মনে করতে পারছি না ... সুতরাং যদি কেউ জানে তবে আমাদের জানান!
J42161217

2

এমএটিএল , 34 33 31 বাইট

YO-17:17+t7:)8XOO3Z(!1ew7XOU7e!

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

ব্যাখ্যা

YO       % Implicit input. Convert to date number. This is a single number
         % that specifies the date
-17:17   % Push [-17 -16 ... 16 17]
+        % Add to date number, element-wise. This gives a row vector of 35
         % date numbers centered around the input date
t        % Duplicate
7:       % Push [1 2 ... 7]
)        % Index into the 35-element vector. This keeps the first 7 entries
8XO      % Convert to day-of-week in 3 letters. Gives a 3-col char matrix
O3Z(     % Write char 0 (equivalent to space for display purposes) into the
         % 3rd column
!1e      % Tranpose and linearize into a row. This produces a string such as
         % 'Tu We Th Fr Sa Su Mo ', to be used as column headings
w        % Swap. This brings to top the row vector of 35 date numbers
         % computed from the input
7XO      % Convert to day-of-month. Gives a 2-col char matrix
U        % Convert each row to number
7e!      % Reshape into 7-row matrix and transpose
         % Implicit display. This prints the string with the headings and
         % the matrix. The latter has a minimum-one-space separation between
         % columns, so it is aligned with the headings

2

জাভা (জেডিকে) , 149 বাইট

d->{d.add(5,-24);for(int i=0,w;i<42;d.add(5,1))System.out.printf("%c%2s",i%7<1?10:32,i++<7?"SaSuMoTuWeThFr".substring(w=d.get(7)%7*2,w+2):d.get(5));}

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

ক্রেডিট



1
@ কেভিন ক্রুজসেন অপেক্ষা করুন ... কি? আমি আপনাকে অভিনন্দন জানাচ্ছি! আমি এটি করার চেষ্টা করেছি, তবে এটি করার কোনও উপায় খুঁজে পাইনি এবং তবুও আপনি এটি করেছেন! খুব সুন্দর :-)
অলিভিয়ার গ্রাগোয়ার

1
iএবং আপনি একসাথে আরও কিছু দেখতে পাচ্ছেন j? বা j++%7<1?10:32কিছু বিটওয়াইজ ম্যাজিকের সাথে সংক্ষিপ্ত কিছু? তবে আমি এটি আপনার কাছে রেখে দেব। আমি আবার কাজে ফিরে যাচ্ছি, হ্যাঁ। ;)
কেভিন ক্রুইজসেন

1
আহ, অবশ্যই .. চমৎকার টিম ওয়ার্ক! ;) পিএস: কোথায় wদাঁড়ায়? কেন hহেডার জন্য না ?
কেভিন ক্রুইজসেন

1
@KevinCruijssen w"এর প্রতিদিন W Eek"। এছাড়াও, বিট টুইডলিংয়ের (i%7+6)/7*22+10ফলে কেবল আরও দীর্ঘতর হতে পারে ।
অলিভিয়ার গ্রাগোয়ার 13

2

পিএইচপি ,197 189 187 বাইট

for($d=date_create($argn)->sub($i=new DateInterval(P17D)),$i->d=1;$x++<35;$h.=$x<8?substr($d->format(D),0,2).' ':'',$d->add($i))$o.=str_pad($d->format(j),3,' ',2);echo wordwrap($h.$o,20);

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

ইনপুট STDINএকটি তারিখের স্ট্রিং হিসাবে। সাথে চালাও php -nF

$ echo April 2 2019|php -nF cal.php

Sa Su Mo Tu We Th Fr 
16 17 18 19 20 21 22 
23 24 25 26 27 28 29 
30 31  1  2  3  4  5 
 6  7  8  9 10 11 12 
13 14 15 16 17 18 19 

সমস্ত পরীক্ষার কেস যাচাই করুন

বা শূন্য-প্যাডযুক্ত একক সংখ্যা সহ 174 বাইট


1

এক্সেল ভিবিএ, 190 159 বাইট

ধন্যবাদ @ টেলরস্কট

Function z(i)
Dim d(5,6)
v=DateValue(i)-17
For x=1To 5
For y=0To 6
d(0,y)=Left(WeekdayName(Weekday(v+y)),2)
d(x,y)=day(v+y+(x-1)*7)
Next y,x
z=d()
End Function

এক্সেল ভিবিএ (যেমন 19 ফেব্রুয়ারী, 2020; 2/19/2020; 19-ফেব্রুয়ারী -2018) এর জন্য বৈধ তারিখ স্ট্রিং আকারে ইনপুট নেয় এবং এতে কেন্দ্রিক প্রদত্ত ক্যালেন্ডার সহ একটি অ্যারে প্রদান করে।


এই সমাধানটি থেকে সাদা জায়গাটি সরিয়ে আপনি এই সমাধানটি 159-এ নামাতে পারেন,Function z(i) Dim d(5,6) v=DateValue(i)-17 For x=1To 5 For y=0To 6 d(0,y)=Left(WeekdayName(Weekday(v+y)),2) d(x,y)=Day(v+y+(x-1)*7) Next y,x z=d() End Function
টেলর স্কট

@ টেলরস্কট ধন্যবাদ, কেবল বিল্ট ইন এডিটর ব্যবহার করছিলেন যা সেই স্থানগুলিকে অটোপোপুলেট করে।
উইলিয়াম পোর্টার


0

টি-এসকিউএল, 203 বাইট

DECLARE @f date='2020-02-19'

,@ char(20)=0,@d char(105)=0SELECT
@=left(format(d,'D'),2)+' '+@,@d=right(d,2)+char(32-n%7/6*19)+@d
FROM(SELECT dateadd(d,number-17,@f)d,number n
FROM spt_values WHERE'P'=type)x ORDER BY-n
PRINT @+'
'+@d

অনলাইন সংস্করণটি কিছুটা আলাদা, এই পোস্ট করা সংস্করণটি এমএস-এসকিউএল স্টুডিও ম্যানেজমেন্টে কাজ করে। এটি অনলাইন সংস্করণের সাথে তুলনা করে 1 টি বাইট সাশ্রয় করে, তবে অনলাইনে সঠিক ফলাফল দেয় না

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


0

পাইথন 2 , 115 বাইট

from datetime import*
d=input()
for i in range(42):print(d+timedelta(i-24)).strftime('%'+'da'[i<7])[:2]+i%7/6*'\n',

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

এটি অনুমোদিত কিনা তা নিশ্চিত নয় ... ফর্মটিতে এসটিডিএন থেকে ইনপুট নেয় date(year, month, day)। এটি হিসাবে প্রতিনিধিত্ব করা যেতে পারে __import__('datetime').date(year, month, day)। এগুলি আসলে __import__('datetime').dateঅবজেক্টস।

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