Esolang-মন্তব্য-টেমপ্লেট-জেনারেটর


42

এই সাইটের প্রচুর লোক গুহ্য ভাষা ব্যবহার করে এবং যেহেতু এই ভাষাগুলি অস্বাভাবিক এবং বোঝা শক্ত, তাই তারা প্রায়শই একটি নির্দিষ্ট বিন্যাসে ব্যাখ্যা লিখবে। উদাহরণস্বরূপ, যদি কোডটি ছিল

abcdefghijklmnop

এবং এই ভাষাগুলি #মন্তব্যগুলির জন্য ব্যবহার করে , তারা এর মতো ব্যাখ্যা লিখবে:

a                #Explanation of what 'a' does
 bc              #Bc
   d             #d
    e            #Explanation of e
     fgh         #foobar
        ij       #hello world
          k      #etc.
           l     #so on
            mn   #and
              op #so forth

আমি প্রায়শই এটিও করি তবে প্রতিবার আমি যখন এটি করি তখন আমার মনে হয় যে পাঠ্যের বিন্যাসটি তৈরি করা সত্যই অশুভ এবং সময়সাপেক্ষ is সুতরাং আমি চাই আপনি আমার জন্য একটি "এসোলং-মন্তব্য-টেম্পলেট-জেনারেটর" তৈরি করুন। উদাহরণস্বরূপ, আমরা যদি মন্তব্যগুলি উপেক্ষা করি তবে আগের কোডটিতে এই টেমপ্লেটটি রয়েছে:

a                #
 bc              #
   d             #
    e            #
     fgh         #
        ij       #
          k      #
           l     #
            mn   #
              op #

চ্যালেঞ্জ:

আপনাকে অবশ্যই এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা ইনপুট হিসাবে দুটি স্ট্রিং নেয় এবং এই "এসোলং-মন্তব্য-টেম্পলেট" আউটপুট দেয়। প্রথম ইনপুটটি কোড হবে, তবে বারগুলি ( |) সহ যেখানে theোকানো হয়েছে নতুন লাইনগুলি। দ্বিতীয় ইনপুটটি হ'ল আমরা মন্তব্যগুলির জন্য কী ব্যবহার করব। সুতরাং আমাদের শেষ উদাহরণ ইনপুট জন্য এটি হবে:

"a|bc|d|e|fgh|ij|k|l|mn|op", "#"

দুর্ভাগ্যক্রমে এই বারগুলি কোড ইনপুটটির অংশ হতে বাদ দেয়, তবে এটি ঠিক। আপনি ধরে নিতে পারেন যে মন্তব্য ইনপুটটি একটি একক অক্ষর হবে। সরলতার জন্য, মন্তব্য চর কোনও বার হবে না। কোড ইনপুটটিতে কেবল প্রিন্টযোগ্য এএসসিআইআই থাকবে এবং এতে কোনও নতুন লাইন থাকবে না।

আশা করি আপনি টেস্টকেসগুলি থেকে কী করবেন তা অনুমান করতে পারবেন তবে আমি কিছু বিষয় পরিষ্কার করার চেষ্টা করব।

আপনার অবশ্যই প্রতিটি বারে কোড ইনপুটটিকে "কোড-বিভাগে" বিভক্ত করতে হবে। তারপরে, কোডের প্রতিটি বিভাগ তার নিজস্ব লাইনে আউটপুট হয় এবং পূর্ববর্তী সমস্ত কোডের দৈর্ঘ্য (বারগুলি সহ নয়) সহ বাম-প্যাডযুক্ত হয়। তারপরে, প্রতিটি লাইন পর্যাপ্ত স্থান সহ ডান-প্যাডযুক্ত যাতে প্রতিটি লাইনের শেষ দুটি অক্ষর "একটি অতিরিক্ত স্থান" + "মন্তব্যের অক্ষর" হয়।

একটি ট্রেলিং নিউলাইন অনুমোদিত।

এখানে আরও একটি উদাহরণ। ইনপুট জন্য

"Hello|World", "/"

কোডের প্রথম বিভাগটি হল "হ্যালো" এবং দ্বিতীয়টি "ওয়ার্ল্ড"। সুতরাং এটি আউটপুট দেওয়া উচিত:

Hello      /
     World /

এখানে আরও কিছু নমুনা দেওয়া হল:

Input:
"a|b|c|d|e|f|g", ","

Output:
a       ,
 b      ,
  c     ,
   d    ,
    e   ,
     f  ,
      g ,

Input:
"abcdefg", ":"

Output:
abcdefg :

Input:
"4|8|15|16|23|42", "%"

Output:
4          %
 8         %
  15       %
    16     %
      23   %
        42 %

Input:
"E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last!", "!"

Output:
E                                                   !
 ac                                                 !
   h s                                              !
      ecti                                          !
          on is                                     !
                one c                               !
                     haracte                        !
                            r longer                !
                                     than the       !
                                              last! !

Input:
"This|Code|has||empty||sections", "@"

Output:
This                     @
    Code                 @
        has              @
                         @
           empty         @
                         @
                sections @

