टिप्पणियों को मेरे गूढ़ कोड से निकाल दें


30

इस सप्ताह की शुरुआत में, हमने टिप्पणी करने के लिए गूढ़ भाषाओं को प्रारूपित करने के बारे में सीखा । आज, हम इसका उलटा करने जा रहे हैं। मुझे आपको एक प्रोग्राम या फ़ंक्शन लिखने की ज़रूरत है जो कुछ अच्छी तरह से टिप्पणी किए गए गूढ़ कोड को पार्स करता है और टिप्पणियों को पूरी तरह से पार्स करता है, बस कोड को वापस करता है। पिछली चुनौती से कुछ उदाहरणों का उपयोग करते हुए, यहाँ पर अच्छी तरह से टिप्पणी की गई कोड की तरह दिखता है:

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

फिर, प्रत्येक रेखा को एक पंक्ति में ऊपर की ओर ढहें। उदाहरण के लिए, चूंकि bलाइन दो पर दूसरे कॉलम में है, एक बार जब हम इसे ढहाते हैं, तो यह लाइन एक पर दूसरे कॉलम में होगा । इसी तरह, cलाइन एक के तीसरे कॉलम में dडाला जाएगा , और चौथे पर रखा जाएगा। हर चरित्र के लिए इसे दोहराएं, और आपको यह मिलता है:

abcdefghijklmnop

महत्वपूर्ण नोट: ऐसा लगता है कि तुच्छ समाधान केवल टिप्पणियों को हटाने, हर स्थान को हटाने और हर पंक्ति में शामिल होने के लिए है। यह एक वैध दृष्टिकोण नहीं है! क्योंकि मूल कोड में स्थान हो सकता है, ये इस दृष्टिकोण से अलग हो जाएंगे। उदाहरण के लिए, यह पूरी तरह से मान्य इनपुट है:

hello         #Line one
              #Line two
       world! #Line three

और संबंधित आउटपुट होना चाहिए:

hello  world!

चुनौती:

एक प्रोग्राम या फ़ंक्शन लिखिए जो टिप्पणी कोड को इनपुट के रूप में लेता है, और आउटपुट या कोड को सभी टिप्पणियों से वापस लौटा देता है। आपको किसी भी अनुगामी रिक्त स्थान के बिना कोड का उत्पादन करना चाहिए , हालांकि एक अनुगामी न्यूलाइन अनुमेय है। टिप्पणी चरित्र हमेशा रहेगा #, और टिप्पणी शुरू होने से पहले हमेशा एक अतिरिक्त स्थान होगा। #होगा नहीं इनपुट की टिप्पणी अनुभाग में दिखाई देते हैं। चुनौती को सरल रखने के लिए, यहां कुछ इनपुट दिए गए हैं जिन्हें आपको संभालना नहीं है:

  • आप मान सकते हैं कि कोड में एक ही कॉलम में दो वर्ण नहीं होंगे। उदाहरण के लिए, यह एक इनपुट है जो इस नियम का उल्लंघन करता है:

    a  #A character in column one
    bc #Characters in columns one and two
    
  • आप यह भी मान सकते हैं कि सभी टिप्पणी वर्ण एक ही कॉलम में दिखाई देते हैं। उदाहरण के लिए, यह इनपुट:

    short       #this is a short line
          long        #This is a long line
    

    इस नियम का उल्लंघन करता है। इसका मतलब यह भी है कि #कोड सेक्शन में नहीं होगा।

  • और अंत में, आपको प्रमुख या अनुगामी स्थानों के साथ कोड अनुभागों को संभालने की आवश्यकता नहीं है। उदाहरण के लिए,

      Hello,          #
             World!   #
    

आप यह भी मान सकते हैं कि इनपुट में केवल मुद्रण योग्य ASCII वर्ण हैं।

उदाहरण:

Input:
hello         #Line one
              #Line two
       world! #Line three

Output:
hello  world!

Input:
E                                                   #This comment intentionally left blank
 ac                                                 #
   h s                                              #
      ecti                                          #
          on is                                     #
                one c                               #
                     haracte                        #
                            r longer                #
                                     than the       #
                                              last! #

Output:
Each section is one character longer than the last!

Input:
4          #This number is 7
 8         #
  15       #That last comment is wrong.
    16     #
      23   #
        42 #

Output:
4815162342

