পাইথলিক স্ট্রিং আনমিনিফাই করুন


13

পাইথ সম্ভবত সবচেয়ে সফল সাধারণ উদ্দেশ্যে গল্ফিং ভাষা ing যদিও এটি 2014 থেকে 2016 পর্যন্ত পাইথের সংক্ষিপ্ত বাক্য গঠন, ধ্রুবক আপডেট, ওভারলোডিং এবং (এর যুগের জন্য) নতুন ভাষার ফলাফল হিসাবে কিছুটা হ্রাস পাচ্ছে , বেশিরভাগ বিল্টইন এটি বেশিরভাগ প্রশ্নের কাছে প্রিয় করে তুলেছে।

পাইথ কোড পড়া প্রায়শই কঠিন। এমনকি ডিবাগ মোডের আউটপুট (ট্রান্সপ্লাইড পাইথন) প্রায়শই একটি দীর্ঘ লাইন থাকে, কখনও কখনও বন্ধনীগুলি দশ গভীরের সাথে থাকে। তবে সঠিকভাবে ফর্ম্যাট করা পাইথ খুব পঠনযোগ্য।

পাইথ ওয়ার্ড চেইনে @isaacg দ্বারা লিখিত পাইথ কোডের একটি টুকরো এখানে দেওয়া হয়েছে ।

.MlZfqhMtTeMPT+Lzs.pMyQ

এটি এর মতো আরও অনেক পাঠযোগ্য।

.M                     Filter by gives-maximal-value of
   l Z                   lambda Z:length(Z) over
   f                     filter by (lambda T:
     q                     equal
       hM t T                head-map tail T
       eM P T                end-map Pop T)
     +L                    Append z to each element in
        z                        
        s .pM y Q            flattened permutations of each subset of Q

এই চ্যালেঞ্জের জন্য, আমরা দিকটি সরিয়ে ফর্ম্যাটিংয়ে ফোকাস করি। পাইথ কোড হওয়ার পরিবর্তে ইনপুটটিতে অক্ষর থাকবে 0123456789M। অঙ্ক narity একটি ফাংশন প্রতিনিধিত্ব করে n, এবং Mএকটি অপারেটর প্রতিনিধিত্ব করে। উদাহরণস্বরূপ, উপরের কোড হিসাবে প্রতিনিধিত্ব করা হয় 210221M101M102M011M10। আনমেনিফাই করার পদক্ষেপগুলি এখানে:

টোকেনগুলিতে স্ট্রিং আলাদা করুন।

একটি টোকেন ম্যাচ [0-9]M*0Mইনপুট ঘটবে না।

চলমান 0 টি যুক্ত করুন।

যখন পর্যাপ্ত যুক্তি নেই, পাইথ Qপ্রোগ্রামের আর্গুমেন্টগুলি পূরণ করার জন্য প্রয়োজনীয় কোড হিসাবে অনেকগুলি অন্তর্নিহিত ভেরিয়েবল (ল্যাম্বদা ভেরিয়েবল বা গুলি) যুক্ত করে; এগুলি দ্বারা প্রতিনিধিত্ব করা উচিত 0

লাইনের মধ্যে গ্রুপ টোকেন।

একটি টোকেনের আরটিটি হল তার অঙ্কের মান।

  • একটি আরটি -0 টোকেন (যেমন একটি 0) একটি লাইন শেষ করে।

  • আরটি -১ টোকেনের জন্য পরবর্তী টোকেনটি একই লাইনে চলে উচিত, একটি স্পেস দ্বারা পৃথক করে।

  • একটি আধ্যাত্মিক> = 2 টোকেনের জন্য, এর আর্গুমেন্টগুলি পৃথক লাইনে চলেছে, তারা কোডটিতে প্রদর্শিত ক্রম অনুসারে প্রতিটি তাদের নিজস্ব সাব-বিভাগগুলি অনুসরণ করবে so একটি টোকেনের যুক্তিগুলি সেই টোকেন প্লাস ওয়ান স্পেসের শেষে যুক্ত হয়।