নিয়মাবলী:

আপনি এই ইনপুট এবং আউটপুট যে কোনও যুক্তিসঙ্গত বিন্যাসে নিতে পারেন। উদাহরণস্বরূপ, পড়া / একটি ফাইল লেখা, stdin / স্থুলকায়, ফাংশন আর্গুমেন্ট / ফেরত মান, ইত্যাদি স্বাভাবিক হিসাবে, এই হল , তাই যতটা সম্ভব সংক্ষিপ্ত হিসাবে আপনার কোড বানাতে চেষ্টা করি এবং যদি আপনি সবচেয়ে কম সমাধান পেতে পারেন আপনি জিতে আপনার ভাষায়! আমি সামগ্রিক বিজয়ী হিসাবে সংক্ষিপ্ততম সমাধানটিও নির্বাচন করব। স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে।



ফাঁকা ফাঁকা স্থান অনুমোদিত?
টাইটাস

30
পরবর্তী পদক্ষেপ: 2 ডি ভাষার জন্য 3 ডি উপস্থাপনা
অ্যারন

3
|চরিত্রটি ব্যবহার না করে আপনি যদি এটি পরিচালনা করে থাকেন তবে একটি বোনাস দুর্দান্ত হবে, তাই আপনি
নিজেরাই

মন্তব্য অক্ষর একটি বার ( |) হতে পারে ?
টন হসপেল

উত্তর:



9

রেটিনা , 35 34 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