Input:
Hello                     #Comment 1
      world               #Comment 2
           ,              #Comment 3
             how          #Comment 4
                 are      #Comment 5
                     you? #Comment 6

Output:
Hello world, how are you?

Input:
Prepare                               #
        for...                        #
                        extra spaces! #

Output:
Prepare for...          extra spaces!

आप जो भी उचित प्रारूप पसंद करते हैं उसमें इनपुट ले सकते हैं, उदाहरण के लिए, स्ट्रिंग्स की एक सूची, न्यूलाइन के साथ एक स्ट्रिंग, पात्रों की 2 डी सूची, आदि। बाइट्स जीत में सबसे छोटा उत्तर!


क्या हमें अगले से कम वर्ण वाले कोड स्वीकार करने की आवश्यकता होगी ?
wizzwizz4

क्या आप रिक्त स्थान के साथ सिर्फ दो स्थानों (जैसे hello world!आपने दिखाया है) के साथ परीक्षण मामले को जोड़ सकते हैं ? इसके अलावा, आप बताते हैं: " #इनपुट के टिप्पणी अनुभाग में दिखाई नहीं देगा। ", लेकिन क्या यह कोड-स्निपेट में ही हो सकता है?
केविन क्रूजसेन

@KevinCruijssen मेरे संपादन देखें
DJMcMayhem

@ wizzwizz4 मुझे यकीन है कि अगर मैं अपने प्रश्न समझ में नहीं कर रहा हूँ
DJMcMayhem

@DJMcMayhem उदाहरण: तब do {stuff} while (condition);क्रम में स्पष्टीकरण के साथ । do while (condition); #Explainything{stuff} #Explainything
wizzwizz4

जवाबों:


18

जेली , 8 7 बाइट्स

»/ṣ”#ḢṖ

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

यह काम किस प्रकार करता है

»/ṣ”#ḢṖ  Main link. Argument: A (array of strings)

»/       Reduce the columns of A by maximum.
         Since the space is the lowest printable ASCII characters, this returns the
         non-space character (if any) of each column.
  ṣ”#    Split the result at occurrences of '#'.
     Ḣ   Head; extract the first chunk, i.e., everything before the (first) '#'.
      Ṗ  Pop; remove the trailing space.

2
वह तो बस ... वाह।
जोनाथन एलन

3
मैं अभी जेली हूं।
मंकीज़े

आप इसे अपने फोन में कैसे हैक करते हैं?
सिंबाबेक

2
@ सिम्बैब पेशेंट और बहुत सारी कॉपी-पेस्टिंग।
डेनिस

मैं हमेशा एक 9-लोहे का उपयोग कर रहा हूं, शायद यह समय है जब मैंने सीखा है कि हरे रंग पर एक पुटर का उपयोग कैसे किया जाता है ...
मैजिक ऑक्टोपस उर

13

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

lambda x:`map(max,*x)`[2::5].split(' #')[0]

5 बाइट बंद करने के लिए @xnor को धन्यवाद!

Ideone पर इसका परीक्षण करें ।


1
मुझे लगता है कि आप सिर्फ map(max,*x)इसलिए कर सकते हैं क्योंकि maxकोई भी तर्क देता है और Noneछोटा होता है।
xnor

ठीक है, मैं हमेशा भूल mapजाता हूँ कि इस तरह इस्तेमाल किया जा सकता है ... धन्यवाद!
डेनिस

1
`...`[2::5]चाल कैसे काम करती है?
6

1
@smls `...`के बराबर है repr(...), इसलिए सिंगलटन स्ट्रिंग्स की सूची के लिए ['a', 'b', 'c'], आपको स्ट्रिंग मिलती है "['a', 'b', 'c']"। अंत में, [2::5]पहले दो वर्णों को काटता है ( "['") और शेष स्ट्रिंग के हर पांचवें वर्ण को लेता है।
डेनिस

5

जावास्क्रिप्ट (ईएस 6), 97 75 60 बाइट्स

22 बाइट से गोल्फ की मदद करने के लिए @ निएल को धन्यवाद

a=>a.reduce((p,c)=>p.replace(/ /g,(m,o)=>c[o])).split` #`[0]

इनपुट लाइनों की एक सरणी है।

  • a सरणी इनपुट है
  • p पिछला आइटम है
  • c वर्तमान आइटम है
  • m मैच स्ट्रिंग है
  • o ऑफसेट है

