নেস্টেড ডিজিটের সীসা স্ট্রিংগুলি পার্স করুন


16

কাজটি

Sনিম্নলিখিত প্রক্রিয়া সহ একটি স্ট্রিং নির্মিত হয়:

  1. Sখালি স্ট্রিং হয়ে শুরু করুন ।
  2. Sফর্মের একটি স্ট্রিংয়ের কিছু অবস্থানে সন্নিবেশ করান dsযেখানে dননজারো ডিজিট এবং ছোট হাতের ASCII অক্ষরের sএকটি স্ট্রিং d। বলতে dsএকটি হল উপাদান এর S
  3. পদক্ষেপ 2 এ যান বা থামান।

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

উদাহরণ

উপরের প্রক্রিয়াটি দিয়ে একটি স্ট্রিং তৈরি করি। চূড়ান্ত ফলাফলের মধ্যে উপাদানগুলির কাঠামো হাইলাইট করা হয়েছে।

S = ""              // Insert "3abc"
S = "3abc"          // Insert "2gh" after 'a'
S = "3a2ghbc"       // Insert "1x" before '3'
S = "1x3a2ghbc"     // Insert "3tty" after '3'
S = "1x33ttya2ghbc" // Final result
     └┘│└┴┴┘│└┴┘││
       └────┴───┴┘

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

"1x3abc3tty2gh"

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

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

1k -> 1k
4asdf -> 4asdf
111xyz -> 1z1y1x
8whatever3yes -> 8whatever3yes
8what3yesever -> 8whatever3yes
1x33ttya2ghbc -> 1x3abc3tty2gh
63252supernestedstrings2ok -> 6trings3eds2st5perne2su2ok
9long3yes4lo2ngwords11here -> 9longrdsre3yes4lowo2ng1e1h
9abc8de7fg6hi5jk4lm3o2pq1rstuvwxyzabcdefghijklmnopqrst -> 9abcopqrst8deijklmn7fgdefgh6hizabc5jkwxy4lmuv3ost2pq1r

উত্তর:


2

জাভাস্ক্রিপ্ট (ES6), 68 বাইট

f=s=>s&&f(s.replace(/\d\D+$/,m=>(s=m.slice(0,i=++m[0]),m.slice(i))))+s

ব্যাখ্যা

একটি সাধারণ ধারণার ভিত্তিতে:

  • শেষ অঙ্কটি মেলে nnইনপুট স্ট্রিংয়ে অক্ষরগুলির পরে
  • এটিকে ইনপুট স্ট্রিং থেকে সরান এবং আউটপুট স্ট্রিংয়ের শুরুতে যুক্ত করুন
  • ইনপুট স্ট্রিংটি খালি না হওয়া পর্যন্ত পুনরাবৃত্তি করুন

জাভা স্ক্রিপ্টে এটি করার সবচেয়ে সংক্ষিপ্ততম উপায় ছিল পুনরাবৃত্তি।

f=s=>
  s&&                        // if the input string is empty, return the empty string
  f(                         // prepend the constituent before it
    s.replace(/\d\D+$/,m=>(  // match the last digit followed by every remaining letter
      s=m.slice(0,n=++m[0]), // set s to the constituent (n followed by n letters)
                             // (we must use s because it is our only local variable)
      m.slice(n)             // replace the match with only the letters after it
    ))
  )+s                        // append the constituent
<input type="text" id="input" value="9long3yes4lo2ngwords11here" />
<button onclick="result.textContent=f(input.value)">Go</button>
<pre id="result"></pre>



0

পাইথন 3 , 173 159 বাইট

k='123456789';y='';i=0
for t in x:
 i+=1
 if t in k:
  y+=t;n=int(t);m=0
  for z in x[i:]:
   if n:  
    if z in k:m+=int(z)+1
    if m<1:y+=z;n-=1
    m-=m>0

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

সম্ভবত গল্ফিয়াস্ট পাইথন বাস্তবায়ন নয়।

যুক্তিটি প্রায় সোজা: এটি স্ট্রিংটি স্ক্যান করে। যখন এটি একটি অঙ্ক সন্ধান করে এটি অনুসরণ করে এমন অক্ষরগুলি যুক্ত করা শুরু করে যতগুলি প্রয়োজনীয় (যেমন গণনাটি অঙ্কটির সাথে মিলে যায় না)। যদি টাস্কটি শেষ করার আগে এটির সংখ্যার মুখোমুখি হয় তবে এগুলি এড়িয়ে যাওয়ার জন্য অক্ষরের সংখ্যার সাথে সম্পর্কিত কাউন্টারে যুক্ত করে। যখন কাউন্টার শূন্যে পৌঁছে যায়, এটি অক্ষর যুক্ত করতে ফিরে যায় (অর্থাত্ গণনাটি প্রাথমিক অঙ্কের সাথে মিল না হওয়া পর্যন্ত)।