\|
·$'¶$`±
T0-2`·±|p`___ `.+±.|·.+

দুটি ইনপুট স্ট্রিং একটি স্পেস দ্বারা পৃথক করা হয়েছে (যা দ্ব্যর্থহীন যেহেতু আমরা জানি যে মন্তব্য ডেলিমিটার সর্বদা একক অক্ষর)।

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


1
স্ট্রিংগুলি সীমাবদ্ধ করার জন্য আপনার কেন একটি স্থানের দরকার? যেহেতু এটি একটি একক চরিত্র তাই এটি কেবল সর্বশেষ চরিত্র হতে পারে।
Adám

1
@ অ্যাডম আমি এটিকে চূড়ান্ত আউটপুটে স্পেস বিভাজক হিসাবে পুনঃব্যবহার করছি।
মার্টিন ইন্ডার

9

জাভা 10, 189 159 বাইট

s->c->{var r="";int p=0,i;for(var a:s.split("\\|")){for(i=p;i-->0;r+=" ");r+=a;for(p+=a.length();i++<s.replace("|","").length()-p;r+=" ");r+=c+"\n";}return r;}

-30 বাইট জাভা 7 কে জাভা 10 এ রূপান্তর করে এবং লুপগুলি অনুকূল করে।

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

ব্যাখ্যা:

s->c->{                     // Method with String & char parameters and String return-type
  var r="";                 //  Result-String, starting empty
  int p=0,                  //  Position-integer, starting at 0
      i;                    //  Index integer
  for(var a:s.split("\\|")){//  Loop over the parts split by "|"
    for(i=p;i-->0;r+=" ");  //   Add `p` amount of spaces to the result-String
    r+=a;                   //   Add the current part to the result-String
    for(p+=a.length();      //   Add the length of the current part to the position-integer
        i++<s.replace("|","").length()-p;r+=" ");
                            //   Add the row's trailing spaces to the result-String
    r+=c+"\n";}             //   Add the character and a new-line to the result-String
  return r;}                //  Return the result-String


4

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

f=
(s,c)=>s.split`|`.map((_,i,a)=>a.map((e,j)=>i-j?e.replace(/./g,` `):e).join``+` `+c).join`
`
;
<div oninput=o.textContent=f(s.value,c.value)><input id=s placeholder=Code><input id=c size=1 maxlength=1 value=#><pre id=o>


4

জিএনইউ সেড (85 -1 for -r) 86

:s;h;:;s,\|( *)[^ \|](.),|\1 \2,;t;s,\|,,g
p;g;:l;s,^( *)[^ \|],\1 ,;tl;s,\|,,;/\S/bs

ইনপুটগুলি একটি স্পেস দ্বারা পৃথক স্ট্রিং হয়।

পরীক্ষা:
ইনপুট.টেক্সট:

a|b|c|d|e|f|g ,
abcdefg :
4|8|15|16|23|42 %
E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last! !
This|Code|has||empty||sections @

আউটপুট:

$ cat input.txt | sed -rf template
a       ,
 b      ,
  c     ,
   d    ,
    e   ,
     f  ,
      g ,

abcdefg :

4          %
 8         %
  15       %
    16     %
      23   %
        42 %

E                                                   !
 ac                                                 !
   h s                                              !
      ecti                                          !
          on is                                     !
                one c                               !
                     haracte                        !
                            r longer                !
                                     than the       !
                                              last! !

This                     @
    Code                 @
        has              @
                         @
           empty         @
                         @
                sections @

নামহীন লেবেলটি :একটি জিএনইউ সেড বৈশিষ্ট্য / বাগ এবং \Sআমি মনে করি এটি একটি এক্সটেনশান, তাই সম্ভবত শিরোনাম হওয়া উচিত GNU sed। এটি বাদে দুর্দান্ত কোড।
sesoumara

@ সেশৌমারা ধন্যবাদ!
রিলি

3

হাস্কেল, 139 13 বাইট

s#p=j$foldl g("",0)s where g(a,n)c|c=='|'=(j(a,n)++"\n"++q n,n)|1>0=(a++[c],n+1);q m=' '<$[1..m];j(a,n)=a++q(sum[1|c<-s,c/='|']-n+1)++p

সংজ্ঞাটি অন্তর্ভুক্ত করে 4 বাইট সংরক্ষণ করা হয়েছে।

Ungolfed:

template :: String -> String -> String
template code comment = format $ foldl g ("", 0) code
    where g (acc, n) c
            | c == '|' = (format (acc, n) ++ "\n" ++ spaces n, n)
            | otherwise = (acc ++ [c], n+1)
          l = length $ filter (/= '|') code
          spaces n = replicate n ' '
          format (acc, n) = acc ++ spaces (l-n+1) ++ comment

3

গ্রোভি, 120 113 111 বাইট

def m(s,c){s.split(/\|/).inject(0,{e,t->println((' '*e+t).padRight(s.replace('|','').size()+1)+c);e+t.size()})}

ungolfed *

def m(s,c){
  s.split(/\|/).inject(0, { e, t ->
    println((' '*e+t).padRight(s.replace('|','').size())+' '+c)
    e+t.size()
  })
}

(১২০ বাইট সহ প্রথম খসড়া)

def m(s,c){def l=0;s.split(/\|/).collect{l+=it.size();it.padLeft(l).padRight(s.replace('|','').size())+' '+c}.join('\n')}

ungolfed *

def m(s,c){
  def l=0 // minimized version needs a semicolon here
  s.split(/\|/).collect{
    l+=it.size() // minimized version needs a semicolon here
    it.padLeft(l).padRight(s.replace('|','').size())+' '+c
  }.join('\n')
}

টেস্ট

%> m('a|bc|d|e|fgh|ij|k|l|mn|op', '#')
a                #
 bc              #
   d             #
    e            #
     fgh         #
        ij       #
          k      #
           l     #
            mn   #
              op #

%> m('Hello|World', '/')
Hello      /
     World /

%> m('a|b|c|d|e|f|g', ',')
a       ,
 b      ,
  c     ,
   d    ,
    e   ,
     f  ,
      g ,

%> m('abcdefg', ':')
abcdefg :

%> m('4|8|15|16|23|42', '%')
4          %
 8         %
  15       %
    16     %
      23   %
        42 %

%> m('E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last!', '!')
E                                                   !
 ac                                                 !
   h s                                              !
      ecti                                          !
          on is                                     !
                one c                               !
                     haracte                        !
                            r longer                !
                                     than the       !
                                              last! !

%> m('This|Code|has||empty||sections', '@')
This                     @
    Code                 @
        has              @
                         @
           empty         @
                         @
                sections @

কীভাবে.padRight(s.replace('|','').size()+1)+c)
অ্যামেজিংড্রিমস

ভাল ধারণা! ধন্যবাদ! আরও ২ টি চর বাঁচিয়েছেন!
norganos

3

পাইথন 2, 125 124 132 বাইট

-১ বাইট @ টুকুএক্সএক্সকে ধন্যবাদ (এখান থেকে স্থানটি গল্ফ করে মিস করা i, v)

def g(s,c):x=s.split('|');print((' '+c+'\n').join(' '*len(''.join(x[:i]))+v+' '*len(''.join(x[i+1:]))for i,v in enumerate(x))+' '+c)

আইডোনে সমস্ত পরীক্ষার কেস


1
আপনার ব্যবহার অনুমিত cমন্তব্য গৃহস্থালির কাজ হিসাবে, না #
অলিভার নি

@ অলিভারনি - উহ এটির বর্তমান ফর্মের কোডের জন্য হিট ছিল।
জোনাথন অ্যালান

3

পাইথন 2, 107 105 102 99 বাইট

উপরের সমস্ত পরীক্ষার কেস দিয়ে পরীক্ষিত

সম্পাদনা d = a.split ("|") পরিবর্তন করে 2 বাইট বন্ধ; ধন্যবাদ @ অলিভার নি

আরও 3 বাইট গেছে। আবার ধন্যবাদ.

@ জোনাথনের পরামর্শটি আসলে 3 বাইট সাশ্রয় করে এবং এটিকে যাদুতে নামিয়ে আনেন 99. ধন্যবাদ Thanks

def c(a,b):
 d,i=a.split("|"),0
 for e in d:j=i+len(e);print" "*i+e+" "*(len("".join(d))-j+1)+b;i=j

1
এটি অন্য বাইটটি গল্ফ করে
অলিভার নি

3
হেই @ অলিভারনি, গল্ফিং স্টাফ ডাউন করার জন্য টিপস সরবরাহ করা প্রশংসা করা হয়েছে, তবে সম্পাদনা কোডটি এই সাইটে ( উত্স ) তে সত্যিই উপযুক্ত নয় , তাই আমি আপনার সম্পাদনাটি ফিরিয়ে নিয়েছি। মন্তব্য হিসাবে এই টিপস নিঃসঙ্কোচে পোস্ট করুন! আমি নিশ্চিত যে ওপি এটির প্রশংসা করবে, তবে এটি পরীক্ষা করা এবং তারা এটি ব্যবহার করতে চান কিনা তা বেছে নেওয়া তাদের উচিত।
ডিজেএমসিএমহেম

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

1
আপনি " "*i2 বাইটের কাছাকাছি প্যারেনেসিসটি সরাতে পারেন
অলিভার নি

1
আপনি বাইট সংরক্ষণ করতে len(e)পছন্দ হিসাবে একটি পরিবর্তনশীলও সেট করতে পারেন for e in d:z=len(e)....কারণ এটি দুটিবার ব্যবহৃত হয়
অলিভার নি

3

05 এ বি 1 ই , 29 38 31 29 বাইট

'|„ǝʒ:'ǝ¡'ʒмεD®>úsg®+©s}.Bεð²J,

স্পষ্টভাবে golfed যেতে পারে, কিন্তু অন্তত তার এখন কাজ ..
+9 বাইট কারণ ¡(বিভক্ত) খালি আইটেমগুলি স্বয়ংক্রিয়ভাবে সরিয়ে ফেলা হবে, তাই আমি যোগ করার জন্য ছিল '|„ǝʒ:'ǝ¡'ʒм..
-2 ধন্যবাদ বাইট @MagicOctopusUrn পরিবর্তন করে '|„ǝʒ:'ǝ¡'ʒмথেকে '|¶:.BεðÜ}(বর্তমান সমাধান কাজ করে না পেছনের জায়গাগুলি সহ আইটেমগুলি, তবে আমি ধরে নিয়েছি যা পরীক্ষার কেস অনুসারে অনুমোদিত।

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

ব্যাখ্যা:

'|¶:           # Take the first input, and replace every "|" with "¶"
               #  i.e. "abc|d|e||fg" → "abc¶d¶e¶¶fg" (¶ are new-lines in 05AB1E)
    .B         # Box all the items (appending trailing whitespace to make it a rectangle)
               #  i.e. "abc¶d¶e¶¶fg" → ['abc','d  ','e  ','   ','fg ']
      εðÜ}     # Remove all trailing spaces from each item
               #  i.e. ['abc','d  ','e  ','   ','fg '] → ['abc','d,'e','','fg']
               #  NOTE: `'|¡` would have resulted in ['abc','d','e','fd'], hence the use of
               #        Box which implicitly splits on new-lines to keep empty items
