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

मैं अक्सर ऐसा भी करता हूं, लेकिन हर बार जब मैं ऐसा करता हूं, तो मुझे ऐसा लगता है कि टेक्स्ट का लेआउट वास्तव में अप्रिय और समय लेने वाला है। इसलिए मैं चाहता हूं कि आप मेरे लिए "एसोलंग-कमेंट-टेम्प्लेट-जेनरेटर" बनाएं। उदाहरण के लिए, यदि हम टिप्पणियों को अनदेखा करते हैं, तो पिछले कोड में यह टेम्पलेट है:

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

चुनौती:

आपको एक प्रोग्राम या फ़ंक्शन लिखना होगा जो इनपुट के रूप में दो तार लेता है, और इस "एसोलंग-टिप्पणी-टेम्पलेट" को आउटपुट करता है। पहला इनपुट कोड होगा, लेकिन सलाखों के साथ ( |) डाला जाता है जहां नए सिरे जाते हैं। दूसरा इनपुट वह है जो हम टिप्पणियों के लिए उपयोग करेंगे। तो हमारे पिछले उदाहरण में इनपुट के लिए यह होगा:

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

दुर्भाग्य से यह बार कोड इनपुट का हिस्सा होने से बाहर रखता है, लेकिन यह ठीक है। आप मान सकते हैं कि टिप्पणी इनपुट एकल वर्ण होगा। सादगी की खातिर, टिप्पणी चार एक पट्टी नहीं होगी। कोड इनपुट में केवल मुद्रण योग्य ASCII शामिल होगा, और इसमें कोई नया अंक नहीं होगा।

उम्मीद है कि आप अनुमान लगा सकते हैं कि टेस्टकेस से क्या करना है, लेकिन मैं कुछ चीजों को स्पष्ट करने की कोशिश करूंगा।

आपको प्रत्येक बार पर कोड इनपुट को "कोड-सेक्शन" में विभाजित करना होगा। फिर, कोड का प्रत्येक अनुभाग अपनी स्वयं की लाइन पर आउटपुट होता है और सभी पिछले कोड की लंबाई के साथ बाएं-पैडेड होता है (सलाखों सहित नहीं)। फिर, प्रत्येक रेखा पर्याप्त रिक्त स्थान के साथ दाईं ओर होती है ताकि हर पंक्ति पर अंतिम दो अक्षर "एक अतिरिक्त स्थान" + "वर्ण" हो।

एक अनुगामी न्यूलाइन की अनुमति है।

यहाँ एक और उदाहरण है। इनपुट के लिए

"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 / STOUT, फ़ंक्शन आर्ग्युमेंट्स / रिटर्न वैल्यू, आदि। हमेशा की तरह, यह , इसलिए अपने कोड को यथासंभव छोटा बनाने का प्रयास करें और यदि आप सबसे कम समाधान प्राप्त कर सकते हैं तो आप जीत सकते हैं। तुम्हारी भाषा में! मैं समग्र विजेता के रूप में सबसे छोटा समाधान भी चुनूंगा। मानक खामियों पर रोक लगाई जाती है।



क्या रिक्त स्थान की अनुमति है?
टाइटस

30
अगला चरण: 2 डी भाषाओं के लिए एक 3 डी प्रतिनिधित्व
आरोन

3
यदि आप |चरित्र का उपयोग किए बिना इसे करने के लिए प्रबंधन करते हैं तो एक बोनस अच्छा होगा, इसलिए आप खुद को समझा सकते हैं
WorldSEnder

क्या टिप्पणी चरित्र एक बार ( |) हो सकता है ?
टन हास्पेल

जवाबों:



9

रेटिना , ३५ 34 बाइट्स

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

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

दो इनपुट स्ट्रिंग्स को एक स्थान से अलग किया जाता है (जो कि स्पष्ट नहीं है क्योंकि हम जानते हैं कि टिप्पणी सीमांकक हमेशा एक एकल वर्ण होता है)।

इसे ऑनलाइन आज़माएं!


1
आपको स्ट्रिंग्स को सीमांकित करने के लिए स्थान की आवश्यकता क्यों है? चूंकि यह एक एकल पात्र है, इसलिए यह अंतिम हो सकता है।
12

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

जावास्क्रिप्ट (ईएस 6), 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

GNU sed (85 + 1 for -r) 86

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

इनपुट एक स्थान द्वारा अलग किए गए तार हैं।

टेस्ट:
input.txt:

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 @