ইনপুট

একজন nonempty স্ট্রিং (অথবা গৃহস্থালি অ্যারে, দৈর্ঘ্য-1 স্ট্রিং, ইত্যাদি অ্যারে হিসাবে স্ট্যান্ডার্ড ইনপুট / আউটপুট পদ্ধতি দ্বারা অনুমতি দেওয়া হয়েছে) এর মধ্যে রয়েছে 0123456789M, যা সাবস্ট্রিং থাকবে না 0M

আউটপুট

উপরের নিয়ম অনুসারে স্ট্রিংটি ফর্ম্যাট করা হয়েছে।

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

210221M101M102M011M10

2
  1 0
  2
    2
      1M 1 0
      1M 1 0
    2M
       0
       1 1M 1 0


123M4M

1 2
    3M
       4M
          0
          0
          0
          0
       0
       0
    0


2MM

2MM
    0
    0


11011100

1 1 0
1 1 1 0
0


9000000

9
  0
  0
  0
  0
  0
  0
  0
  0
  0


আমি কি ইনপুটটিকে অঙ্ক / স্ট্রিংয়ের অ্যারে হিসাবে নিতে পারি? উদাহরণ 210221M101M102M011M10হবে[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
লুইস ফিলিপ de Jesus Munoz

@ লুইসফেলিপজেজেসুস মুনোজ না, যদি না স্ট্যান্ডার্ড আই / ও বিধিগুলির জন্য আপনাকে অনুমতি দেওয়া হয় (যা আমি মনে করি না যে তারা Mকরে।
lirtosiast

@lirtosiast সুতরাং অক্ষর / একক-অক্ষরের স্ট্রিংগুলির একটি অ্যারে ঠিক আছে, কেবল ডিজিট এবং এর মধ্যে বিভিন্ন ডেটাটাইপ ব্যবহার করছেন না M?
কামিল দ্রাকারী

1
@ লেকিউন খালি স্ট্রিং এখন সংজ্ঞায়িত আচরণ।
lirtosiast

উত্তর:


1

জাভাস্ক্রিপ্ট (ES8), 160 159 বাইট

f=(s,a=[d=0,p=[1]])=>s.replace(/(.)M*/g,(s,c)=>(g=_=>a[d]?s+(P=p[d]-=c--&&~s.length,c?`
`.padEnd(P):' '):g(d--))(a[d]--,a[++d]=+c,p[d]=p[d-1]))+(d?f('0',a):'')

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

মন্তব্য

f = (                          // f = recursive function taking:
  s,                           //   s   = input string
  a = [                        //   a[] = array holding the number of expected arguments
    d = 0,                     //   d   = current depth, initialized to 0
    p = [1]                    //   p[] = array holding the padding values
  ]                            //
) =>                           //
  s.replace(                   // search in s all substrings
    RegExp('(.)M*', 'g'),      // consisting of a digit followed by 0 to N 'M' characters
    (s, c) =>                  // for each substring s beginning with the digit c:
      ( g = _ =>               //   g = recursive function
          a[d] ?               //     if we're still expecting at least one argument at
                               //     this depth:
            s + (              //       append s
              P = p[d] -=      //       update the padding value P = p[d] for this depth:
                c-- &&         //         decrement c; unless c was equal to 0,
                ~s.length,     //         add the length of s + 1 to p[d]
              c ?              //       if c is not equal to 0 (i.e. was not equal to 1):
                `\n`.padEnd(P) //         append a linefeed followed by P - 1 spaces
              :                //       else:
                ' '            //         append a single space
            )                  //
          :                    //     else (all arguments have been processed):
            g(d--)             //       decrement the depth and call g again
      )(                       //   before the initial call to g:
        a[d]--,                //     decrement the number of arguments at depth d
        a[++d] = +c,           //     set the number of arguments for the next depth
        p[d] = p[d - 1]        //     set the padding value for the next depth,
      )                        //     using a copy of the previous depth
  ) + (                        // end of replace()
    d ?                        // if we're not back at depth 0:
      f('0', a)                //   do a recursive call to f with an extra '0'
    :                          // else:
      ''                       //   stop recursion
  )                            //

1

হাস্কেল , 192 190 187 বাইট

unlines.snd.f
f(n:r)|(m,t)<-span(>'9')r,(s,l)<-n#t=(s,n?((n:m):map((' '<$(n:n:m))++)l))
f e=(e,["0"])
'1'?(a:b:r)=(a++drop(length a)b):r
_?s=s
'0'#s=(s,[])
n#s|(r,l)<-f s=(l++)<$>pred n#r

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

আরটি -১ কেস পরিচালনা করার জন্য আরও একটি ভাল উপায় থাকতে হবে, এটি বর্তমানে 45 বাইট নেয়।

সম্পাদনা:

  • 1 হ্যান্ডলিংয়ের একটি পৃথক পদ্ধতিতে স্যুইচ করে -2 বাইট, যদিও আগের পদ্ধতিটিতে সম্ভবত আরও অপ্টিমাইজেশন সম্ভাবনা রয়েছে।
  • অক্ষরের অঙ্কগুলিকে সংখ্যায় রূপান্তর না করে এবং এর predপরিবর্তে ব্যবহার করে বাইট n-1
unlines.snd.f
f(n:r)|(m,t)<-span(>'9')r,(s,l)<-read[n]#t,w<-map((' '<$(n:n:m))++)=(s,last$((n:m):w l):[(n:m++' ':h):w t|n<'2',h:t<-[l]])
f e=(e,["0"])
0#s=(s,[])
n#s|(r,l)<-f s=(l++)<$>(n-1)#r

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


1

কাঠকয়লা , 75 বাইট

FS⊞υ⎇⁼ιM⁺⊟υιι≔⮌υυ≔⟦⟧θ≔⟦⟧ηW∨υη«≔⎇υ⊟υ0ιι¿⊖Σι↘→⊞θι⊞ηΣιW∧η¬§η±¹«⊟ηM⊕L⊟θ←¿η⊞η⊖⊟η

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

FS⊞υ⎇⁼ιM⁺⊟υιι

ইনপুট অক্ষরের উপর লুপ করুন এবং তাদের Malচ্ছিক প্রত্যয় সহ অঙ্কের তালিকায় পরিণত করুন ।

≔⮌υυ

এই তালিকাটি বিপরীত করুন যাতে আমরা Popএটি গ্রাস করতে ব্যবহার করতে পারি।

≔⟦⟧θ

এই পরিবর্তনশীল টোকেনগুলির একটি স্ট্যাক যাঁর আরটিটি এখনও পূরণ হয়নি।

≔⟦⟧η

এই ভেরিয়েবলটি অসম্পূর্ণ টোকেনের অবশিষ্ট আরটিটির স্ট্যাক।

W∨υη«

আমরা সমস্ত টোকেন গ্রাস না করে এবং স্ট্যাকটি খালি না করা পর্যন্ত পুনরাবৃত্তি করুন।

     ≔⎇υ⊟υ0ι

পরবর্তী টোকেন বা 0যদি না হয় পান ।

     ι¿⊖Σι↘→

টোকেনটি মুদ্রণ করুন এবং তারপরে কার্সারটি অনুভূমিকভাবে সরান যদি তা 1অন্যথায় তির্যকভাবে শুরু হয় ।

     ⊞θι⊞ηΣι

উপযুক্ত ভেরিয়েবলগুলিতে টোকেন এবং এর আরটি যুক্ত করুন।

     W∧η¬§η±¹«

আরটি স্ট্যাকটি ননমুগ্ধ হলেও পুনরাবৃত্তি করুন তবে শীর্ষ আরটি শূন্য।

              ⊟η

শূন্য আরেটি বাতিল করুন।

              M⊕L⊟θ←

এর টোকেন সরান এবং অনেক অক্ষর বামে সরান।

              ¿η⊞η⊖⊟η

যদি কোনও আর্টিসি বাকি থাকে তবে শীর্ষ আরটি হ্রাস করুন।

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