ε              # For-each:
 D             #  Duplicate the current item
  ®>ú          #  Prepend global_variable + 1 amount of spaces
               #  (+1 because the global_variable is -1 by default)
               #   i.e. "e" and 3+1 → "    e"
 sg            #  Swap so the duplicated item is at the top, and take its length
   ®+          #  Sum it with the global_variable
               #   i.e. "e" (→ 1) and 4 → 5
     ©         #  And store it as new global_variable
      s        #  Then swap so the space appended item is at the end again
       }       # And end the for-each loop
.B             # Box all the items (appending the appropriate amount of spaces)
               #  i.e. ['abc','   d','    e','     ','     fg']
               #   → ['abc    ','   d   ','    e  ','       ','     fg']
ε              # For-each again:
 ð             #  A space character
  I            #  The second input-character
   J           #  Join both together with the current item
    ,          #  And print the current row with trailing new-line

কোডটি ধারণ করা থাকলে এটি অবৈধ ǝʒ'|¶:.Bকাজ করতে পারে
ম্যাজিক অক্টোপাস উরন 5'18

@ ম্যাজিক অ্যাক্টপাস ইউরন চ্যালেঞ্জের বিবরণে বর্ণিত হয়েছে " কোড ইনপুটটিতে কেবল প্রিন্টযোগ্য এএসসিআইআই থাকবে এবং এতে কোনও নতুন লাইন থাকবে না। " এছাড়াও, কোডটির কোন অংশটি প্রতিস্থাপন করা উচিত '|¶:.B?
কেভিন ক্রুইজসেন

আমি ভাবছিলাম যে এটি একটি সংক্ষিপ্ত বিভাজন হবে, তবে এটি আপনার বর্তমান কোডটির সাথে এটি স্ল্যাম্পিং করে কাজ করবে না, আপনাকে অতিরিক্ত ছাঁটাই করতে হবে। বা .Bপূর্ববর্তী স্থানগুলিতে যুক্ত করার পরে কেবল অতিরিক্ত এবং দ্বিতীয় বার উপেক্ষা করুন ।
যাদু অক্টোপাস উরন