नामहीन लेबल :एक GNU sed सुविधा / बग है और \Sक्या मुझे लगता है कि कोई एक्सटेंशन है, इसलिए शायद शीर्षक होना चाहिए GNU sed। इसके अलावा, महान कोड।
शेषमारा

@seshoumara धन्यवाद!
रिले

3

हास्केल, 139 135 बाइट्स

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()
  })
}

(120 बाइट्स के साथ पहला ड्राफ्ट)

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)
AmazingDreams

अच्छा विचार! धन्यवाद! एक और 2 चार्ट बचाया!
नूरगान

3

पायथन 2, 125 124 132 बाइट्स

-1 @TuukkaX को बाइट धन्यवाद (से अंतरिक्ष गोल्फ याद किया 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)

Ideone पर सभी परीक्षण मामले


1
आपका cटिप्पणी के रूप में उपयोग करना चाहिए , नहीं #
ओलिवर नी

@OliverNi - उह जो अपने वर्तमान रूप में कोड के लिए एक हिट था।
जोनाथन एलन

3

अजगर 2, 107 105 102 99 बाइट्स

उपरोक्त सभी परीक्षण मामलों के साथ परीक्षण किया गया

संपादित करें ने d = a.split ("|") को बदलकर 2 बाइट्स को बंद कर दिया; मैं = 0 से d, i = a.split ("|"), 0 निश्चित नहीं है कि मैं कैसे चूक गया। धन्यवाद @ ओलिवर नी

एक और 3 बाइट चली गईं। एक बार फिर धन्यवाद।

@ जोनाथन से सुझाव वास्तव में 3 बाइट्स बचाता है और इसे नीचे जादू 99 तक ले जाता है। धन्यवाद।

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
अरे @ ऑलिवरनी, गोल्फिंग सामग्री नीचे दिए जाने के लिए सुझाव देना सराहनीय है, लेकिन इस साइट ( स्रोत ) पर संपादन कोड वास्तव में उचित नहीं है , इसलिए मैंने आपका संपादन वापस कर दिया है। एक टिप्पणी के रूप में उन सुझावों को पोस्ट करने के लिए स्वतंत्र महसूस हो रहा है! मुझे यकीन है कि ओपी इसकी सराहना करेगा, लेकिन यह उनके ऊपर होना चाहिए कि वे इसका परीक्षण करें और चुनें कि क्या वे इसका उपयोग करना चाहते हैं।
DJMcMayhem

1
आप दोनों को धन्यवाद। सबसे पहले रुचि लेने के लिए @Oliver और अपने विनम्र प्रयास में सुधार करने के लिए समय और दूसरी बात DJMcMayhem को स्पष्ट करने के लिए कि मैं इस मामले को क्या मानता था लेकिन इस पर टिप्पणी करने का मौका नहीं था। ओलिवर - फिर से धन्यवाद और कृपया टिप्पणी के रूप में परिवर्तन पोस्ट करने के लिए स्वतंत्र महसूस करें ताकि मैं आपके गोल्फ अनुभव से सीख सकूं।
एलपीड्रो

1
आप आसपास के " "*iबाइट्स को ave 2 बाइट्स
Oliver Ni

1
आप len(e)पसंद करने के लिए एक चर भी सेट कर सकते हैंfor e in d:z=len(e).... एक बाइट को बचाने के लिए है क्योंकि यह प्रयोग किया जाता है दो बार
ओलिवर नी

3

05AB1E , 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काम कर सकता था।
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn चुनौती विवरण में कहा गया है कि " कोड इनपुट में केवल मुद्रण योग्य ASCII होगा, और इसमें कोई नया अंक नहीं होगा। " इसके अलावा, कोड के किस भाग को प्रतिस्थापित किया जाना चाहिए '|¶:.B?
केविन क्रूज़सेन

मैं सोच रहा था कि यह एक छोटा विभाजन होगा, लेकिन यह आपके वर्तमान कोड के साथ काम नहीं करेगा, बस इसे अंदर ले जाकर, आपको अतिरिक्त ट्रिम करना होगा। या बस .Bपूर्ववर्ती स्थानों में जोड़ने के बाद अतिरिक्त और दूसरी बार अनदेखा करें ।
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn यह वास्तव में कुछ बाइट्स को बचा सकता है, क्योंकि मेरे वर्तमान काम के आसपास बहुत लंबा है, लेकिन .Bपहले से मौजूद होने के बाद रिक्त स्थान के साथ पूर्ववर्ती स्थानों की मात्रा की गणना करना कठिन होगा ।
केविन क्रूज़सेन

