빈 줄에 공백을 제거하십시오.


17

아, 이 스택의 또 다른 이기적인 용도 .

크롬 북 소유자 인 저는 Cloud9에서 사용하는 편집기 인 Ace IDE를 자주 사용합니다. 여분의 공백을 처리하기위한 많은 도구가 있지만 빈 줄을 지우는 것에는 특히 부족합니다.

오늘 당신의 임무는 [ ;)]에 복사하여 붙여 넣을 수있는 장소에서 입력이 주어지면 동일한 것을 출력하고 모든 공백과 테이블을 빈 줄에 저장하는 것입니다.

#제거 할 공백 문자를 나타내는 s 와 함께 몇 가지 예를 들겠 습니다.


입력 1 :

if (this.Color !== 'blue') {
##
  this.Color = 'blue';
}

산출:

if (this.Color !== 'blue') {
[empty line]
  this.Color = 'blue';
}

입력 2 :

function outputSomething(times) {
  for (var iter = 0; iter < times; iter++) {
    console.log('"# # " represents a tabulator');
    // This is a comment
# # 
}}

산출:

function outputSomething(times) {
  for (var iter = 0; iter < times; iter++) {
    console.log('"# # " represents a tabulator');
    // This is a comment
[empty line]
}}

입력 3 :

var x = 'Do you prefer spaces or tabs?';
var y = 'I\'m using both here. Sue me.';
# # ####
console.log(x + ' ' + y);

산출:

var x = 'Do you prefer spaces or tabs?';
var y = 'I\'m using both here. Sue me.';
[empty line]
console.log(x + ' ' + y);

원하는대로 입력을 처리 할 수 ​​있습니다. [ ;)] 에서 복사하여 붙여 넣기 할 수있는 한 어디에서나 출력 합니다.

표준 허점이 적용되며 바이트 단위의 최단 답변이 승리합니다!


빈 줄을 남겨 두어야 [empty line]합니까, 아니면 전혀 줄이 없어야합니까?
Leaky Nun

6
아, 그리고 누군가가 그것을하기 전에, '공간 대 테이블 레이터'거룩한 전쟁에 들어 가지 마십시오. 그렇게하면 답이 10,000 바이트의 벌점으로
감춰집니다

1
그리고이 모든 설명이 필요합니까? 다른 문자가없는 줄에서 공백과 표를 잘라냅니다.
Papayaman1000

1
입력에 줄에 후행 공백이 포함되어 있지 않다고 가정 할 수 있습니까? (모든 공백을 제외하고는 분명히) 예제는 없습니다.
ETHproductions

1
공백이 아닌 줄을 포함하는 줄 뒤에 공백이 있으면 공백을 제거해도됩니까?
Digital Trauma

답변:


15

Japt , 10 8 6 5 4 바이트

mx1R

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

설명

(from the Japt docs)
.m(f,s=""):
Splits this with s, maps each item by f, then rejoins with s.

따라서 줄 바꿈으로 mx1R문자열을 분할하고 R사용하여 각 줄의 오른쪽을 자르고 줄을 x1다시 줄 바꿈으로 결합합니다.

ETH 프로덕션 덕분에 2 바이트를 절약했습니다.


1
축하합니다! 당신은 골퍼 아웃 레티 나!
Leaky Nun

아주 좋아요! 로 다른 바이트를 저장할 수 있습니다 ®x1}R.
ETHproductions

당신은 그냥 할 수있는, 그 스크래치 mx1R((가) :-) ASCII의 4 바이트에 모든 문제를 해결하기 위해 x1자동으로 해석됩니다 m으로_x1}
ETHproductions

@ETHproductions 아와, 팁 주셔서 감사합니다. 왜 mx1R작동 하는지 알 수 없지만 그렇게하는 것이 멋지다!
Tom


23

망막 , 5 바이트

