তাদের নিজস্ব লাইনে ফাংশন আর্গুমেন্টগুলি সারিবদ্ধ করুন


16

একটি ফাংশন সংজ্ঞা উপস্থাপন করে একটি স্ট্রিংয়ের একটি ইনপুট দেওয়া হয়েছে, নিউলাইনগুলি এবং স্পেসগুলি সন্নিবেশ করা হয়েছে যাতে ফাংশনের আর্গুমেন্টগুলি নিউলাইন-পৃথক এবং প্রান্তিক হয়।

ইনপুট স্ট্রিং নিম্নলিখিত প্যাটার্ন অনুসরণ করবে:

  • প্রথমে এটি একটি উপসর্গ দিয়ে শুরু হবে যা সর্বদা কমপক্ষে একটি অক্ষর দীর্ঘ এবং এতে কোনও অক্ষর থাকে না ,()

  • একটি খোলা বন্ধনী ( () এরপরে আর্গুমেন্ট তালিকার শুরুটি চিহ্নিত করবে।

  • শূন্য বা আরও বেশি আর্গুমেন্টের একটি তালিকা অনুসরণ করবে। এগুলি স্ট্রিং ", "(কমা এবং তারপরে একটি স্পেস) দ্বারা পৃথক করা হয় । যুক্তিগুলির কোনওটিতেই কোনও অক্ষর থাকবে না ,()

  • একটি ঘনিষ্ঠ বন্ধনী ( )) আর্গুমেন্ট তালিকার শেষ চিহ্নিত করবে।

  • সর্বশেষে, একটি পোস্টসাফিক্স পাওয়া যেতে পারে, যা শূন্য বা তার বেশি অক্ষরের দীর্ঘ এবং হতে পারে অক্ষর ,()

ইনপুট স্ট্রিংটি কেবল মুদ্রণযোগ্য এএসসিআইআই (যার অর্থ এটি কখনই কোনও নতুন লাইন ধারণ করে না) নিয়ে গঠিত।

আউটপুট অবশ্যই হবে:

  • উপসর্গটি, ভার্বাটিম অনুলিপি করে এবং খোলা প্রথম বন্ধনী।

  • আর্গুমেন্টের তালিকা, এই সময়টি ", "কমা, নিউলাইন এবং পৃথকভাবে প্রতিটি আর্গুমেন্টের প্রথম অক্ষরকে উল্লম্বভাবে সারিবদ্ধ করার জন্য যতগুলি স্পেস দ্বারা আলাদা করা হয়নি ।

  • নিকটবর্তী পেরেন এবং পোস্টফিক্স (এটি বিদ্যমান থাকলে) ভার্ব্যাটিম।

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

পরীক্ষার কেসগুলি (ফর্ম্যাট: একক লাইন ইনপুট এর পরে আউটপুট ডাবল নিউলাইন অনুসরণ করে):

def foo(bar, baz, quux):
def foo(bar,
        baz,
        quux):

