एक सरल सुंदर कमेंट टूल बनाएं


14

चुनौती:

कुछ अस्की-आर्ट बनाने के लिए एक दर्द है, लेकिन कोड टिप्पणियों को पढ़ना आसान बनाता है, खासकर जब कोड घने होते हैं। चुनौती एक सरल उपकरण बनाने की है जो टिप्पणियों को तीर के साथ सरल असि-कला में परिवर्तित करता है। संशोधित करने के लिए टिप्पणियों को खाली टिप्पणियों द्वारा सीमांकित किया गया है।

उदाहरण के लिए, हास्केल टिप्पणी वाक्यविन्यास को दबाकर, इसे रूपांतरित करें:

--
-- Here's a thing
-- Here's another thing
-- The most important thing
-- *    *     *
--
f x=x+1*x*1*1*0

इसके लिए:

-- /------------< Here's a thing
-- |    /-------< Here's another thing
-- |    |     /-< The most important thing
-- |    |     |
-- v    v     v
f x=x+1*x*1*1*0

नियम:

  • आपका जवाब एक समारोह या पूर्ण कार्यक्रम हो सकता है
  • आप उस भाषा को चुन सकते हैं, जिसके साथ "-" को दो या दो से अधिक वर्णों के साथ काम करने के लिए बनाया गया है, जो किसी भाषा में एक टिप्पणी को चित्रित करते हैं
  • यदि एक और टिप्पणी प्रारूप का उपयोग करना है जिसमें शुरुआत और समाप्ति की आवश्यकता होती है, तो सुधारित वर्गों की प्रत्येक पंक्ति एक उचित टिप्पणी होनी चाहिए
  • सुधार किए जाने वाले अनुभागों को खाली टिप्पणी "\ n - \ n" द्वारा सीमांकित किया जाता है
  • नई लिंक जोड़ने के अलावा, प्रोग्राम को सीमांकित खंडों को छोड़कर किसी भी इनपुट को बदलना नहीं चाहिए
  • रिक्त स्थान के एक उचित रूप से स्वरूपित अनुभाग से पहले रिक्त स्थान की एक मनमानी संख्या से भरी टिप्पणी तुरंत आ सकती है
  • मानक खामियों को अस्वीकार कर दिया जाता है

अतिरिक्त उदाहरण:

(input)
--
--
(output)
nothing


(input)
[Code Here]
--
-- important
--    *
--
(output)
[Code Here]
--    /-< important
--    |
--    v


(input)
--
-- Do
-- Re
-- Mi
-- Fa
-- So
-- *****
--
(output)
-- /-----< Do
-- |/----< Re
-- ||/---< Mi
-- |||/--< Fa
-- ||||/-< So
-- |||||
-- vvvvv

स्कोरिंग:

  • सबसे कम बाइट्स जीतता है
  • स्पष्टीकरण या गैर-तुच्छ उदाहरण इनपुट / आउटपुट के बिना प्रस्तुतियाँ पर विचार नहीं किया जाएगा (हालांकि मैं ऐसे समय जोड़ने की अनुमति देने के लिए एक अनुग्रह अवधि छोड़ दूंगा)

2
यदि किसी टिप्पणी को परिसीमित करने के लिए केवल एक चरित्र की आवश्यकता है, तो क्या होगा?
अड्म

जब तक यह भाषा में एक मान्य टिप्पणी है, यह ठीक है
माइकल क्लेन

हम यह मान सकते हैं कि प्रत्येक टिप्पणी अनुभाग जो सुधार के अधीन है, उसमें स्थिति मार्कर तारांकन की ठीक एक पंक्ति होगी, है ना? क्या वह रेखा हमेशा अंतिम होगी?
15:09 बजे मैनटवर्क

यूप, बिल्कुल एक और हमेशा अंतिम (अंतिम परिसीमन से पहले टिप्पणी)
माइकल क्लेन

और तारांकन की राशि उस खंड में पूर्ववर्ती लाइनों की संख्या के बराबर होगी, है ना?
मैनेटवर्क

जवाबों:


4

रूबी, 160 अक्षर

->c{c.gsub(/^--$(.+?)^--$/m){*t,a=$&.lines[1..-2]
a&&a.chop!&&(t.map{|l|a[?*]=?/
l[0,2]=a.gsub(/(?<=\/).*/){?-*$&.size}+'-<'
a[?/]=?|
l}<<a+$/+a.tr(?|,?v))*''}}

नमूना रन:

