यह दिनांक प्रारूप क्या है?


11

ग्रेगोरियन कैलेंडर के लिए, तिथि प्रारूप एक देश से दूसरे में भिन्न होता है। मान्यता प्राप्त तीन मुख्य प्रारूप हैं:

  1. YY-MM-DD (बड़े एंडियन)
  2. DD-MM-YY (छोटा एंडियन)
  3. MM-DD-YY (मध्यम endian)

आपका कार्य एक प्रोग्राम लिखना है, जो एक तारीख का प्रतिनिधित्व करते हुए एक इनपुट स्ट्रिंग देता है, सभी संभावित दिनांक स्वरूपों को आउटपुट करता है जिसके द्वारा इस स्ट्रिंग को एक तारीख के रूप में व्याख्या किया जा सकता है।

नियम

  • इनपुट तिथि प्रारूप में है xx-xx-xx, जहां प्रत्येक क्षेत्र दो अंकों और शून्य-गद्देदार है।
  • तिथि हमेशा मान्य होती है (इसलिए आपको 14-13-17 जैसी चीजें नहीं मिल सकती हैं)
  • दिनांक हमेशा कम से कम एक प्रारूप के ऊपर होता है (ताकि आप 17-14-11 जैसी चीजें प्राप्त न कर सकें)
  • क्योंकि हम वास्तव में एक समानांतर दुनिया में हैं, वर्ष के हर महीने के लिए 31 दिन हैं , और परिणामस्वरूप कोई लीप वर्ष नहीं है
  • दिनांक 01 जनवरी, 2001 से 31 दिसंबर, 2099 के बीच का है
  • यदि तारीख के लिए केवल एक प्रारूप है, तो कोड केवल इसे प्रिंट करना होगा (केवल अनुगामी newlines की अनुमति है)
  • यदि दिनांक के लिए कई प्रारूप हैं, तो उन्हें या तो अल्पविराम से अलग होना चाहिए, एक स्थान, एक नई रेखा, या उन लोगों का संयोजन
  • आपको प्रारूप के सटीक नाम (नों) का उत्पादन करना होगा। अलग-अलग मनमाना मूल्यों का उपयोग करने की अनुमति नहीं है।
  • एक अनुगामी स्थान की तुलना में अन्य प्रमुख या अनुगामी चरित्रों की अनुमति नहीं है
  • आउटपुट लोअरकेस होना चाहिए
  • आपको किसी भी अंतर्निहित तिथि या कैलेंडर फ़ंक्शन का उपयोग करने की अनुमति नहीं है
  • आउटपुट स्वरूप को सॉर्ट करने की आवश्यकता नहीं है

उदाहरण

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 फरवरी का उपयोग करके एक परीक्षण-मामला जोड़ना चाहिए ताकि यह सुनिश्चित कर सकें कि उत्तर अजीब स्थिति का समर्थन करते हैं: P
ETHproductions

क्या हम तीन मान्य प्रारूपों के लिए कोई तीन अलग-अलग मानों का उत्पादन कर सकते हैं, या यह तीन सटीक तार होने चाहिए?
ETHproductions

3
there are 31 days for every month of the year, and consequently no leap yearsतो इसका मतलब यह है कि किसी भी तारीख पुस्तकालय इसके लिए प्रभावी रूप से बेकार है?
TheLethalCoder

1
@ TheLethalCoder हाँ, अधिकांश तिथि पुस्तकालय संभवतः अनुपयोगी हैं।
जिम

जवाबों:


3

05AB1E , 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

जावास्क्रिप्ट (ईएस 6), 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``

कैसे?

हमने इनपुट को , बी और सी में विभाजित किया है । क्योंकि तिथि मान्य होने की गारंटी है, हम निश्चित रूप से पता है कि इसलिए 32. कम से कम, यह परीक्षण करने के लिए पर्याप्त है कि क्या है एक 13 से कम मध्यम endian प्रारूप मान्य करने के लिए है। लिटिल-एंडियन और बिग-एंडियन फॉर्मेट में बी को 13 से कम और दिन को मान्य करने के लिए क्रमशः और सी पर एक और परीक्षण की आवश्यकता होती है।

इसलिए 3 परीक्षण:

  • बिग-एंडियन: बी <13 और सी <32
  • लिटिल-एंडियन: b <13 & a <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।

कुछ टिप्स के लिए मैनटवर्क का धन्यवाद

सहेजे गए 9 बाइट्स ने मध्य-अंत वाले फॉलविंग अरनुलड उत्तर में 32 से कम के लिए सत्यापन को हटा दिया

सरणी के बजाय विभिन्न चर का उपयोग करके 4 बाइट्स सहेजे गए

झसे आज़माओ!


वहाँ के एक जोड़े हैं अंकगणित संबंधित सुझावों में बैश में गोल्फ के लिए सुझाव । आप इसे थोड़ा कम कर सकते हैं: इसे ऑनलाइन आज़माएं!
मैनटवर्क

धन्यवाद @manatwork मेरे पास यह प्रश्न है कि बुकमार्क बहुत उपयोगी है, क्या इसके द्वारा इसे गोल्फ जाएगा
DrnglVrgs

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

अस्पष्ट रूप से @ अंडा के उत्तर पर आधारित है।


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
बहुत सारे एंडियन String e="-endian",b="big"+e,m="middle"+e,l="little"+e;:।
मैनेटवर्क

अच्छी बात है, जब मैंने यह नहीं करने का फैसला किया कि मैं अपनी बाइट की गिनती में एक अतिरिक्त "स्ट्रिंग" शामिल था। @manatwork
1717 को शाम

1

PHP, 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 ":"";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.