1
'|¶:.BεðÜ}εD®>úsg®+©s}.BεðIJ,? 29 बाइट्स। पुनरावृति 1 :)। .Bन्यूलाइन्स पर विभाजन, जो एक ऐसी विशेषता है जिसे बहुत से लोग नहीं जानते हैं। यह एकमात्र तरीका है जिससे मैं खाली तत्वों को रखना जानता हूं। मैं इसे एक सुविधा के रूप में अनुरोध करता हूँ। विभाजित होना चाहिए, लेकिन खाली तत्वों को रखना चाहिए ..
मैजिक ऑक्टोपस Urn

2

PowerShell v2 +, 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

विम, ३ ९ ३im कीस्ट्रोक्स

DJMcMayhem के लिए -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

@DJMcMayhem धन्यवाद! मुझे विम में गोल्फ पसंद है क्योंकि मैं हमेशा एक उपकरण के बारे में कुछ सीखता हूं जो मैं हर दिन उपयोग करता हूं।
जॉर्डन

2

फ्लोरॉयड - 94 बाइट्स

Ah(a,b):c=a.fn("|");z(" "+b+"\n".y(' '*Z("".y(c[:j]))+l+" "*Z("".y(c[j+1:]))Kj,lIai(c))+' '+b)

@ जोनाथनएलन के पाइथन समाधान के समान दृष्टिकोण का उपयोग करता है ।

परीक्षण के मामलों

Call: h("a|bc|d|e|fgh|ij|k|l|mn|op", "#")
Output: 
a                #
 bc              #
   d             #
    e            #
     fgh         #
        ij       #
          k      #
           l     #
            mn   #
              op #

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;
}

एक LINQ समाधान 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

PHP, 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

MATL , 33 31 बाइट्स

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

इसे ऑनलाइन आज़माएं!

व्याख्या

बिलियन फ़ंक्शन Yd( blkdiag), जो अपने इनपुट से ब्लॉक-विकर्ण मैट्रिक्स बनाता है, अधिकांश काम करता है। मैट्रिक्स में भराव मान 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
मैं इस बात से निराश हूँ कि आपने अपना विवरण उस प्रारूप में नहीं दिया है जिसका उल्लेख ओपी ने किया है
रैंडम 832

1
@ Random832 मैं अक्सर उस प्रारूप का उपयोग नहीं करता। यह बहुत सारे स्थान का उपयोग करता है, स्पष्टीकरण के लिए बहुत कम जगह छोड़ता है
लुइस मेंडू

पहले तार में भागने की आवश्यकता क्यों है?
कॉनर ओ'ब्रायन

@ ConorO'Brien अच्छा सवाल। मैं कभी नहीं जानता कि कौन से / कब विशेष प्रतीकों को भागने की जरूरत है और कौन सी / जब नहीं। इस स्थिति में, |( इससे पहले या बाद में उपप्रकार मैच| ) को इसकी आवश्यकता होती है, कम से कम मतलाब / ऑक्टेव रेगेक्स इंजन में
लुइस मेंडू सेप

1

पायथ, 30 बाइट्स

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

या

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

दोनों पूर्ण प्रोग्राम हैं जो टिप्पणी स्ट्रिंग के एसटीडीआईएन पर इनपुट लेते हैं, और फिर प्रोग्राम स्ट्रिंग, न्यूलाइन-अलग।

पहले संस्करण को ऑनलाइन आज़माएं

ऑनलाइन दूसरे संस्करण का प्रयास करें

वे कैसे काम करते हैं

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 इस चुनौती से नया है।


Dyalog APL गैर-प्रतिस्पर्धी कैसे है? क्या यह अभी भी देव में है?
DJMcMayhem

@DJMcMayhem हाँ मैं Dyalog के लिए काम करता हूं और 15.0 रिलीज होने से पहले ही 16.0 तक पहुंच गया है। 2017.0 में रिलीज के लिए 16.0 निर्धारित है।
अड्म सिप

यह कैसे काम करता है?
कॉनर ओ'ब्रायन ने

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

Turtlèd , 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

यह TryItOnline पर परीक्षण करें

कैसे?

ṫø⁹‘‘µ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

CJam, 32 बाइट्स

l'|/_s,)L@{1$,S*\+}%@f{Se]}lN+f+

व्याख्या

l                                  get code string
 '|/                               split into code parts
    _s,)                           length of all the parts +1
        L@{1$,S*\+}%               left pad spaces to every part for the length of the previous parts
                    @f{Se]}        right pad spaces
                           lN+f+   add comment character and newline

इसे ऑनलाइन आज़माएं


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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.