मैं 96 बाइट्स गिनता हूं? इसके अलावा, mregexp ध्वज अनावश्यक है (क्या आपके पास $एक बिंदु पर है?) जैसा कि अंतरिक्ष में है (p, c)। अंत में, मुझे लगता है कि replaceइससे कम काम करेगा [...p].map().join
नील

मेरे लिए 97, दोनों मैनुअल lengthऔर यूटरस्क्रिप्ट से, हो सकता है कि आपने न्यूलाइन की गिनती न की हो, लेकिन केवल इसलिए कि मैंने गलती से अर्धविराम शामिल किया
ASCII-only

अब मैं देखता हूं - मैंने वह नकल नहीं की है ;जिसकी आवश्यकता नहीं है (जावास्क्रिप्ट में एएसआई है)।
नील

हाँ, क्षमा करें, मेरे पास यह सुनिश्चित करने के लिए था कि क्रोमियम कंसोल फ़ंक्शन बॉडी के बाहर फ़ंक्शन कॉल करता है (यह एक बार बुरी तरह से लिखे गए लैम्ब्डा पर है)
ASCII-only

अरे वाह, मुझे एहसास नहीं था कि यह replaceबहुत मदद करेगा, यह वास्तव में साफ है!
नील

4

पर्ल, 35 34 32 बाइट्स

के लिए +1 शामिल है -p

STDIN पर इनपुट दें

eso.pl

#!/usr/bin/perl -p
y/ /\0/;/.#/;$\|=$`}{$\=~y;\0; 

ध्यान दें कि फाइनल के बाद एक जगह है ;। कोड दिखाए गए अनुसार काम करता है, लेकिन \0दावा किए गए स्कोर को प्राप्त करने के लिए शाब्दिक चरित्र द्वारा प्रतिस्थापित किया जाता है।


बहुत अच्छा कोड। यह $a|=...अच्छी तरह से किया जाता है, मुझे यह पता लगाने में थोड़ा समय लगा कि आप क्या कर रहे थे! हालांकि एक सवाल: *_=aऐसा लगता है कि लगभग बराबर है $_=$a, ऐसा क्यों है?
दादा

*_=aएक बहुत अस्पष्ट ग्लोब असाइनमेंट है जो _ग्लोबल्स और ग्लोबल्स को उपनाम देता है a। तो यह इतना एक प्रति से नहीं है $aकरने के लिए $_, लेकिन (वैश्विक) उस बिंदु से $aऔर $_वास्तव में एक ही चर रहे हैं। 1 बाइट को बचाने के लिए सभी ...
टन हास्पेल