%G`\S

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

그렇게 분명하지 않은 접근법은 더 나은 점수로 우리에게 보상합니다 :)

설명

G주어진 정규 표현식과 일치하는 ( \S, 공백이 아닌 문자와 일치) 행을 찾을 수 있는 행만 유지하면서 Grep 스테이지로 표시합니다 . 시작하지 않은 경우에는 %"비우기"대신 행을 완전히 제거합니다.

%공백 전용 라인에 대한 그렙에 의해 반환 된 빈 문자열 결과에서 빈 줄이 될 것이라고 우리의 경우이 방법 : 각 행에 한 번 무대를 적용하고 줄 바꿈과 결과를 연결하는 수식입니다.


이 게시물을 게시하려고했는데 좋았습니다. :)
Martin Ender

레티 나에 대해 아직도 배울 것이 많다고 생각합니다.
Leaky Nun

17

sed , 6 바이트

/\S/!g

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

/  /!  # If the line doesn't contain...
 \S    # anything non-whitespace (i.e. the entire line is whitespace)
     g #   replace the pattern space with the hold space which is empty

2
아마도 substitution 을 사용했을 것 입니다. 평범한 일치 g를 사용하여 몇 바이트를 절약하는 영리한 방법이었습니다.
Digital Trauma

1
@DigitalTrauma 저의 첫 번째 솔루션이었습니다. 이것은 1 바이트를 절약했습니다.
Riley

1
너무 나쁜 sed없습니다 \S"공백없는 무언가를"나. 아니면? /\S/!g
aragaer

@aragaer 있습니다! 좋은!
Riley

9

V , 5 , 4 바이트

ÇÓ/D

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

설명:

Ç       " On every line not matching the following regex:
 Ó/     "   a non-whitespace character...
   D    "   Delete the whole line

16 진 덤프 :

00000000: c7d3 2f44                                ../D

당신은 단지 5입니까? V는 종종 문자 당 1 바이트 이상을 사용합니다.
Papayaman1000

1
@ papayamam1000 V는 문자 당 하나 이상의 바이트를 사용하지 않습니다. 여기서는 비 ASCII 기호가 모두 1 바이트 인 Latin1 인코딩을 사용합니다. 16
진수

아주 그렇습니다.
Papayaman1000

"비 공백 문자"여러 공백 문자가있는 줄을 어떻게 삭제하지 않습니까?
Adám

9

자바 스크립트 (ES6), 26 바이트

나는 이것이 왜 그렇게 많은지지를 받고 있는지 이해할 수 없습니다!

s=>s.replace(/^\s+$/gm,``)

시도 해봐

f=
s=>s.replace(/^\s+$/gm,``)
i.addEventListener("input",_=>o.innerText=f(i.value))
<textarea id=i></textarea><pre id=o>


7

파이썬 3 , 63 55 36 바이트

lambda s:[x.strip()and x for x in s]

입력과 출력은 문자열의 배열입니다. 에 가입'\n' .

I / O의 문자열 인 원래 프로그램의 경우 :

lambda s:'\n'.join(x.strip()and x for x in s.split('\n'))

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

@Rod 덕분에 8 바이트가 절약되었습니다!
@LeakyNun 덕분에 19 바이트가 절약되었습니다!


@LeakyNun Oh hm, 내가 할 수 있다는 것을 잊었다. 감사!
HyperNeutrino

2
나는 당신의 원래 코드가 도전과 더 조화를 이루고 있다고 생각합니다. 붙여 넣기 텍스트를 입력에 복사 할 수 있도록 요청하므로 실제로 코드는 배열이 아닌 단일 문자열을 취하여 분할해야합니다.
Notts90

6

CJam , 18 16 바이트

qN/{_" 	"-\e&N}%

문자열에는 1 개의 공백과 1 개의 탭이 있습니다.

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

설명

q                 e# Read the input
 N/               e# Split it on newlines
   {              e# Apply this block to each line:
    _             e#  Copy the line
     "  "-        e#  Remove all spaces and tabs from the copy
          \       e#  Bring the original to the top of the stack
           e&     e#  Logical AND; returns the original line if the copy is truthy 
                  e#    (non-empty), otherwise returns the copy line
             N    e#  Push a newline after the line
              }%  e# (end of block)

5

망막 , 8 바이트

m`^\s+$

