এই তারিখের ফর্ম্যাটটি কী?


11

গ্রেগরিয়ান ক্যালেন্ডারগুলির জন্য, তারিখের ফর্ম্যাটটি একটি দেশ থেকে অন্য দেশে পরিবর্তিত হয়। তিনটি প্রধান ফর্ম্যাট স্বীকৃত:

  1. YY-MM-DD (বড় endian)
  2. DD-MM-YY (সামান্য endian)
  3. MM-DD-YY (মধ্যম endian)

আপনার টাস্কটি এমন একটি প্রোগ্রাম লিখতে হয় যা একটি ইনপুট স্ট্রিংয়ের সাথে একটি তারিখ উপস্থাপন করে, সম্ভাব্য সমস্ত তারিখের ফর্ম্যাটগুলি আউটপুট দেয় যার মাধ্যমে এই স্ট্রিংটিকে তারিখ হিসাবে ব্যাখ্যা করা যায়।

বিধি

  • ইনপুট তারিখটি ফর্ম্যাটে রয়েছে xx-xx-xxযেখানে প্রতিটি ক্ষেত্র দুটি অঙ্ক এবং শূন্য প্যাডযুক্ত।
  • তারিখটি সর্বদা বৈধ থাকে (যাতে আপনি 14-13-17ের মতো জিনিসগুলি পেতে পারেন না)
  • তারিখটি সর্বদা উপরের ফর্ম্যাটগুলির মধ্যে কমপক্ষে একটি হয় (যাতে আপনি 17-14-11ের মতো জিনিসগুলি পেতে পারেন না)
  • যেহেতু আমরা আসলে একটি সমান্তরাল বিশ্বে আছি, বছরের প্রতিমাসে ৩১ দিন রয়েছে এবং ফলস্বরূপ কোনও লিপ বছর নেই
  • তারিখটি জানুয়ারী, 2001, 2001 থেকে 31 ডিসেম্বর, 2099 এর মধ্যে
  • যদি তারিখটির জন্য কেবল একটি ফর্ম্যাট থাকে তবে কোডটি কেবল এটি মুদ্রণ করতে হবে (কেবলমাত্র নতুন লাইনের পিছনে প্রবেশের অনুমতি রয়েছে)
  • যদি তারিখটির জন্য বেশ কয়েকটি ফর্ম্যাট থাকে তবে সেগুলি অবশ্যই কমা, একটি স্থান, একটি নতুন লাইন বা সেগুলির সংমিশ্রণ দ্বারা পৃথক করা উচিত
  • আপনাকে অবশ্যই ফর্ম্যাট (গুলি) এর সঠিক নাম (গুলি) আউটপুট করতে হবে। স্বতন্ত্র সালিসী মান ব্যবহারের অনুমতি নেই allowed
  • পেছনের স্থান ব্যতীত অন্য কোনও নেতৃস্থানীয় বা অনুসরণীয় অক্ষর অনুমোদিত নয়
  • আউটপুট অবশ্যই ছোট হাতের হতে হবে
  • আপনাকে কোনও বিল্ট-ইন তারিখ বা ক্যালেন্ডার ফাংশন ব্যবহার করার অনুমতি নেই
  • আউটপুট ফর্ম্যাটগুলি বাছাই করতে হবে না

উদাহরণ

Input      Output
30-05-17   big-endian, little-endian
05-15-11   middle-endian
99-01-02   big-endian
12-11-31   big-endian, little-endian, middle-endian
02-31-33   middle-endian

এটি তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। ব্যাখ্যা উত্সাহিত হয়।


3
উত্তরগুলি সমর্থন করে এমন অদ্ভুত ক্ষেত্রে সমর্থন নিশ্চিত করতে আপনার সম্ভবত 31 শে ফেব্রুয়ারী একটি পরীক্ষা-কেস যুক্ত করা উচিত: পি
ETH প্রোডাকশনগুলি 30:37

