सीआर और एलएफ को शाब्दिक रूप से लें


22

अच्छे पुराने नोटपैड के उत्सव के रूप में , हम गाड़ी के रिटर्न और लाइन फीड का इलाज करने जा रहे हैं, जैसा कि वे मूल रूप से थे, बजाय इसके कि वे क्या कर रहे हैं (ab-) आज के लिए उपयोग किया जाता है।

(; वामो; esc ␊ प्रिंट योग्य ASCII प्लस लाइन फ़ीड से मिलकर एक स्ट्रिंग को देखते हुए \n, हेक्स 0A; dec 10) और कैरिएज रिटर्न (␍; सीआर; esc \r; हेक्स 0D; dec 13), कारण इसे ऑनलाइन आज़माएं कैसे प्रिंट करने योग्य पात्रों को दिखाने के लिए तैनात किया जाएगा यदि एक प्रिंटर जो उन दो नियंत्रण वर्ण सचमुच लेता है पर मुद्रित:

  1. एक पंक्ति फ़ीड पर, एक पंक्ति को और नीचे प्रिंट करना जारी रखें
  2. गाड़ी वापसी पर बाएं किनारे से छपाई जारी रखें
  3. कई लगातार कैरिज रिटर्न एक एकल कैरिज रिटर्न की तरह व्यवहार करते हैं

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

श्वेत स्थान के अतिरिक्त किसी भी राशि को स्वीकार्य है, किसी भी रेखा के दाईं ओर और संपूर्ण पाठ के नीचे, जब तक कि इनपुट में दिए गए कम से कम सफेद स्थान की मात्रा संरक्षित है।

उदाहरण (का उपयोग करते हुए \nऔर \rलाइन फ़ीड और गाड़ी वापसी के लिए)

Lorem ipsum dolor sit amet,

Lorem ipsum dolor sit amet,

consectetur adipiscing\nelit, sed

consectetur adipiscing
                      elit, sed

do eiusmod\r\ntempor incididunt\n\n ut labore

do eiusmod
tempor incididunt

                  ut labore

et dolore\n\rmagna \r\r\naliqua. Ut (अनुगामी रिक्त स्थान पर ध्यान दें)

et dolore
magna          
aliqua. Ut

\nenim ad minim veniam,\n\r quis nostrud

एडिम मिनिमम वेनियम,
     quis nostrud

\rexercitation\r\n\rullamco laboris\n\r\nnisi ut aliquip ex\n\n\rea commodo consequat.\n\n

मश्क
लम्को श्रमिक

nisi ut ali अलीप पूर्व

ईए कोडो परिणाम।



28
सुझाए गए जवाब: नोटपैड, 179,712 बाइट्स
लीख

3
@ नोट: | नोटपैड टीसी नहीं है
एएससीआईआई-केवल

2
शर्म की बात है कि TIO एक उचित टर्मिनल का उपयोग नहीं करता है, अन्यथा एक अच्छा शेल विजेता होगा stty -onlcr;cat
टोबे स्पाइट

1
मुझे TIO के "इनपुट" क्षेत्र में गाड़ी-वापसी के पात्रों में प्रवेश करने में परेशानी हो रही है। वे बस लगता है कि (या newlines में परिवर्तित) जब चिपकाया - गलती पर मेरे ब्राउज़र है, या यह TIO है?
टोबे स्पाइट

2
@ Ado TIO की तुलना में सभी आउटपुट को प्रतिबंधित न करें। इसके बजाय कार्यक्रमों को कुछ टर्मिनल प्रकारों का उपयोग करने के लिए, या आउटपुट फ़ाइल करने के लिए प्रतिबंधित करें। या आवश्यकता है कि आउटपुट में नई लाइनों पर पाठ से पहले आवश्यक स्थान हैं।
mbomb007

जवाबों:


6

चारकोल , 10 बाइट्स

UTFθ«ι≡ι⸿↑

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

UT

राइट पैडिंग अक्षम करें।

Fθ«

इनपुट पर लूप।

ι

वर्तमान वर्ण मुद्रित करें। यह स्वचालित रूप से संभालता है \n(जो चारकोल \vइस संदर्भ में व्यवहार करता है) लेकिन चारकोल में अनुवाद \rकरता है \r\n, इसलिए ...

≡ι⸿

... के लिए जाँच करें \r...

... और यदि ऐसा है तो एक पंक्ति में वापस जाएँ।


क्या आपको lअपने TIO लिंक से ध्वज नहीं निकालना चाहिए ?
एडम

@ Adám मुझे अपने जवाब में किसी भी गिब्रिश को चिपकाने से रोकना है और फिर एक सबपॉप्टिमल प्रोग्राम से जोड़ना है?
नील

समझा। हो सकता है कि चारकोल को TIO लिंक को stderr (डिबग) में आउटपुट करना चाहिए?
एडम