@ ম্যাজিক অ্যাক্টোপাস উর্ন এটি সম্ভবত কিছু বাইট সংরক্ষণ করতে পারে, যেহেতু আমার বর্তমান কাজটি প্রায় দীর্ঘ, তবে .Bইতিমধ্যে উপস্থিত থাকার পরে স্পেসগুলির সাথে পূর্ববর্তী স্থানগুলির পরিমাণ গণনা করা আরও কঠিন হবে ।
কেভিন ক্রুইজসেন

1
'|¶:.BεðÜ}εD®>úsg®+©s}.BεðIJ,? 29 বাইট। পুনরাবৃত্তি 1 :) এ ফিরে যান। .Bনিউলাইনগুলিতে বিভক্ত হয়, যা এমন বৈশিষ্ট্য যা অনেকেই জানেন না। খালি উপাদানগুলি রাখার এটি আমার একমাত্র উপায়। আমি একটি বৈশিষ্ট্য হিসাবে এটি অনুরোধ করব। বিভক্তির অর্থ হওয়া উচিত, তবে খালি উপাদানগুলি রাখুন ..
যাদু অক্টোপাস

2

পাওয়ারশেল ভি 2 +, 103 99 বাইট

param($a,$b)$a-split'\|'|%{" "*$l+$_+" "*(($a-replace'\|').length+1-$_.length-$l)+$b;$l+=$_.Length}

দুটি স্ট্রিং হিসাবে ইনপুট নেয়, -splitএটি আক্ষরিক পাইপে প্রথম (যেহেতু বিভাজনটি রেজেক্স সিনট্যাক্স ব্যবহার করে), এবং উপাদানগুলিকে একটি লুপে ফিড করে |%{...}

প্রতিটি পুনরাবৃত্তি, আমরা $lবর্তমান উপাদান দিয়ে সংক্ষিপ্ত দ্বারা সংজ্ঞায়িত অনেকগুলি স্থান হিসাবে একটি স্ট্রিং তৈরি করি । প্রথম লুপের $lজন্য $null, এটিকে আরম্ভ করে , যা এখানে মূল্যায়ন করে 0

সেই স্ট্রিংটি আরও একটি স্পেসের সাথে আরও সংক্ষিপ্ত হয় ( $aআমরা যদি -replaceপ্রতিটি পাইপকে কিছুই না দিয়ে ডিফল্ট করে সংজ্ঞায়িত করি , সাথে সাথে 1কোড এবং মন্তব্যের মধ্যে অতিরিক্ত প্যাডিংয়ের .lengthজন্য বর্তমান উপাদানটির বিয়োগফল বিয়োগফল হয় $lযা আমরা কত স্পেসে প্যাড করেছি এই পুনরাবৃত্তির উপর বাম), আমাদের মন্তব্যের চরিত্রের সাথে সম্মত $b। পাইপলাইনে রেখে গেছে

আমরা তারপরে $lপরবর্তী পুনরাবৃত্তির জন্য আপডেট করি ।

ফলস্বর স্ট্রিংগুলি সমস্ত পাইপলাইনে রেখে যায় এবং Write-Outputপ্রোগ্রামের প্রয়োগের সময় অন্তর্নিহিত মাধ্যমে আউটপুট ঘটে এবং ডিফল্টর মধ্যে তাদের মধ্যে একটি নতুন লাইন থাকে।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\esolang-comment-template-generator.ps1 "This|Code|has||empty||sections" "@"
This                     @
    Code                 @
        has              @
                         @
           empty         @
                         @
                sections @

PS C:\Tools\Scripts\golfing> .\esolang-comment-template-generator.ps1 "a|bc|def|ghi|h" "|"
a          |
 bc        |
   def     |
      ghi  |
         h |

2

ভিম, 39 38 কীস্ট্রোক

-1 বাইট ধন্যবাদ ডিজেএমসিএমহেমকে

ইনপুট হিসাবে বাফার (যেমন একটি ফাইল) হিসাবে প্রত্যাশা করা হয় যার প্রথম অক্ষরটি মন্তব্য ডেলিমিটার, তার পরে কোড অনুসরণ করে #foo|bar|baz

"cxqaf|m`Yp<Ctrl+o>v$r jv0r x@aq@a$p<Ctrl+v>gg$C <Ctrl+r>c<Esc>

ব্যাখ্যা

(" _" একটি আক্ষরিক স্থান বোঝায়।)