2.1.5 :001 > puts ->c{c.gsub(/^--$(.+?)^--$/m){*t,a=$&.lines[1..-2];a&&a.chop!&&(t.map{|l|a[?*]=?/;l[0,2]=a.gsub(/(?<=\/).*/){?-*$&.size}+'-<';a[?/]=?|;l}<<a+$/+a.tr(?|,?v))*''}}["
2.1.5 :002"> --
2.1.5 :003"> -- Here's a thing
2.1.5 :004"> -- Here's another thing
2.1.5 :005"> -- The most important thing
2.1.5 :006"> -- *    *     *
2.1.5 :007"> --
2.1.5 :008"> f x=x+1*x*1*1*0
2.1.5 :009"> "]

-- /------------< Here's a thing
-- |    /-------< Here's another thing
-- |    |     /-< The most important thing
-- |    |     |
-- v    v     v
f x=x+1*x*1*1*0
 => nil 

संक्षिप्त विवरण:

.lines splits the section to array items ─────────╮
                                                  ▽

.gsub extracts ⎧   --                             0         
these sections ⎪   -- Here's a thing              1   t[0]   
for processing ⎨   -- Here's another thing        2   t[1]   
and replaces   ⎪   -- The most important thing    ⋮   t[2]   
them with the  ⎪   -- *    *     *               -2   a      
pretty version ⎩   --                            -1          
rest untouched —   f x=x+1*x*1*1*0
                                                      △
only the needed lines get into variables ─────────────╯



a = "-- *    *     *" + "-<"           inside .gsub's block
        ↓↓                             the first 2 characters
t[0] = "-- Here's a thing"             of t's each item are
t[1] = "-- Here's another thing"       replaced with a's value
t[2] = "-- The most important thing"   and the the separator



not only t's items are transformed inside .gsub's block,
but a's value also gets changed in multiple small steps

                       change a's value    change the value    change a's value
   a's initial value   before insertion   being inserted now   after insertion
   ╭───────────────╮   ╭───────────────╮   ╭───────────────╮   ╭───────────────╮

0  "-- *    *     *" → "-- /    *     *" → "-- /-----------" → "-- |    *     *"
1  "-- |    *     *" → "-- |    /     *" → "-- |    /------" → "-- |    |     *"
2  "-- |    |     *" → "-- |    |     /" → "-- |    |     /" → "-- |    |     |"

                       ╰───────────────╯   ╰───────────────╯   ╰───────────────╯
                      change first * to /  change everything  change first / to |
                                          after / with string
                                          of - of same length

5

जावास्क्रिप्ट (ईएस 6), 418 , 237 , 233 , 236 बाइट्स

f=(s)=>(d='\n//',s.split(d+'\n').map((x,y)=>y%2?'//'+(l=x.slice(2).split(d),t=l.pop().split('*'),l.map((i,j)=>t.map((k,m)=>m==j?k+'/':m<j?k+'|':k.replace(/ /g,'-')+'-').join('')+'<'+i).join(d)+d+t.join('|')+d+t.join('v')):x).join('\n'))

वाह, यह CG पर मेरा पहला सबमिशन है। लगता है, मुझे लगता है कि वाशिंगटन के गुएड्स से बिल्कुल अलग तरह का व्यवहार। अपने पहले पास की तुलना में 54 बाइट्स तक कम। हाथ से यह सब कम करना भीषण था। मेरा एक पछतावा अभी तक लूप को खत्म नहीं कर पा रहा है, जो मुझे वापसी में कटौती करने देगा।

अन्य उत्तरों के एक जोड़े से आंशिक प्रेरणा लेते हुए, कुल फिर से लिखना। मुझे नक़्शे में पूरी चीज़ बंद करने को मिली, जिससे वापसी बेहतर हुई। कोड स्निपेट में टिप्पणी संस्करण शामिल है।

कुछ और बाइट्स ले लिया, और उदाहरण खुद पर काम किया। (आपको एक बड़े मॉनीटर की आवश्यकता है।) :)

कल्पना में एक पूरा पत्र भूल गए! सौभाग्य से, प्रमुख '<' को जोड़ना एक छोटा, तुच्छ निर्धारण था।


3

पायथन 2, 299 बाइट्स

इनपुट में एक अनुगामी न्यूलाइन की अपेक्षा करता है

i=input().split('--\n')
a=0
for j in i:
 a+=1
 if a%2:print j,;continue
 if''==j:continue
 l=j.split('\n');n=l[-2];r=l[:-2];R=[n.replace('*','v'),n.replace('*','|')];L=R[1]
 for x in range(len(l)-2)[::-1]:L=L[:L.rfind('|')]+'/';R+=[L.ljust(n.rfind('*')+2,'-')+'< '+r[x][3:]]
 print'\n'.join(R[::-1])

स्पष्टीकरण / उदाहरण

इनपुट:

[Code Here]
--
-- important
--    *
--

द्वारा इनपुट विभाजित करता है --\n। हर दूसरी स्ट्रिंग एक सीमांकित टिप्पणी ब्लॉक है।

['[Code Here]\n',
'-- important\n-- stuff\n--    *  *\n',
'']