@ Adám मैं सुझाव दूंगा कि @ ASCII- को ही।
नील

@ नील तय है, मुझे लगता है?
केवल

5

रूबी , 24 17 बाइट्स

->s{s.tr $/,"\v"}

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

यह TIO पर काम नहीं करता है, लेकिन लिनक्स कंसोल पर काम करता है।


आप tr "मेरे विचार से अंतरिक्ष को गिरा सकते हैं ।
केविन क्रूज़सेन

उह, मैं इस समाधान के बारे में सोच नहीं है, यह हो सकता है तो बस किसी भी भाषा सब बदलने के लिए के लिए काम करते \nमें रों \vजब एक लिनक्स कंसोल में चलाते हैं।
Adám

@ Adám कुछ भाषाओं के बारे में क्या कुछ नहीं बदलता है और एक डॉस कंसोल में काम करता है?
tsh

मुझे मध्य-चुनौती को बदलने के लिए खेद है, लेकिन चुनौती को अधिक तुच्छ उत्तरों के लिए अधिक रोचक और कम विषय बनाने के लिए, मुझे अब TIO पर उचित आउटपुट की आवश्यकता है ।
अड्म

5
युक्ति बदलना: मुझे नहीं लगता कि यह उचित है। लेकिन मुझे अपना उत्तर डिलीट करना पड़ेगा यदि मुझे करना है।
जीबी

4

जावा 10, 211 207 206 बाइट्स

s->{var a=s.replace("\r\n","\n\r").split("(?<=\n)");int i=0,p=0,j;for(var x:a){for(j=x.charAt(0)<14?0:p;j-->0;x=" "+x);j=(a[i++]=x.replace("\r","")).length()-1;p=x.matches("\\s+")?p:j;}return"".join("",a);}

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

स्पष्टीकरण:

s->{                      // Method with String as both parameter and return-type
  var a=s.replace("\r\n","\n\r")
                          //  Replace all "\r\n" with "\n\r"
        .split("(?<=\n)");//  Create String-array split by "\n",
                          //  without removing the trailing "\n" delimiter
  int i=0,                //  Index integer
      p=0,                //  Previous line-length, starting at 0
      j;                  //  Temp integer
  for(var x:a){           //  Loop over the String-array
    for(j=x.charAt(0)<14?0//   If the current line starts with either '\r' or '\n':
        0                 //    Prepend no spaces
       :                  //   Else:
        p;j-->0;x=" "+x); //    Prepand `p` amount of spaces for the current item
    j=(a[i++]=x.replace("\r",""))
                          //   Remove all "\r" from the current line
       .length()-1;       //   Set `j` to the current line-length (minus the trailing '\n')
    p=x.matches("\\s+")?  //   If the current line only contains '\r', '\n' and/or spaces:
       p                  //    Leave `p` unchanged
      :                   //   Else:
       j;}                //    Change `p` to this line-length minus 1
  return"".join("",a);}   //  Return the String-array joined together

चुनौती से पहले पुराना उत्तर 151 148 बाइट्स बदल दिया गया था :

s->{String a[]=s.replace("\r\n","\n\r").split("(?<=\n)"),r="";int p=0,i;for(var x:a){for(i=p;i-->0;r+=" ");i=x.length()-1;p=i<1?p:i;r+=x;}return r;}

स्पष्टीकरण:

s->{                            // Method with String as both parameter and return-type
  String a[]=s.replace("\r\n","\n\r") 
                                //  Replace all "\r\n" with "\n\r"
              .split("(?<=\n)"),//  Create String-array split by "\n",
                                //  without removing the trailing "\n" delimiter
         r="";                  //  Result-String, starting empty
  int p=0,                      //  Previous line-length, starting at 0
      i;                        //  Index (and temp) integer
  for(var x:a){                 //  Loop over the String-array
    for(i=p;i-->0;r+=" ");      //   Append `p` amount of spaces to the result
    i=x.length()-1;p=i<1?p:j;   //   If the current line is not empty:
                                //    Replace `p` with the length of this current line
    r+=x;}                      //   Append the current item
  return r;}                    //  Return the result-String

TIO पर काम नहीं करता, विंडोज कमांड प्रॉम्प्ट पर काम करता है:

यहां छवि विवरण दर्ज करें




3

सी (जीसीसी) , 100 94 बाइट्स

b,c,d;f(char*s){for(b=13;b;b=*s++)b==13?c=d=0:b-10?d=!printf("%*c",++d,b),++c:putchar(b,d=c);}

ASCII कोडिंग मान लिया गया है ( '\r'==13, '\n'==10); अन्य प्रणालियों पर सूट करने के लिए समायोजित करें।

इसे ऑनलाइन आज़माएं! (जावास्क्रिप्ट की आवश्यकता है)

पठनीय संस्करण

int c = 0;
int d = 0;

