말 그대로 CR과 LF를 가져 가라.


22

오래된 메모장을 축하 하기 위해 캐리지 리턴과 줄 바꿈을 오늘날 사용 된 것이 아니라 원래의 의미로 취급합니다.

인쇄 가능한 ASCII와 줄 바꿈 (␊; LF; esc \n; hex 0A; dec 10)과 캐리지 리턴 (␍; CR; esc \r; hex 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

베니 암
     퀴스 노스 스 트루

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

운동
Ullamco Laboris

nisi ut aliquip 전

commodo 결과.



28
제안 된 답변 : Notepad, 179712 bytes
Nit

3
@ 니트 : | 메모장은 TC가 아님
ASCII 전용

2
TIO가 적절한 터미널을 사용하지 않는다면 안타깝게도 훌륭한 쉘 승자가 될 것입니다 stty -onlcr;cat.
Toby Speight

1
캐리지 리턴 문자를 TIO의 "입력"필드에 입력하는 데 문제가 있습니다. 붙여 넣을 때 삼키거나 줄 바꿈으로 보이는 것처럼 보입니다. 내 브라우저가 잘못되었거나 TIO입니까?
Toby Speight

2
@ Adám TIO보다 모든 출력을 금지하지 마십시오. 대신 프로그램이 특정 터미널 유형을 사용하거나 파일 출력으로 제한하십시오. 또는 출력에 새 줄에서 텍스트 앞에 필요한 공백이 있어야합니다.
mbomb007 21:46에

답변:


6

, 10 바이트

UTFθ«ι≡ι⸿↑

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

UT

오른쪽 여백을 비활성화합니다.

Fθ«

입력을 반복합니다.

ι

현재 문자를 인쇄하십시오. 이것은 자동으로 처리 되지만 (이 상황에서 \n숯으로 처리됩니다) 숯은로 \v변환 \r됩니다 \r\n.

≡ι⸿

... 확인 \r...

... 그렇다면 줄을 다시 위로 이동하십시오.


lTIO 링크에서 플래그 를 제거해서는 안 됩니까?
Adám

@ Adám 답에 어떤 횡설수설 한 내용을 붙여넣고 차선책 프로그램에 연결하지 못하게하려면 어떻게해야합니까?
Neil

내가 참조. 아마도 차콜은 stderr (디버그)에 TIO 링크를 출력해야합니까?
Adám

@ Adám @ ASCII 전용으로 제안하겠습니다.
Neil

@ 닐 고정, 생각?
ASCII 전용

5

루비 , 24 17 바이트

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

온라인으로 사용해보십시오!

TIO에서는 작동하지 않지만 Linux 콘솔에서는 작동합니다.


당신은 tr "내 생각 사이의 공간을 떨어 뜨릴 수 있습니다 .
Kevin Cruijssen

어,이 솔루션의 생각하지 않았다, 그것은 수도 다만 어떤 언어가 모든 변경에 대한 작업 \n에들 \v리눅스 콘솔에서 실행할 때.
Adám

@ Adám 일부 언어는 아무것도 변경하지 않고 DOS 콘솔에서 작동합니까?
tsh

나는 도전 중반에 스펙을 변경 한 것에 대해 죄송하지만 도전을 더 흥미롭고 사소한 답변에 덜 적용하기 위해 이제 TIO에 적절한 출력이 필요합니다 .
Adám

5
사양 변경 : 나는 그것이 공평하다고 생각하지 않습니다. 하지만 필요한 경우 답변을 삭제하겠습니다.
GB

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에서는 작동하지 않으며 Windows 명령 프롬프트에서는 작동합니다.

여기에 이미지 설명을 입력하십시오



3

파이썬 (2) , 150 (128) 122 104 103 바이트

def f(s):
 i=n=0;l=''
 for c in s:l,n,i=[l,l+c,l+' '*i*n+c,n,1,0,0,i,i+1]['\r\n'.find(c)%3::3]
 print l

온라인으로 사용해보십시오!


저장 됨 :

  • Lynn 덕분에 -1 바이트

l,n,i=[l,l+c,l+' '*i*n+c,n,1,0,0,i,i+1]['\r\n'.find(c)%3::3]조금 더 짧은 것 같습니다 .
Lynn

3

C (gcc) , 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인쇄 가능한 문자 앞에 삽입해야하는 공백 수입니다. 함수 시작시 둘 다 0으로 가정됩니다.

테스트 프로그램

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는 단지 작은 크기 int이며 (이론적으로) 서로 바꿔야합니다. 아마도 gcc암시 적 캐스트를 할 것입니다
Stan Strum


그건 그렇고, 나는 우리의 합의에 따라 전역 변수를 재설정 할 수 있다고 생각하지 않습니다 c,d. 다른 정리 코드없이 함수를 여러 번 실행할 수 있어야합니다. 따라서 대부분을 추가해야합니다 c=d=0.
Jonathan Frech


이제 재사용 가능한 기능입니다.
Toby Speight

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

온라인으로 사용해보십시오!


언 골프

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 바이트

Laikoni 덕분에 -1!

참고 : Linux CG가 리터럴 및 s를 처리하므로 \in \r은 바이트 수 에서 생략됩니다 . 참고 : 윈도우 CG가 필요 하고 그것은 윈도우에서 실행해야하는 경우 이렇게 세, 이스케이프.\r\n
\n\r

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.
Laikoni

@Laikoni 당신이 맞아요. 나는 지금까지 정확히 같은 것을 12 번 놓쳤다 고 맹세한다.
OUurous

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

온라인으로 사용해보십시오!


매우 간단한 솔루션입니다. #은 문자 위치 카운터 (n)를 유지하면서 줄 바꿈 (x) 뒤에 공백을 추가 할 때 플래그를 유지하면서 한 번에 한 문자 씩 출력을 재귀 적으로 생성하는 삽입 함수입니다.


1
대신의 중위 기능을 정의 할 수 있습니다 c사용하는 l$r대신 c 0 0rc _ _ e=e(또는 오히려 (_#_)e=e).
Laikoni

모두 함께 87 바이트 : 온라인으로 사용해보십시오!
Laikoni

@Laikoni 고마워요, 당신은 그 많은 매개 변수로 그 접두어 트릭을 사용할 수 있다는 것을 몰랐습니다.
aoemica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.