"cx          " Delete the first character (the comment delimiter) and store in register 'c'
qa           " Start recording macro 'a'
f|m`         " Advance to the first '|' on the line and set mark
Yp<Ctrl+o>   " Duplicate this line and return to mark
v$r_         " Replace everything after the cursor on this line (inclusive) with spaces
jv0r_x       " Go down a line and replace everything before the cursor on this line (inclusive) with
             "   spaces, then delete one space
@a           " Call macro recursively
q@a          " Stop recording and immediately call the macro
$p           " Paste the deleted space at the end of the last line
<Ctrl+v>gg$       " Highlight the column where the comment delimiters will go and all trailing spaces
C_<Ctrl+r>c<Esc>  " Replace the highlighted text on each line with a space and the contents of
                  "   register 'c' (the comment delimiter)

1
: ডিআই সবসময়ই ভিভ আপভোট! আমি মনে করি আপনি বদলে mmযেতে পারেন m`এবং আপনি যদি পরিবর্তন `mহন<C-o>
DJMcMayhem

@ ডিজেএমসিমেহেম ধন্যবাদ! আমি ভিমে গল্ফ পছন্দ করি কারণ আমি প্রতিদিন যে সরঞ্জামটি ব্যবহার করি তা সম্পর্কে আমি সবসময় কিছু শিখি।
জর্দান


2

সি # 176 167 154 বাইট

string f(string s,char x){var c=s.Split('|');var d="";int i=0;foreach(var b in c)d+=b.PadLeft(i+=b.Length).PadRight(s.Length+2-c.Length)+x+"\n";return d;}

UnGolfed

string f(string s, char x)
{
    var c = s.Split('|');
    var d = "";
    int i = 0;
    foreach (var b in c)
        d += b.PadLeft(i += b.Length).PadRight(s.Length + 2 - c.Length) + x + "\n";
    return d;
}

একটি লিনকিউ সমাধান 146 হত তবে using System.Linq;এটি 164-এ ফিরিয়ে আনতে হবে:

string f(string s,char x){var c=s.Split('|');int i=0;return c.Aggregate("",(g,b)=>g+b.PadLeft(i+=b.Length).PadRight(s.Length+2-c.Length)+x+"\n");}

পুরানো সমাধান:

167 বাইট:

string f(string s,char x){var c=s.Split('|');var d="";int i=0;foreach(var b in c){d+=b.PadLeft(i+b.Length).PadRight(s.Length+2-c.Length)+x+"\n";i+=b.Length;}return d;}

স্ট্রিং ইন্টারপোলেশন ব্যবহার করে 176 বাইট

string f(string s,char x){var c=s.Split('|');var d="";int i=0;foreach(var b in c){d+=string.Format($"{{1,{i}}}{{0,-{s.Length+2-c.Length-i}}}{x}\n",b,"");i+=b.Length;}return d;}

1

পিএইচপি, 120 117 116 110 109 বাইট

foreach($a=split('\|',$argv[1])as$i=>$t){$c=preg_replace('#.#',' ',$a);$c[$i]=$t;echo join($c)," $argv[2]
";}

অথবা

foreach($a=split('\|',$argv[1])as$t){$c=preg_replace('#.#',' ',$a);$c[$i++|0]=$t;echo join($c)," $argv[2]
";}

1

এমএটিএল , 33 31 বাইট

'\|'0'|'hYXo8M&YbY:&YdtaZ)0ihYc

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

ব্যাখ্যা

বিল্টিন ফাংশন Yd( blkdiag), যা তার ইনপুটগুলি থেকে একটি ব্লক-ডায়াগোনাল ম্যাট্রিক্স তৈরি করে, বেশিরভাগ কাজ করে। ম্যাট্রিক্সের পূরণের মানগুলি 0 হয় এবং চর 0 0 প্রদর্শন করার উদ্দেশ্যে একটি স্থান হিসাবে বিবেচিত হয়। কোডটি সহজেই বিভক্ত হবে |, ফলস্বরূপ ব্লকগুলি থেকে একটি ম্যাট্রিক্স তৈরি করবে, চরে রূপান্তর করবে এবং স্থান এবং মন্তব্য প্রতীক সহ দুটি কলাম যুক্ত করবে।

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

এটি সমাধানের জন্য, আমরা প্রতিটিের আগে একটি চর 0 চালু করি |, তাই কোনও ব্লক ফাঁকা থাকবে না; এবং তারপরে গৃহীত চর ম্যাট্রিক্সে আমরা কলামগুলি কেবল চর 0 দ্বারা তৈরি করা সরিয়ে ফেলি। একটি খালি নয় কোড বিভাগে কিছু মুদ্রণযোগ্য ASCII চর থাকবে এবং সুতরাং এটির যে কলামগুলি এটি ছড়িয়ে আছে তা বেঁচে থাকবে। একটি খালি বিভাগ একটি সারিতে অবদান রাখবে, তবে অতিরিক্ত কলামটি প্রবর্তন করবে না।

'\|'    % Push this string: source for regexp matching. It's just | escaped
0'|'h   % Push a string formed by char 0 followed by | (no escaping needed)
YX      % Input string implicitly. Replace first of the above string by the second
o       % Convert from chars to code points. Gives a numeric vector
8M      % Push '|' again
&Yb     % Split numeric vector at occurences of | (the latter is automatically
        % converted  to its code point). This gives a cell array of numeric vectors
Y:      % Unbox cell array: pushes the numeric vectors it contains
&Yd     % Form a block-diagonal matrix from those vectors
ta      % Duplicate. Compute vector that equals true for columns that have some
        % nonzero value
Z)      % Used that as a logical index (mask) for the columns of the matrix.
        % This removes columns that contain only zeros
0ih     % Input comment symbol and prepend char 0 (which will be displayed as space)
Yc      % Append that to each row of the matrix. The matrix is automatically 
        % converted from code points to chars
        % Display implicitly

1
আমি অস্পষ্টভাবে হতাশ হয়েছি যে আপনি ওপি উল্লিখিত ফর্ম্যাটে আপনার ব্যাখ্যাটি
রাখেন নি

1
@ র্যান্ডম 832 আমি প্রায়শই এই ফর্ম্যাটটি ব্যবহার করি না। এটি ব্যাখ্যার জন্য খুব কম জায়গা রেখে অনেক জায়গা ব্যবহার করে
লুইস মেন্ডো

প্রথম স্ট্রিংয়ে কেন পালাবার দরকার?
কনর ওব্রায়েন

@ কনরও ব্রায়ান ভাল প্রশ্ন। আমি কখনই জানি না কোনটি / কখন বিশেষ প্রতীকগুলি পলায়নের দরকার এবং কোনটি / কখন নয়। এই ক্ষেত্রে, ইন |( ম্যাচ subexpression আগে বা পরে| ) এটিকে মতলব / অষ্টক regexp ইঞ্জিনে অন্তত প্রয়োজন আছে
লুইস Mendo

1

পাইথ, 30 বাইট

VJcE\|s[*ZdN*h--lsJZlNdQ)=+ZlN

অথবা

jm+dQ.t.t+MC,.u*l+NYdJc+Ed\|kJ

উভয়ই সম্পূর্ণ প্রোগ্রাম যা মন্তব্য স্ট্রিংয়ের STDIN এ ইনপুট নেয় এবং তারপরে প্রোগ্রামের স্ট্রিংটি নিউলাইন দ্বারা পৃথক।

অনলাইনে প্রথম সংস্করণ ব্যবহার করে দেখুন

দ্বিতীয় সংস্করণটি অনলাইনে চেষ্টা করে দেখুন

তারা কিভাবে কাজ করে

VJcE\|s[*ZdN*h--lsJZlNdQ)=+ZlN  Program. Inputs: E, Q
  cE\|                          Split E on "|"
 J                              Assign to J
                                Implicit Z=0
V                               For N in that:
       [                )        Create a list with elements:
        *Zd                       Z spaces
           N                      N
               -lsJZ              len(concatenate(J))-Z
              -     lN             -len(N)
             h                     +1
            *         d            spaces
                       Q          Q
      s                          Concatenate the list
                                 Implicitly print
                        =+ZlN    Z=Z+len(N)

jm+dQ.t.t+MC,.u*l+NYdJc+Ed\|kJ  Program. Inputs: E, Q
                       +Ed      Add a trailing space to E
                      c   \|    Split that on "|"
                     J          Assign to J
             .u                 Cumulatively reduce J with:
                            k    starting value empty string and
                                 function N, Y ->
                l+NY              len(N+Y)
               *    d             spaces
            ,                J  Two-element list of that and J
           C                    Transpose
         +M                     Map concatenation over that
       .t                       Transpose, padding with spaces
     .t                         Transpose again
 m+dQ                           Map concatenation with Q over that
j                               Join on newlines
                                Implicitly print

1

ডায়ালগ এপিএল 16.0 (অ-প্রতিযোগী), 43 37 বাইট

মন্তব্য চরিত্রের জন্য প্রম্পটস, তারপর কোড জন্য।

↑(↓↑((-(⍸'|'∘=),≢)↑¨'|'∘≠⊆⊢)⍞),¨⊂¯2↑⍞

প্রতিযোগিতামূলক নয় কারণ 16.0 সংস্করণটি এই চ্যালেঞ্জের চেয়ে নতুন।


কীভাবে ডায়ালগ এপিএল এখনও প্রতিযোগী নয়? এটা কি এখনও ইন-ডেভ?
ডিজেএমসিএমহেম

@ ডিজেএমসিএমহেম হ্যাঁ আমি ডায়ালগের জন্য কাজ করি এবং 15.0 প্রকাশের আগেই 16.0 এ অ্যাক্সেস পেয়েছি। 16.0 2017Q1 এ প্রকাশের জন্য নির্ধারিত হয়েছে।
অ্যাডম

কিভাবে কাজ করে?
কনর ও'ব্রায়েন

1

পার্ল, 63 বাইট

জন্য +5 অন্তর্ভুক্ত -Xpi

এসটিডিআইএন এবং ইন-ইন-এর পরে মন্তব্যের অক্ষরে ইনপুট দিয়ে চালান

perl -Xpi% esolang.pl <<< "Ab|Cd||ef"

esolang.pl:

s/
/|/;s%(.*?)\|%$"x$`=~y/|//c.$1.$"x$'=~y/|//c." $^I
"%eg