정말 의미없는 도전입니다. m여러 줄로 만듭니다 (줄 바꿈 무시). \s공백과 탭 모두와 일치합니다.

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


망막은 항상 첫 번째입니다. 그 포스터가 의견에 [질문 적으로 필요한] 설명을 요구하는 동안에도.
Papayaman1000

@ Papayaman1000 사람들은 항상 그렇게합니다. 그런 다음 규칙이 예상과 다른 것으로 판명되면 답변을 변경할 수 있습니다.
HyperNeutrino

6
도전은 그다지 흥미롭지는 않지만 실제로 무의미하다고 부르는 것은 지나친 것처럼 보입니다.
Luis Mendo

5
그것은 당신의 표현이며, 당신 만이 당신 의 말 의 의도 알고 있습니다. 그것을 편집하거나 사용하지 않을 새로운 단어를 결정하는 것은 전적으로 귀하의 결정입니다
Luis Mendo

3
@HyperNeutrino 올바른 행동 과정은 명확하지 않은 문제를 해결하고 해당 설명이 추가 된 후에 다시 여는 것입니다.
Martin Ender

5

Vim, 20 18 16 13 10 바이트

Vim 전문가는 아니지만이 질문에는 Vim 답변이 필요합니다.

:%s/^\s*$<cr>

<cr> 캐리지 리턴입니다.

변경 로그:

  • :norm 대신에 :normal(-2 바이트)
  • *대신에 전환 +한다는 것은 이미 빈 줄과 일치한다는 것을 의미하지만 중요하지 않습니다. 그리고 이제 우리는 제거 할 수 있습니다 \v( 매우 마술 옵션) (-2 바이트)를
  • 새로운 접근법 : 빈 줄과 일치하는 모든 줄을 바꾸는 대신 공백이 아닌 문자가없는 모든 줄을 빈 줄로 바꿉니다. (-3 바이트)
  • 실제로 정상적인 교체는 더 짧습니다 (감사합니다, @DJMcMayhem) (-3 바이트)

1
대체 명령으로 더 짧습니다.:%s/^\s*$<cr>
DJMcMayhem

5

AWK , 12 11 바이트

!NF{$0=""}1

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

나는 AWK도 대답을해야한다고 생각했습니다.

다음과 같이 작동합니다.

  1. 입력에 필드가 없는지 확인 AWK는 기본적으로 모든 공백을 필드 사이의 구분자로 사용합니다.
  2. 필드가 없으면 입력 행을 빈 문자열로 변경하십시오.
  3. 줄을 인쇄하십시오. 1은 정확한 값이므로 행을 인쇄하는 기본 명령을 실행합니다.

중괄호 뒤에 세미콜론이 필요하지 않으므로 1 바이트가 제거되었습니다.
jmriego

'NF'내가이 복귀하고 2 바이트로 끝날 ^^ ... 나에게 아이디어를 준
올리비에 Dulac

와 ... 빈 줄을 없애야한다고 생각했는데 ... :(
Olivier Dulac

1
나는 첫 번째 시도와 똑같은 이유로 정확히 똑같이했습니다. 나는 그 느낌을 알고있다 :)
jmriego

좋은 소식은 : 이제는 정말 작은 awk oneliner로 내 프로그램 (또는 파일을 표시 할 때)을 제거하는 방법을 알고 있습니다 ^^. 그건 그렇고 당신의 대답은 좋고 단단합니다. 잘 했어.
Olivier Dulac

5

APL (Dyalog) , 11 10 바이트

'\s+$'R''

⎕R물건을 대체하는 함수를 파생시키는 연산자입니다. 이 경우 RegEx와 일치하는 것은 빈 문자열로 바뀝니다.



3

자바 7, 57 바이트

String c(String s){return s.replaceAll("(?m)^\\s+$","");}

설명:

String c(String s){     // Method with String parameter and String return-type
  return s.replaceAll(  //  Return the input String after we've replaced
    "(?m)^\\s+$",       //  all lines only containing whitespaces
    "");                //  with empty Strings
                        //    (NOTE: `(?m)` enables multiline regex)
}                       // End of method

테스트 코드 :

여기에서 시도하십시오.

