सप्ताह के संकुचित दिन


18

सप्ताह के दिनों की सूची के इनपुट को देखते हुए, सूची के सबसे छोटे क्रमबद्ध प्रतिनिधित्व को आउटपुट करता है।

इनपुट के प्रारूप में एक या दो-चरित्र सबस्ट्रिंग अधिक से मिलकर एक स्ट्रिंग है Su(रविवार), Mo(सोमवार), Tu(आदि), We, Th, Fr, और Sa। आवश्यक रूप से क्रमबद्ध क्रम में इनपुट नहीं दिया जा सकता है।

इनपुट को आउटपुट फॉर्मेट में बदलने के लिए,

  • सप्ताह के दिन तक इनपुट को क्रमबद्ध करें, रविवार से शुरू करें (उदा। ThMoSaSuFrTuWe-> SuMoTuWeThFrSa)।

  • यदि यह अस्पष्टता नहीं छोड़ता है, तो संक्षिप्तीकरण को एक अक्षर तक कम करें । उदाहरण के लिए, SuMoTuWeबनना चाहिए SMTWक्योंकि पहला S शनिवार का नहीं हो सकता है, क्योंकि यह आउटपुट को अनसोल्ड (T के लिए समान) बना देगा। हालांकि, ThFrSaबन जाना चाहिए ThFS, क्योंकि मंगलवार और गुरुवार दोनों शुक्रवार से पहले आते हैं और इसे कम करने से TFSअस्पष्टता पैदा होगी।

  • यदि आउटपुट अब है MTWTF, Dइसके बजाय आउटपुट (जो "सप्ताह के दिन के लिए खड़ा है ")। इसी तरह, सप्ताह के अंत के लिए SSबन जाना चाहिए । अंत में, सभी दिनों के लिए बन जाना चाहिए ।ESMTWTFSA

इनपुट और आउटपुट दोनों एक ही स्ट्रिंग होना चाहिए।

चूंकि यह , बाइट्स में सबसे छोटा कोड जीतता है।

परीक्षण के मामलों:

In              Out    | In              Out
-----------------------|--------------------
SuTu            STu    | SuTuWe          STW
SuTuSa          STuS   | SuWeTh          SWT
TuThSa          TTS    | TuThSu          STT
Su              Su     | Sa              Sa
WeTh            WT     | FrTh            ThF
WeTu            TW     | FrTu            TuF
FrWeMo          MWF    | SaWeSu          SWS
ThTu            TT     | We              W
ThTuMoFrWe      D      | SaSu            E
SuMoWeTuThFr    SMTWTF | ThMoSaSuFrTuWe  A

बस इसे पढ़ने से मुझे ऐसा लग रहा है कि यह एमएमएमएम
लूई

6
मैं सिर्फ सोचता हूं: डब्ल्यूटीएफ, और यह सप्ताहांत है!
agtoever

STFU! ओह, यह काम नहीं करता है ...: D
त्रुटी

जवाबों:


6

रेटिना , 152 88

@ मार्टिन और @ रैंडम की मदद से बड़े पैमाने पर गोल्फ! आप दोनों को शुक्रिया!

^
SuMoTuWeThFrSa
([A-Z].)(?!.*\1)

T`l``Su\B|\BSa|o|r|u?We.?.?|uTh
^MTWTF$
D
SS
E
.{7}
A

इसे ऑनलाइन आज़माएं। लाइनों की एक जोड़ी m`इस ऑनलाइन दुभाषिया लिंक के साथ शुरू होती है । यह इसलिए प्रोग्राम कई इनपुट लाइनों (एक शॉट में सभी परीक्षण चलाने के लिए) के साथ काम करता है। हालांकि, कई इनपुट लाइनें एक आवश्यकता नहीं हैं, इसलिए ये ऊपर या मेरे स्कोर में शामिल नहीं हैं।