দ্রষ্টব্য: গম উইজার্ড এবং হাইপারনিউট্রিনোকে 14 বাইট সংরক্ষণ করা হয়েছে


1
এক লাইনের জন্য যদি বিবৃতিগুলির আপনার উদাহরণস্বরূপ লাইনফিডের প্রয়োজন হয় না if z in k:m+=N(z)+1
পোস্ট রক গার্ফ হান্টার

1
N=intআসলে অপসারণ আপনাকে 2 বাইট সংরক্ষণ করে। পুনঃনামকরণ int4 টি ব্যবহারের পরে কেবল উপকারী।
হাইপারনিউটারিনো

0

জাভা 8, 152 বাইট

s->{String t=s,r="";for(char c;!s.isEmpty();c=t.charAt(0),s=s.replace(t=c+(t.substring(1,c-47)),""),r=t+r)t=s.replaceAll(".*(\\d\\D+$)","$1");return r;}

ব্যাখ্যা:

এখানে চেষ্টা করুন।

s->{                        // Method with String as both parameter and return-type
  String t=s,               //  Temp-String, starting at the input-String
         r="";              //  Result-String, starting empty
  for(char c;!s.isEmpty();  //  Loop as long as the input-String `s` is not empty
                            //    After every iteration:
      c=t.charAt(0),        //     Get the leading digit from `t` as character
      s=s.replace(t=c+(t.substring(1,c-47))
                            //     Set `t` to the last substring (digit + `c` letters),
                  ,""),     //     and remove that sub-string from String `s`
      r=t+r)                //     And add the substring at the start of result-String `r`
    t=s.replaceAll(".*(\\d\\D+$)","$1");
                            //   Get the last digit + everything after it,
                            //   and set this substring to `t`
                            //  End of loop (implicit / single-line body)
  return r;                 //  Return result-String
}                           // End of method

0

পাইথন 2 , 151 147 135 বাইট

d,D=[],[]
for c in input():
 if'/'<c<':':x=[[c]];d=x+d;D+=x
 else:y=d[0];y+=c;d=d[len(y)>int(y[0]):]
print''.join(''.join(w)for w in D)

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

ব্যাখ্যা:

কোডটি নির্বাচনী গোষ্ঠীর দুটি তালিকা রাখে, d and D ,।

স্ট্রিংয়ের প্রতিটি অক্ষর স্ক্যান করা হয়:

  • যদি এটি একটি অঙ্ক হয় তবে উভয় তালিকায় একটি নতুন গ্রুপ যুক্ত করা হবে
  • অন্যথায়, চরিত্রটি সর্বশেষতম গ্রুপে যুক্ত করা হয়েছে d

যখন কোনও গোষ্ঠীর তার অঙ্কের সমান দৈর্ঘ্য হয়, তখন গ্রুপটি সরিয়ে ফেলা হয় d

শেষে Dদলগুলি Dমূল ক্রমে যেমন রয়েছে তেমনি সংক্ষেপিত হয়।

উদাহরণ:

Input = '1121xwyzv'
d = [], D = []
Loop each character in the input

c='1'
    d=[[1]], D=[[1]]
c='1'
    d=[[1], [1]], D=[[1], [1]]
c='2'
    d=[[2], [1], [1]], D=[[1], [1], [2]]
c='1'
    d=[[1], [2], [1], [1]], D=[[1], [1], [2], [1]]
c='x'
    d=[[1x], [2], [1], [1]], D=[[1], [1], [2], [1x]]
latest group in d is full:
    d=[[2], [1], [1]], D=[[1], [1], [2], [1x]]
c='w'
    d=[[2w], [1], [1]], D=[[1], [1], [2w], [1x]]
c='y'
    d=[[2wy], [1], [1]], D=[[1], [1], [2wy], [1x]]
latest group in d is full:
    d=[[1]], D=[[1], [1], [2wy], [1x]]
c='z'
    d=[[1z], [1]], D=[[1], [1z], [2wy], [1x]]
latest group in d is full:
    d=[[1]], D=[[1], [1z], [2wy], [1x]]
c='v'
    d=[[1v]], D=[[1v], [1z], [2wy], [1x]]
latest group in d is full:
    d=[], D=[[1v], [1z], [2wy], [1x]]
print D in order:
    '1v1z2wy1x'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.