प्रत्येक तार के माध्यम से चलता है। यदि स्ट्रिंग टिप्पणी नहीं है, तो बस स्ट्रिंग को प्रिंट करता है। अन्यथा:

टिप्पणी ब्लॉक में प्रत्येक पंक्ति को विभाजित करता है।

['-- important', '-- stuff', '--    *  *', '']

की लाइनों की जगह से नीचे दो लाइनें बनाता है *के साथ vऔर |

['--    v  v', '--    |  |']

टिप्पणियों की प्रत्येक पंक्ति के लिए (पीछे की तरफ) सबसे दाहिने कॉलम को निकालें, टिप्पणी के /साथ पैड , जोड़ें -और जोड़ें।

'--    |  /'
'--    /'
'--    /----< important'

सब कुछ छापो

--    /----< important
--    |  /-< stuff
--    |  |
--    v  v

कम गोल्फ वाला:

i=input().split('--\n')
a=0
for j in i:
 a+=1
 if a%2:print j,;continue # Not commment
 if''==j:continue # Empty comment
 l=j.split('\n') # Split comment into lines
 r=l[:-2]
 # Replace line of *s with v and | respectively
 R=[l[-2].replace('*','v'),l[-2].replace('*','|')]
 L=R[1][3:] # line of |
 for x in range(len(l)-2)[::-1]: # For each comment line
  L=L[:L.rfind('|')]+'/' #Remove rightmost column
  # Add a line with '-- ',columns, and comment
  R+=['-- '+L.ljust(n.rfind('*')-1,'-')+'< '+r[x][3:]]
 print'\n'.join(R[::-1]) #Print all comment lines

1

जावास्क्रिप्ट (ईएस 6), 253

एक अनाम फ़ंक्शन के रूप में, कोड के साथ एक स्ट्रिंग पैरामीटर के रूप में प्रारूपित करने और स्वरूपित कोड को वापस करने के लिए।

टिप्पणियाँ

  1. मार्कर टिप्पणियों की जोड़ी को सही पाठ (टिप्पणी लाइनों, फिर सितारों) को जोड़ना होगा
  2. ... या जोड़ी को कुछ भी नहीं करना चाहिए (अतिरिक्त उदाहरण 1)
t=>(t=t.split`
`,t.map((r,i)=>r=='--'?(c++&&l.map((r,j)=>(p+=q[j],z+=~q[j].length,t[i-n+j]=p+`/${'-'.repeat(z+1)}<`+r.slice(3),p+=`|`),q=l.pop(c=p=``)||p,z=q.length,q=q.split`*`,t[i]=p+q.join`v`,t[i-1]=p+q.join`|`),l=[]):n=l.push(r),c=0,l=[]),t.join`
`)

कम गोल्फ वाला

f=t=>{
  t = t.split`\n`; // string to array of lines
  l = []; // special coment text
  c = 0; // counter of marker comment '--'
  t.forEach((r,i)=>{ // for each line of t - r: current line, i: index
    if (r == '--') // if marker comment
    {
       ++ c; // increment marker counter
       if (c > 1) // this is a closing marker
       {
          c = 0; // reset marker counter
          if (n > 0) // n is the length of array l
             q = l.pop(); // get last line from l, have to be the star line
          else
             q = ''; // no text comment, no star line 
          p = '';  // prefix for drawing the tree
          z = q.length; // length of star line, used to draw the tree horiz lines
          q = q.split('*'); // split to get star count and position
          // each element in q is the spaces between stars
          // modifiy the current and previous text line 
          t[i] = p + q.join`v`; // current row was '--', becomes the V line
          t[i-1] = p + q.join`|`; // previous row was the star line, becomes the last tree line
          l.forEach((r,j)=>{ // for each line in l, r: current line, j: index
             // each line in tree is: prefix("-- |  |"...) + ... "---< " + text
             p = p + q[j]; // adjust prefix
             z = z - q[j].length - 1 // adjust length of '---'
             // modify text in t
             t[i-n+j] = p // prefix
                + '/' + '-'.repeat(z+1) + '<'  // horiz line and <
                + r.slice(3); // text, removed '-- '
             p = p + '|'; // add vertical bar to prefix
          });
       } // end if closing comment
       l = []; // reset l
    }  
    else // not a special comment marker
       n = l.push(r) // add current line to l, set n to array size
  });
  return t.join`\n` // join to a single string
}

परीक्षा


यह बिना अनियमित किए क्रोम 47 पर मेरे लिए दूसरी टिप्पणी ब्लॉक को याद करता है। इसके अलावा, बकवास, मैंने पहले नहीं देखा था कि आप किसी भी भाषा के साथ किसी भी टिप्पणी वाक्यविन्यास का उपयोग कर सकते हैं
एम्मेट आर।

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