সম্পূর্ণ বিরক্তিকর সোজা সমাধান


1

টার্টল্যাড , 35 বাইট ( নন-কেপটিং )

একটি ইনপুট নেয়, শেষ চরিত্রটি মন্তব্য চরিত্র। স্থান হিসাবে মন্তব্য চরিত্রের সাথে কাজ করে না, তবে আমি ধরে নিই যে এটি প্রয়োজনীয় নয়।

!' [*.+(|' dl)r_]' r[*+.(|u)_][ .d]

ব্যাখ্যা:

!                                  take input into string variable
 '                                 write space over current cell
   [*           ]                  while cell is not *
     .+                            write pointed char of string, stringpointer+1 (starts 0)
       (|    )                     if current cell is |
         ' dl                      write space (over |), move down, left
              r_                   move right, write * if pointed char is
                                   last char, else space

                 ' r               write space, move right
                    [*       ]     while cell is not *
                      +.           increment pointer and write pointed char
                        (|u)       if cell is |, move up
                            _      write * if the pointed char is the last char

                              [   ] while cell is not space
                                .d  write the pointed char from string, move down 


0

স্কালা, 123 বাইট

def?(i:String,c:String)={var b=0
i.split('|').map{s=>println(" "*b+s+" "*(i.replace("|","").size-b-s.size+1)+c)
b+=s.size}}