class M{
  static String c(String s){return s.replaceAll("(?m)^\\s+$","");}

  public static void main(String[]a){
    System.out.println(c("if (this.Color !== 'blue') {\n \t\n  this.Color = 'blue';\n}"));
    System.out.println();
    System.out.println(c("function outputSomething(times) {\n  for (var iter = 0; iter < times; iter++) {\n    console.log('\"# # \" represents a tabulator');\n    // This is a comment\n  \t\n}}"));
    System.out.println();
    System.out.println(c("var x = 'Do you prefer spaces or tabs?';\nvar y = 'I\'m using both here. Sue me.';\n    \t\t\t \nconsole.log(x + ' ' + y);"));
  }
}


1

펄 6 ,  15  12 바이트

15

{S:g/^^\h+$$//}

시도 해봐

{         # bare block lambda with implicit parameter 「$_」

  S       # string replace (implicitly against 「$_」)
  :global # globally
  /
    ^^    # match beginning of line
      \h+ # match at least one horizontal whitespace
    $$    # match end of line

  //      # replace with nothing
}

11 + 1

perl6 -pe 's/^^\h+$$//'

위와 거의 동일합니다.

  • -p모든 입력 라인에 대한 코드를 실행하여 라인을 넣고 $_남아있는 것을 인쇄합니다.$_ 합니다.
  • s대신 대체하지만 S결과를 반환합니다.
  • 에 대한 필요가 :g/ :global-p그 돌을지지 않습니다.


1

Vim, 13 9 바이트

:v/\S/le↵

편집 :

  • 원래 답변 : :v/\S/d↵(이 vim 질문을 기반으로 ).
    빈 행을 삭제합니다. 이는 예상 된 동작이 아닙니다.

  • vglobal을 사용한 유효한 답변 ::v/\S/norm D↵

  • 이제 대신 왼쪽 정렬 ex 명령을 사용하십시오.normal D


PPCG에 오신 것을 환영합니다! 왜 당신이 사과했는지는 잘 모르겠습니다. 왜냐하면 이것은 스스로 유효한 대답이기 때문입니다.
Mego

감사합니다! 그것은 @ L3viathan의 대답으로 확장되고 동일한 "언어"를 사용하므로 가능한 경우 (이미 큰) 답변 수를 제한하는 그의 해결책에 대해 언급했을 것입니다.
Morgan

우리는 많은 답변을 얻거나 동일한 언어로 여러 솔루션을 갖는 것에 크게 관심이 없습니다. 기존 답변을 약간 개선하기 위해 새로운 답변 대신 의견을 권장하지만 새로운 답변을 게시해도 괜찮습니다 (특히 의견을 제시 할 수없는 경우).
Mego

0

C, 168 바이트

#define P putchar(*t++)
s;e(char*t){s=0;while(*t>10)if(*t!=32|*t!=9)return 0;else t++,s++;return s;}
r(char*t){while(*t==10)P;if(!*t)return;if(!e(t))while(*t)P;t+=e(t);}

상세한

#include <stdio.h>

int e (char * t)
{
    int s = 0;

    // till the end of the line
    while (*t!='\0' && *t!='\n')
        // if it's not a space
        if (*t!=' ' || *t!='    ')
            // ignore the line
            return 0;
        else
            // count the space
            t++, s++;

    // return number of spaces
    return s;
}

void r (char * t)
{
    // skip to empty lines
    while (*t != '\0' && *t == '\n') putchar('\n'), t++;

    // stop at end of string
    if (*t == '\0') return;

    // if there is contnet print it
    if (!e(t)) while(*t != '\0') putchar(*t), t++;

    // skip to the end of line
    t += e(t);
}

int main (int argc, char**argv)
{
    if (argc > 1) r(argv[1]);
    putchar('\n');
    return 0;
}

0

C, 100 바이트

c,i,j;f(char*s){for(i=j=c=0;s[i];s[++j]^10?c=s[j]^32:(printf(!c?"\n":"%.*s",j-i+1,s+i),c=0,i=j+1));}

온라인에서 작동 하는지 확인하십시오 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.