আমরা তিনটি বৈধ বিন্যাসের জন্য কোনও তিনটি স্বতন্ত্র মান আউটপুট করতে পারি, বা এটি অবশ্যই তিনটি সঠিক স্ট্রিং হওয়া উচিত?
ETH প্রোডাকশনগুলি

3
there are 31 days for every month of the year, and consequently no leap yearsসুতরাং এর অর্থ কোনও তারিখের গ্রন্থাগারটি তখন এর জন্য কার্যকরভাবে অকেজো?
TheLethalCoder

1
@ দ্য লেথলকোডার হ্যাঁ, বেশিরভাগ তারিখের গ্রন্থাগারগুলি সম্ভবত ব্যবহারের অযোগ্য।
জিম

1
সেখানে আরও অনেক ফর্ম্যাট রয়েছে।
উগোরেন

উত্তর:


3

05 এ বি 1 ই , 40 বাইট

'-¡©2£13‹`®Á2£32‹*)˜“Œ±„¥„ê“#Ï’-„–ian’«»

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

ব্যাখ্যা

'-¡©                                      # split on "-" and store a copy in register
    2£13‹                                 # compare the first 2 elements to 13
         `                                # split as separate to stack
                                          # the bottom element is true if it is middle endian
                                          # the top value is true if it can be big/little
          ®Á                              # retrieve the list from register and rotate right
            2£32‹                         # compare the first 2 elements to 32
                 *                        # multiply with the result of the comparison to 13
                  )˜                      # wrap in a flattened list
                    “Œ±„¥„ê“#             # push the list ['middle', 'big', 'little']
                             Ï            # index into this with the flattened list
                                          # this leaves the types the date could be
                              ’-„–ian’«   # append "-endian" to each
                                       »  # join on newlines

4

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

a,b,c=map(int,input().split('-'))
for a,b,c in[[b,c,'big'],[b,a,'little'],[a,b,'middle']]:print(c+'-endian')*(a<13)*(b<32),

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


পাইথন 2 , কম ইনপুট পার্সিং, 123 বাইট

d=input()
for a,b,c in[[3,6,'big'],[3,0,'little'],[0,3,'middle']]:print(c+'-endian')*(int(d[a:a+2])<13)*(int(d[b:b+2])<32),

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


আপনাকে নতুন লাইনের সাথে পৃথক করার মঞ্জুরি দেওয়া হয়েছে, সুতরাং পিছনটিকে সরাতে পারবেন ,
জোনাথন অ্যালান

4

জাভাস্ক্রিপ্ট (ES6), 121 119 118 112 বাইট

একটি পিছনে স্থান সহ একটি স্থান-বিস্মৃত স্ট্রিং ফেরত দেয়।

s=>['big','little','middle'].map((v,i)=>[b<13&c<32,b<13&a<32,a<13][i]?v+'-endian ':'',[a,b,c]=s.split`-`).join``

কিভাবে?

আমরা ইনপুটটি a , b এবং c তে বিভক্ত করি । কারণ তারিখ বৈধ বলে নিশ্চিত করা হয়, আমরা নিশ্চিত জানি যে অতএব 32 কম, এটা টেস্ট করার জন্য যথেষ্ট কিনা তা ব্যবহারকারীকে একটি 13 কম মধ্যম endian বিন্যাস যাচাই হয়। দিনটিকে বৈধ করার জন্য লিটল-এন্ডিয়ান এবং বিগ-এন্ডিয়ান ফর্ম্যাটগুলির জন্য খ এর তুলনায় 13 এর চেয়ে কম হতে হবে এবং এ এবং সি এর জন্য আরও একটি পরীক্ষা করা উচিত ।

সুতরাং 3 পরীক্ষা:

  • বড়-এন্ডিয়ান: বি <13 & সি <32
  • লিটল-এন্ডিয়ান: বি <13 এবং এ <32
  • মধ্য-এডিয়ান: এ <13

পরীক্ষার মামলা


3

বাশ, 240 125 116 112 বাইট

IFS=- read a b c<<<$1
d=-endian
((b<13))&&(((a<32))&&echo little$d;((c<32))&&echo big$d);((a<13))&&echo middle$d

Golfed।

কিছু টিপস জন্য manatwork ধন্যবাদ

মিডল-এন্ডিয়ান ফোলউইং আরনল্ড উত্তরে 32-এর কমের জন্য যাচাইকরণ সরিয়ে 9 বাইট সংরক্ষণ করা হয়েছে

অ্যারের পরিবর্তে বিভিন্ন ভেরিয়েবল ব্যবহার করে 4 বাইট সংরক্ষণ করা হয়েছে

এটা পরীক্ষা করো!



ধন্যবাদ @ মান্যাটওয়ার্ক আমার কাছে যে প্রশ্নটি বুকমার্ক করা খুব দরকারী, এটি এটি গল্ফ করবে
ড্রংলভির্গস

1

সি #, 180 বাইট

t=(n,m)=>int.Parse(n)<13&int.Parse(m)<32;s=>{var a=s.Split('-');return$"{(t(a[1],a[2])?"big-endian":"")} {(t(a[1],a[0])?"little-endian":"")} {(t(a[0],a[1])?"middle-endian":"")}";};

কেবল স্থান পৃথক মান সহ আউটপুটগুলিতে নেতৃস্থানীয় এবং পিছনের স্থানও থাকতে পারে। প্রয়োজনে ওপি যখন সেই বিষয়টিতে স্পষ্ট করে দিয়েছে তখন আপডেট হবে।

সম্পূর্ণ / ফর্ম্যাট সংস্করণ:

Func<string, string, bool> t = (n, m) => int.Parse(n) < 13 & int.Parse(m) < 32;

Func<string, string> f = s =>
{
    var a = s.Split('-');

    return $"{(t(a[1], a[2]) ? "big-endian" : "")} {(t(a[1], a[0]) ? "little-endian" : "")} {(t(a[0], a[1]) ? "middle-endian" : "")}";
};

আমি নিয়মটি আরও পরিষ্কার করে দিয়েছি:No leading or trailing characters others than a trailing space are allowed
জিম


1

ব্যাচ, 138 বাইট

@echo off
set/ps=
call:l little %s:-= %
exit/b
:l
call:e big %4 %3
call:e middle %3 %2
:e
if %2 leq 31 if %3 leq 12 echo %1-endian

@ Ovs এর উত্তরের উপর ভিত্তি করে


1

জাভা 232 বাইট

(String s)=>{String[]i=s.split("-");String e="-endian",b="big"+e,m="middle"+e,l="little"+e;int p=Integer.valueOf(i[0]);System.out.print(p<13?Integer.valueOf(i[1])<13?Integer.valueOf(i[2])<32?b+","+m+","+l:m+","+l:m:p<32?b+","+l:b);}

এখানে একটি সুন্দর সংস্করণ

String[] i = s.split("-");

String e = "-endian",
       b = "big" + e,
       m = "middle" + e,
       l = "little" + e;

int p = Integer.valueOf(i[0]);

এই অংশটি কীভাবে বিন্যাস করতে হবে তা আমি সত্যিই জানতাম না ...

System.out.print(
        p < 13 ? Integer.valueOf(I[1]) < 13 ? Integer.valueOf(I[2]) < 32 ? b + "," + m + "," + l
                                                                         : m + "," + l
                                            : m 

               : p < 32 ? b + "," + l 
                        : b
);

1
অনেকগুলি endians: String e="-endian",b="big"+e,m="middle"+e,l="little"+e;
manatwork

ভাল কথা, যখন আমি এটি না করার সিদ্ধান্ত নিয়েছিলাম তখন আমি আমার বাইট গণনায় একটি অতিরিক্ত "স্ট্রিং" অন্তর্ভুক্ত করছি। @
মানাত

1

পিএইচপি, 131 বাইট

[$a,$b,$c]=explode('-',$argn);foreach([[big,b,c],[little,b,a],[middle,a,b]]as[$t,$x,$y])echo$$x*$$y&&$$x<13&$$y<32?"$t-endian ":"";
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.