int main() {
int main() {

fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) {
fn f(a: i32,
     b: f64,
     c: String) -> (String, Vec<i32>) {

function g(h) {
function g(h) {

def abc(def, ghi, jkl, mno)
def abc(def,
        ghi,
        jkl,
        mno)

x y z(x, y, z) x, y, z)
x y z(x,
      y,
      z) x, y, z)

উত্তর:


7

হাস্কেল, 115 বাইট

import Data.Lists
f x|(a,b:c)<-span(/='(')x,(d,e)<-span(/=')')c=a++b:intercalate(",\n "++(a>>" "))(splitOn", "d)++e

ব্যবহারের উদাহরণ:

*Main> putStrLn $ f "fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) {"
fn f(a: i32,
     b: f64,
     c: String) -> (String, Vec<i32>) {

কিভাবে এটা কাজ করে:

bind
  a: everything before the first (
  b: the first (
  c: everything after the first (
  d: everything of c before the first )
  e: everything of c from the first ) to the end

construct the output string by concatenating
  a
  b
  splitting d at the argument separator ", " and rejoining it with ",\n " followed by (length a) spaces    
  e

a>>" "সত্যিই চতুর ...
অভিনেতা ক্লাভিলিস

4

জাপট, 23 বাইট

¡Y?X:Xr',",
"+SpUb'(}')

এটি অনলাইন পরীক্ষা!

কিভাবে এটা কাজ করে

               // Implicit: U = input string
¡        }')   // Map each item X and index Y in U.split(")") to:
Y?X            //  If Y is non-zero, X. This keeps e.g. "(String, Vec<i32>)" from being parsed.
:Xr',",\n"+    //  Otherwise, X with each comma replaced with ",\n" concatenated with
SpUb'(         //  U.indexOf("(") spaces.
               // Implicit: re-join with ")", output

3

পার্ল, 62 52 + 2 = 54 বাইট

s/\(.*?\)/$a=$"x length$`;$&=~s|(?<=,)[^,]+|\n$a$&|gr/e

-pপতাকা প্রয়োজন :

$ echo "x y z(x, y, z) x, y, z)
fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) {" | \
perl -pe's/\(.*?\)/$a=$"x length$`;$&=~s|(?<=,)[^,]+|\n$a$&|gr/e'
x y z(x,
      y,
      z) x, y, z)
fn f(a: i32,
     b: f64,
     c: String) -> (String, Vec<i32>) {

কিভাবে এটা কাজ করে:

# '-p' reads first line into $_ and will also auto print at the end
s/\(.*?\)/             # Match (...) and replace with the below
  $a=$"x length$`;     # $` contains all the content before the matched string
                       # And $" contains a literal space 
  $&=~s|               # Replace in previous match
    (?<=,)[^,]+        # Check for a , before the the string to match
                       # This will match ' b: f64', ' c: String'
  |\n$a$&|gr/e         # Replace with \n, [:spaces:] and all the matched text

3

রেটিনা, 31 বাইট

(?<=^([^(])*\([^)]*,) 
¶ $#1$* 

উভয় লাইনের শেষে স্পেসগুলি নোট করুন।

আমরা প্রতিটি স্পেস প্রতিস্থাপন করি যা এর ^([^(])*\([^)]*,পূর্বে রেজেক্স রয়েছে । প্রতিস্থাপনের স্ট্রিংটি একটি নতুন লাইন এবং ক্যাপচারগুলির সংখ্যা হবে([^(])* প্লাস ওয়ান স্পেস সহ ।

আরও সুসংগত ব্যাখ্যা পরে আসে।

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


3

ES6, 68 67 বাইট

s=>s.replace(/\(.*?\)/,(s,n)=>s.replace/, /g, `,
 `+` `.repeat(n)))

এটি মূল স্ট্রিং থেকে আর্গুমেন্ট তালিকাটি বের করে এবং মূল স্ট্রিংয়ের মধ্যে আর্গুমেন্ট তালিকার অবস্থান থেকে গণনা করা প্রতিটি আর্গুমেন্ট বিভাজককে প্রতিস্থাপিত করে প্রতিস্থাপন করে works

সম্পাদনা: @ বুদ্ধিমানের জন্য 1 টি বাইট সংরক্ষণ করা হয়েছে


আমি ভাবছিলাম আপনি কেন এর .split`, `.join(...)বদলে করলেন .replace(...)? s=>s.replace(/\(.*?\)/,(s,n)=>s.replace(/, /g,`,\n `+` `.repeat(n)))
অন্যটিকে

2

পাইথ, 35 30 বাইট

+j++\,b*dhxz\(c<zKhxz\)", ">zK

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

ব্যাখ্যা:

+j++\,b*dhxz\(c<zKhxz\)", ">zK    # z = input()

                 Khxz\)           # Get index of the first ")"
               <z                 # Take the string until there...
              c        ", "       # ...and split it on the arguments
 j                                # Join the splitted string on...
  ++                              # ...the concatenation of...
    \,b                           # ...a comma followed by a newline...
       *dhxz\(                    # ...followed by the right amount of spaces = index of the first "(" + 1
+                         >zK     # Concat the resulting string with the postfix

2

গ্রোভী, 137 89 95 বাইট

খাঁজকাটা হয় না ™ "কাজের জন্য ডান টুল"। সম্পাদনা করুন: যখন আপনার মস্তিষ্কের কেউ এটি ব্যবহার করছে তখন এটি ঠিক কাজ করে ...

f={s=(it+' ').split(/\0/)
s[0].replace(',',',\n'+(' '*it.indexOf('(')))+')'+s[1..-1].join(')')}

পরীক্ষা:

println f("def foo(bar, baz, quux):")
println f("int main() {")
println f("fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) {")
println f("function g(h) {")
println f("def abc(def, ghi, jkl, mno)")
println f("x y z(x, y, z) x, y, z)")

কিছুটা নাড়িত:

f = {String it ->
    def str = (it + ' ').split(/\)/)
    return (str[0].replace (',', ',\n'+(' ' * it.indexOf('('))) + ')' + str[1])
}


1

জাভাস্ক্রিপ্ট (ES6), 85

s=>s.replace(/^.*?\(|[^),]+, |.+/g,(x,p)=>[a+x,a=a||(p?`
`+' '.repeat(p):a)][0],a='')

পরীক্ষা

f=s=>s.replace(/^.*?\(|[^),]+, |.+/g,(x,p)=>[a+x,a=a||(p?`
`+' '.repeat(p):a)][0],a='')

console.log=x=>O.textContent+=x+'\n'

;['def foo(bar, baz, quux):',
  'int main() {',
  'fn f(a: i32, b: f64, c: String) -> (String, Vec<i32>) {',
  'function g(h) {',
  'def abc(def, ghi, jkl, mno)',
  'x y z(x, y, z) x, y, z)']
.forEach(t=>console.log(t+'\n'+f(t)+'\n'))
<pre id=O></pre>


আমি দুঃখিত, আমি ভুল করে যাচ্ছিলাম, আমার কনসোলে কোডটি চালাচ্ছিলাম এবং আউটপুটটি ছিল এরকম কিছু: "x y z(xআপনি যেহেতু দেখতে পাচ্ছেন "কেন আমি কেন এটি এক স্থান বন্ধ মনে করছিলাম। অতএব মুছে ফেলা
andlrc

@ দেব-নাল যা সর্বদা আমার সাথে ঘটে।
edc65

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