সপ্তাহের সংকুচিত দিনগুলি


18

সপ্তাহের কয়েক দিনের তালিকার একটি ইনপুট দেওয়া হয়, তালিকার সংক্ষিপ্ত অনুসারে বাছাই করা প্রতিনিধিত্ব করে।

ইনপুট বিন্যাস এক বা দুই-অক্ষর, সাবস্ট্রিং আরো গঠিত একটি স্ট্রিং Su(রবিবার), Mo(সোমবার), Tu(ইত্যাদি), We, Th, Fr, এবং Sa। প্রয়োজনীয়ভাবে সাজানো ক্রমে ইনপুট দেওয়া হবে না।

আউটপুট বিন্যাসে ইনপুট রূপান্তর করতে,

  • রবিবার (প্রাক্তন ThMoSaSuFrTuWe-> SuMoTuWeThFrSa) থেকে শুরু করে সপ্তাহের দিনের মধ্যে ইনপুটটি সাজান ।

  • যদি কোনও অস্পষ্টতা না থেকে থাকে তবে একটি অক্ষরে সংক্ষেপগুলি হ্রাস করুন । উদাহরণস্বরূপ, SuMoTuWeহয়ে উঠতে হবে SMTWকারণ প্রথম এসটি শনিবার হতে পারে না, কারণ এটি আউটপুটটিকে অকার্যকর করে তুলবে (টি এর জন্য একই)। তবে, 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
আমি কেবল ভাবি: ডাব্লুটিএফ, এবং এটি সপ্তাহান্তে!
পুরো

STFU! ওহ, এটি কাজ করে না ...: ডি
ফ্লাওয়ার

উত্তর:


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 এর নীচে আমার স্কোশ করলাম তখন আমি উত্তেজিত হয়ে পড়েছিলাম nowএই মুহূর্তে পরাজিত করতে পারছি না খুব ভাল ছেলেরা =)
Mwr247

T`l``Su\B|\BSa|.*e.*|uTh|o|rআরও 3 বাইট সঞ্চয়
এলোমেলো

5

জাভাস্ক্রিপ্ট (ES7), 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']
শার্লক 9

2

জাভাস্ক্রিপ্ট (ES6), 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। বিট 0 = রবিবার ... বিট 6 = শনিবার। এটি বিট-ওয়াইজ অপারেশনের কারণে অস্পষ্টতার নিয়ম যাচাইকরণ কোডটি আরও সংক্ষিপ্ত হতে দেয় এবং 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"
  `)

পরীক্ষা

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