পরীক্ষার কোড + আউটপুট:

?("a|b|c|d|e|f|g", ",")
a       ,
 b      ,
  c     ,
   d    ,
    e   ,
     f  ,
      g ,

?("abcdefg", ":")
abcdefg :

?("4|8|15|16|23|42", "%")
4          %
 8         %
  15       %
    16     %
      23   %
        42 %

?("E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last!", "!")
E                                                   !
 ac                                                 !
   h s                                              !
      ecti                                          !
          on is                                     !
                one c                               !
                     haracte                        !
                            r longer                !
                                     than the       !
                                              last! !

?("This|Code|has||empty||sections", "@")
This                     @
    Code                 @
        has              @
                         @
           empty         @
                         @
                sections @

0

রুবি, 96 80 বাইট

->s,c{s.gsub(/(^|\|)([^|]*)/){" "*$`.count(t="^|")+$2+" "*(1+$'.count(t))+c+$/}}

এটি eval.in এ দেখুন: https://eval.in/639012

আমার আসলেই রেটিনা শিখানো উচিত।


0

জেলি , 41 বাইট

দেখে মনে হচ্ছে এটির অনেকগুলি বৃদ্ধি রয়েছে এবং সম্ভবত অনেকগুলি লিঙ্ক রয়েছে ...

ṫø⁹‘‘µFL‘⁶ẋ
‘ị
ḣFL⁶ẋ$;ç@;1ŀ
J’ç@€
ṣ”|Ç;€Y

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

কিভাবে?

ṫø⁹‘‘µFL‘⁶ẋ  - link 1: get the spaces for after the code, dyadic(split string, index)
 ø           - next chain as a nilad
  ⁹‘‘        - right argument incremented twice (the index we actually want)
ṫ            - tail (get the rest of the split string)
     µ       - next chain as a monad
      FL‘    - flatten, get its length and increment
         ⁶   - a space character " "
          ẋ  - repeat the space character that many times

‘ị           - Link 2: get the code for a line dyadic(index, split string)
‘            - increment the index
 ị           - retrieve the string at that index

ḣFL⁶ẋ$;ç@;1ŀ - Link 3: get the code and join with spaces, dyadic (index, split string)
ḣ            - head: split string[index:]
 FL          - flatten and get its length
     $       - previous two atoms as a monad
   ⁶         - a space character, " "
    ẋ        - repeat the space that many times
      ;      - concatenate with
       ç@    - the result of the previous link (the code) - reverse inputs
         ;   - concatenate with
          1ŀ - the result of Link 1 (the spaces after the code)

J’ç@€        - Link 3: a for loop, monadic(split string)
J’           - [0,...,Len(split string)-1]
  ç@€        - the result of the previous link, with revered inputs, for each

ṣ”|Ç;€Y      - Main Link: dyadic(code string, comment character)
ṣ”|          - split on "|"
   Ç         - the result of the previous link
    ;€       - concatenate each with the comment character
      Y      - join with line feeds
             - implicit print


0

গল্ফস্ক্রিপ্ট, 85 বাইট

{(;);}:r;", "%(r\(r n+:c;;.,\'|'%.,@\-)):l;0:m;{.,0>}{" "m*\(.,m+:m l\-" "\*+c@}while

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

2017 আপডেট - গল্ফস্ক্রিপ্ট - 71 বাইট

', '/~~:c;~1/.,\.{'|'=},,@\-):l;['|']/0:i;{.,i+:i l i-' '*c+\' '*"
"\}/

ব্যাখ্যা

', '/~~:c;~1/        # Parses input
.,\.{'|'=},,@\-):l;  # Computes string length without '|'
['|']/               # Splits the array
0:i;                 # Counter
{.,                  # Length of the substring
i+:i                 # Counter update
l i-' '*c+\          # Adds spaces after the substring 
' '*"\n"\            # Adds spaces before the next substring
}/                   # ...For each substring

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