ठीक है, स्पष्टीकरण के लिए धन्यवाद! (और `$ \` के लिए अच्छा सुधार)
दादा

3

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

def f(x,o=""):
 l=[i[:i.index("#")-1]for i in x]
 for n in range(len(l[0])):
  c=[x[n]for x in l]
  if sum([1for x in c if x!=" "])<1:o+=" "
  else:o+=[x for x in c if x!=" "][0]
 print o

मैं गोल्फ जा रहा हूँ यह कल मेरे पास स्कूल है;)


1 forको कम किया जा सकता है 1for। इसके अलावा, यदि सूची का योग (पंक्ति 5 पर) ऋणात्मक नहीं हो सकता है, तो आप <1इसके बदले सिर्फ जांच कर सकते हैं ==0। हैप्पी स्कूल डे! : डी +1।
यति


2

CJam , 12 बाइट्स

2 बाइट बचाने के लिए Sp3000 के लिए धन्यवाद।

{:.e>_'##(<}

एक अनाम ब्लॉक जो स्ट्रिंग्स की एक सूची लेता है (प्रत्येक पंक्ति के लिए एक) और इसे एक स्ट्रिंग के साथ बदल देता है।

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

व्याख्या

:.e>  e# Reduce the list of strings by elementwise maximum. This keeps non-spaces in
      e# favour of spaces. It'll also wreak havoc with the comments, but we'll discard
      e# those anyway.
_'##  e# Duplicate and find the index of '#'.
(<    e# Decrement that index and truncate the string to this length.

2

जे, 30 बाइट्स

(#~[:<./\'#'~:])@(>./&.(3&u:))

इनपुट के रूप में स्ट्रिंग्स की एक सूची लेता है। मूल रूप से अपने जेली उत्तर में डेनिस के समान दृष्टिकोण का उपयोग करता है।

टिप्पणी की और समझाया

ord =: 3 & u:
under =: &.
max =: >./
over =: @
maxes =: max under ord
neq =: ~:
arg =: ]
runningMin =: <./\
magic =: #~ [: runningMin ('#' neq arg)

f =: magic over maxes

मध्यवर्ती चरण:

   p
Hello                     #Comment 1
      world               #Comment 2
           ,              #Comment 3
             how          #Comment 4
                 are      #Comment 5
                     you? #Comment 6
   maxes p
Hello world, how are you? #Comment 6
   magic
#~ ([: runningMin '#' neq arg)
   3 neq 4
1
   '#' neq '~'
1
   '#' neq '#'
0
   '#' neq maxes p
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
   runningMin 5 4 2 5 9 0 _3 4 _10
5 4 2 2 2 0 _3 _3 _10
   runningMin '#' neq maxes p
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
   0 1 0 1 1 0 # 'abcdef'
bde
   'abcdef' #~ 0 1 0 1 1 0
bde
   (maxes p) #~ runningMin '#' neq maxes p
Hello world, how are you? 
   (#~ [: runningMin '#' neq arg) maxes p
Hello world, how are you? 
   ((#~ [: runningMin '#' neq arg) over maxes) p
Hello world, how are you? 
   (magic over maxes) p
Hello world, how are you? 

परीक्षण का मामला

   f =: (#~[:<./\'#'~:])@(>./&.(3&u:))
   a
Hello                     #Comment 1
      world               #Comment 2
           ,              #Comment 3
             how          #Comment 4
                 are      #Comment 5
                     you? #Comment 6
   $a
6 36
   f a
Hello world, how are you?

2

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

a=>a.reduce((p,c)=>p+/(.+?)\s+#/.exec(c)[1].slice(p.length),'')

स्ट्रिंग के एक सरणी के रूप में इनपुट लेता है।

F=a=>a.reduce((p,c)=>p+/(.+?)\s+#/.exec(c)[1].slice(p.length),'')

input.oninput = update;
update();

function update() {
  try {
    output.innerHTML = F(input.value.trim().split`
`);
  } catch(e) {
    output.innerHTML = 'ERROR: INVALID INPUT';
  }
}
textarea {
  width: 100%;
  box-sizing: border-box;
  font-family: monospace;
}
<h2>Input:</h2>
<textarea id="input" rows="8">
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
</textarea>
<hr />
<h2>Output:</h2>
<pre id="output">
</pre>




1

सी # 157 122 बाइट्स

@Milk के लिए गोल्फ बाइट्स 35 धन्यवाद - हालांकि मैं कसम खाता हूं कि मैंने पहले कोशिश की थी।

इनपुट को वर्णों के 2-d सरणी के रूप में लेता है।

string f(char[][]s){int i=0;foreach(var x in s)for(i=0;x[i]!=35;i++)if(x[i]!=32)s[0][i]=x[i];return new string(s[0],0,i);}

157 बाइट्स:

string g(char[][]s){var o=new char[s[0].Length];foreach(var x in s)for(int i=0;x[i]!=35;i++)if(x[i]!=32|o[i]<1)o[i]=x[i];return new string(o).TrimEnd('\0');}

के Trim()बजाय काम नहीं करना चाहिए TrimEnd()? इससे भी बेहतर, मुझे लगता है कि आप आउटपुट संस्करण के रूप में s [0] का उपयोग करके बहुत सारे बाइट्स बचा सकते हैं और अंतिम कोड चरित्र का सूचकांक return new string(s[0],0,i)कहां iहै। इस विचार के forबदले दो छोरों की आवश्यकता हो सकती है foreach, मैं इसके बारे में अधिक सोचूंगा और आज बाद में वास्तविक कोड लिखने का प्रयास करूंगा।
दूध

Trim()शुरू से ही ट्रिम होगा, जो मुझे लगता है कि मान्य नहीं होगा। मैं मूल रूप से एस [0] में लोडिंग कर रहा था और मेरे पास i;लूप के बाहर इंट (वापसी में इसे पुन: उपयोग करने के लिए) था, जो मुझे लगता है कि अंततः बाइट्स
जोड़ते हैं

1

अजगर, 11 बाइट्स

PhceCSMCQ\#

एक प्रोग्राम जो STDIN पर स्ट्रिंग की सूची का इनपुट लेता है और एक स्ट्रिंग प्रिंट करता है।

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

यह काम किस प्रकार करता है

PhceCSMCQ\#  Program. Input: Q
       CQ    Transpose Q
     SM      Sort each element of that lexicographically
    C        Transpose that
   e         Yield the last element of that, giving the program ending with ' #' and some
             parts of the comments
  c      \#  Split that on the character '#'
 h           Yield the first element of that, giving the program with a trailing space
P            All but the last element of that, removing the trailing space
             Implicitly print

1

sed, 126 बाइट्स

:a;N;$!ba;s,#[^\n]*\n,#,g;s,^,#,;:;/#[^ ]/{/^# /s,^# *,,;t;H;s,#.,#,g}
t;/#[^ ]/!{H;s,#.,#,g};t;g;s,\n#(.)[^\n]*,\1,g;s,...$,,

इनपुट के अंत में एक नई पंक्ति की आवश्यकता है।
मुझे यकीन है कि मैं इसे थोड़ा और गोल्फ कर सकता हूं, लेकिन मुझे खुशी है कि यह अभी के लिए काम करता है।



0

जेली , 27 बाइट्स

żḟ€” ;€” Ḣ€
i€”#’©ḣ@"ç/ḣ®ṪṖ

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

सख्त युक्ति का उपयोग करता है - एक बाइट की कीमत पर टिप्पणी चरित्र को हटाने से पहले अतिरिक्त स्थान।

इनपुट स्ट्रिंग्स की एक सूची है।


@ ए गोल्फर के लिए - शायद ऐसा है, लेकिन क्या आपने मुझे यहां दिए गए क्रशिंग को देखा है ?
जोनाथन एलन

0

रूबी, 77 बाइट्स

puts File.readlines("stack.txt").join('').gsub(/\s{1}#.*\n/,'').gsub(/\s/,'')

किसी इनपुट फ़ाइल का हार्डकॉन्ड करना इनपुट का स्वीकार्य तरीका नहीं है।
Mego

@Mego, मुझे "स्वीकार्य" क्या नियम मिल सकते हैं?
अग्रेषित करना


0

TSQL, 216 175 बाइट्स

golfed:

DECLARE @ varchar(max)=
'hello         #Line one
              #Line two
       world! #Line three'

DECLARE @i INT=1,@j INT=0WHILE @i<LEN(@)SELECT @=stuff(@,@j+1,len(x),x),@j=iif(x=char(10),0,@j+1),@i+=1FROM(SELECT ltrim(substring(@,@i,1))x)x PRINT LEFT(@,patindex('%_#%',@))

Ungolfed:

DECLARE @ varchar(max)=
'hello         #Line one
              #Line two
       world! #Line three'

DECLARE @i INT=1,@j INT=0
WHILE @i<LEN(@)
  SELECT @=stuff(@,@j+1,len(x),x),@j=iif(x=char(10),0,@j+1),@i+=1
  FROM(SELECT ltrim(substring(@,@i,1))x)x
PRINT LEFT(@,patindex('%_#%',@))

बेला


0

जावास्क्रिप्ट, 56 34 बाइट्स, गैर-प्रतिस्पर्धात्मक

q=>q.split(/\n/).map(x=>/ (.?) #./.exec(x)[1]).join()

q=>q.replace(/^ *| *#.*$\n?/gm,'')

जैसा कि @ ǹ̷̰ĥ̷̳h @a̷̭̿h̸̡̅ẗ̵̨́d̴̖̋ ने बताया, मैं अतिरिक्त स्थानों के लिए तैयार नहीं हूं


"अतिरिक्त रिक्त स्थान के लिए तैयारी" मामले को पास नहीं करता है
ñ̷͉h̷̭̿a̸̡̅ẗ̵̨́h̷̰̀ĥ̷̳d

0

दिल्लोग एपीएल , 22 बाइट्स

प्रेरणा

(⎕UCS¯2↓⍳∘35↑⊢)⌈⌿∘⎕UCS

(

⎕UCS चरित्र का प्रतिनिधित्व

¯2↓ सभी लेकिन अंतिम दो के

⍳∘35↑ पहले 35 ("#") की स्थिति तक, उस में जो कोष्ठक के बाहर है, से लिया गया है

जो कोष्ठक के बाहर है

) जैसे कि ...

⌈⌿ स्तंभ अधिकतम

का

⎕UCS यूनिकोड मान

TryAPL ऑनलाइन!


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