f(char*s)
{
    for (;*s;++s) {
        switch (*s) {
        case'\r':
            c = d = 0;
            break;
        case'\n':
            d = c;
            putchar(*s);
            break;
        default:
            printf("%*s%c", d, "", *s);
            d = 0;
            ++c;
        }
    }
}

cवर्तमान स्तंभ की स्थिति है; dउन स्थानों की संख्या है जिन्हें एक मुद्रण योग्य वर्ण से पहले डाला जाना चाहिए। दोनों को समारोह में प्रवेश पर शून्य माना जाता है।

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

int main(int argc, char **argv)
{
    char s[1024];
    if (argc <= 1)
        while (fgets(s, sizeof s, stdin))
               f(s);
    else
        for (int i = 1;  i < argc;  ++i)
            f(argv[i]);
}

chars अभी छोटे ints हैं, उन्हें विनिमेय होना चाहिए (सिद्धांत रूप में)। शायद gccएक निहित कलाकारों करेंगे
स्टेन स्ट्रम


वैसे, मुझे नहीं लगता कि हमारी सहमति के अनुसार आपको अपने वैश्विक चर को रीसेट करने की अनुमति है c,d। आपका फ़ंक्शन - अन्य क्लीनअप कोड के बिना - कई बार चलने में सक्षम होना चाहिए। इस प्रकार आप सबसे अधिक संभावना एक जोड़ने की जरूरत है c=d=0
जोनाथन फ्रीच


यह अब एक पुन: प्रयोज्य कार्य है।
टोबी स्पाइट

2

पायथन 3 , 101 94 बाइट्स

TFeld के जवाब पर आधारित है ।

def f(s):
 i=n=0
 for c in s:k='\r\n'.find(c);a=k&1;print(end=-k*' '*i*n+c*a);n=k>0;i=i*a-k//2

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


Ungolfed

def f(s):
  i=0  # position of the cursor
  n=0  # was the last character LF?
  for c in s:        # iterate over the input
    k='\r\n'.find(c) # k := 0 for CR, 1 for LF and -1 for every other character
    a=k&1            # as (-1)&1 == (1)&1 == 1, this is a := abs(k)
    print(end=-k*' '*i*n+c*a) # If c is a normal character (k == -1) and the last character was LF, 
                              # print leading spaces. If c is not CR, print it
    n=k>0            # n := True if c is LF, False otherwise
    i=i*a-k//2       # If c is either a newline or a printable character (a == 1),
                     # keep the cursor's position and increment it for a printable character ((-1)//2 == -1)

2

क्लीन , 92 91 बाइट्स

-1 Laikoni के लिए धन्यवाद!

नोट: \ में \rbytecount से छोड़ा गया है लिनक्स तटरक्षक शाब्दिक हैंडल के रूप में \rऔर \nहै।
नोट: विंडोज सीजी की आवश्यकता है \nऔर \rबच जाता है, इसलिए +3 यदि इसे विंडोज पर चलना है।

import StdEnv
?n['\r':t]= ?0t
?n['
':t]=['
':spaces n]++ ?n t
?n[h:t]=[h: ?(n+1)t]
?_ e=e

?0

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

? :: Int [Char] -> [Char]प्रारंभिक प्रथम तर्क के रूप में 0 के साथ एक आंशिक अनुप्रयोग । यह प्रत्येक चरित्र के माध्यम से उतरता है कि कितने ट्रैवर्स किए गए हैं, जब यह एक गाड़ी वापसी का सामना करता है तो गिनती रीसेट होती है और जब यह एक नई लाइन का सामना करता है तो यह उस बिंदु पर ट्रैवर्स किए गए वर्णों की संख्या के बराबर स्थान जोड़ता है।


1
मुझे लगता है कि ?_[]=[]हो सकता है ?_ e=e
लकोनी

@ लायकोनी आप सही कह रहे हैं। मैं कसम खाता हूँ कि मैं अब तक एक ही बात को एक दर्जन बार याद कर चुका हूँ।
Οवस

1

हास्केल , 93 87 बाइट्स

l=0#0
(n#x)(t:r)|t=='\n'=t:(n#1)r|t=='\r'=l$r|m<-n+1=(' '<$[1..n*x])++t:(m#0)r
(_#_)e=e

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


बहुत ही सीधा साधा समाधान। # एक इनफ़िक्स फ़ंक्शन है जो एक नई स्थिति (x) के बाद रिक्त स्थान जोड़ने के लिए एक चरित्र स्थिति काउंटर (n) और ध्वज को रखते हुए एक समय में एक बार एक आउटपुट बनाता है।


1
आप के बजाय एक infix फ़ंक्शन को परिभाषित कर सकते हैं c, और (या बल्कि ) के l$rबजाय का उपयोग करें । c 0 0rc _ _ e=e(_#_)e=e
लकोनी

सभी एक साथ 87 बाइट्स: इसे ऑनलाइन आज़माएं!
लकोनी

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