1
डांग, मैं तब उत्तेजित हो गया था जब मैंने आखिरकार आपके 152 के नीचे मेरा कत्ल कर दिया था। अब इस XD को नहीं हरा सकते बहुत अच्छे लोग =)
Mwr247

T`l``Su\B|\BSa|.*e.*|uTh|o|r3 और बाइट्स बचाता है।
यादृच्छिक

5

जावास्क्रिप्ट (ईएस 7), 187 178 168 157 143 बाइट्स

x=>({SMTWTFS:'A',SS:'E',MTWTF:'D'}[x=[for(a of'Su M Tu W Th F Sa'.split` `)if(x.match(a))x.match({S:/.../,T:/W|T.*T/}[b=a[0]])?b:a].join``]||x)

रेगेक्स परीक्षणों ने विशेष दिन के नियमों के त्वरित कार्य को बनाने में मदद की, और आदर्श से कम होने पर, ऑब्जेक्ट मैप यह काम करता है। मुझे यकीन है कि मैं इसके अलावा कुछ और निचोड़ सकता हूं।


2

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

def w(n,a=lambda b,c,d:b.replace(c[0],d).replace(c[1],d)):d=''.join([[o[0],o][o[0]in'ST']for o in['Su','Mo','Tu','We','Th','Fr','Sa']if o in[n[i:i+2]for i in range(0,len(n),2)]]);d=[d,a(d,['Tu','Th'],'T')][('W'in d)+('TuT'in d)];l=len(d);d=[d,a(d,['Su','Sa'],'S')][l>2];return[[[d,'A'][l>8],'E'][d=='SS'],'D'][d=='MTWTF']

आइडोन पर टेस्ट


आपने इसे (वास्तव में लंबा) एक लाइनर बना दिया!
तन्माथ

'Su Mo Tu We Th Fr Sa'.split()से छोटा है['Su','Mo','Tu','We','Th','Fr','Sa']
शर्लक

2

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

s=>eval(`n=0;d="SuMoTuWeThFrSa";s.match(/../g).map(t=>n|=1<<d.search(t)/2);o="";for(i=0;i<7;i++)n&1<<i?o+=d.substr(i*2,n<2|n==64|(!(n&8|(n&20)>19)&&i==2|i==4)?2:1):0;n-127?n-62?n-65?o:"E":"D":"A"`)

व्याख्या

प्रत्येक दिन को बिट के रूप में एनकोड करता है और इनपुट को एक संख्या के रूप में संग्रहीत करता है n। बिट ० = रविवार ... बिट ६ = शनिवार। यह बिट-वार संचालन के कारण अस्पष्टता नियम जाँच कोड को बहुत छोटा बनाता है और संपूर्ण संयोजन की तुलना एक संख्या से करने में सक्षम होता है जो हमेशा 128 से कम होती है।

s=>
  eval(`                   // eval enables the for loop without {} or return
    n=0;                   // n = input encoded as a number
    d="SuMoTuWeThFrSa";    // d = day strings
    s.match(/../g).map(t=> // for each day string t in the input
      n|=1<<d.search(t)/2  // set the bit in n that corresponds to the day
    );
    o="";                  // o = output string
    for(i=0;i<7;i++)       // for each day i from Sunday to Monday
      n&1<<i?              // if the day was in the input
        o+=d.substr(i*2,   // add the day string to the output
          n<2              // Sunday by itself is ambiguous
          |n==64           // Saturday by itself is ambiguous
          |(!(n&8          // Without Wednesday...
            |(n&20)>19     // ...or both Tuesday and Thursday,
            )&&i==2|i==4)  // ...Tuesday or Thursday are ambiguous
          ?2:1             // 2 characters if ambiguous, else 1
        )
      :0;
    n-127?                 // n == 127 = All days (A)
      n-62?                // n == 62 = All week days (D)
        n-65?              // n == 65 = All weekend days (E)
          o                // else output the constructed string
        :"E"
      :"D"
    :"A"
  `)

परीक्षा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.