COBOL 프로그램의 주석을 해제하십시오!


64

COBOL은 매우 오래된 언어이며, 작성 당시 58 세입니다. 실제로 너무 오래되어서 매우 흥미로운 특징이 있습니다. 각 줄의 처음 6자는 주석입니다.

왜 이런가요? 이 6 개의 문자는 프로그램이 완전히 디지털화되지 않고 컴퓨터에 입력되지 않은 당시의 줄 번호로 사용되었습니다.

또한 일곱 번째 문자는 매우 작은 세트의 일부일 수 있습니다 (일반적으로 *행 번호를 코드와 구분하기 위해 행이나 공백을 주석 처리해야 함)

그러나 더 많은 디지털 시스템을 사용하고 있고 원시 프로그램을 원한다면 어떻게해야합니까?

댓글 시스템

COBOL에는 두 가지 유형의 주석 (줄 주석 및 위에서 언급 한 "행 번호"주석)이 있습니다.

주석을 해제하는 것은 간단합니다. 각 줄에서 처음 7 자 (6 + 한 칸) 만 빼십시오.

000000 apple
000001 banana
celery donuts

될 것입니다 :

apple
banana
donuts

줄 설명은 좀 더 어려워집니다. 행 주석은 *다음과 같이 행의 일곱 번째 문자 위치에 별표로 시작됩니다 .

000323* this is a comment

이것은 라인 주석이 아닙니다.

*00000 this isn't a comment

줄 설명의 주석을 해제하려면 전체 줄을 제거하십시오.

예를 들어 "프로그램"은 다음과 같습니다.

000000 blah blah
000001* apples
000002 oranges?
000003* yeah, oranges.
000*04 love me some oranges

주석 처리되지 않은 버전 :

blah blah
oranges?
love me some oranges

즉, 문자열 주석을 해제하려면 각 줄의 처음 6자를 제거하고 별표로 시작하지 않는 모든 줄의 첫 번째 문자를 제외한 모든 문자를 반환하십시오.

도전

주석 처리 된 프로그램을 사용하고 주석 처리되지 않은 변형을 리턴하는 프로그램 또는 함수를 작성하십시오.

설명

  • 별표 ( *)는 한 줄에서 처음 7 자 이외의 곳에서는 찾을 수 없습니다 (구문 확인을 요구하지는 않음)
  • 각 줄은 항상 7 자 이상이어야합니다.
  • 일곱 번째 문자는 항상 별표 또는 공백이라고 가정 할 수 있습니다.
  • 입력 또는 출력은 행렬 또는 목록 일 수 있습니다.
  • 인쇄 가능한 ASCII 문자 (및 개행 문자) 만 처리해야합니다.
  • 후행 줄 바꿈으로 출력 할 수 있습니다. 원하는 경우 입력에 후행 줄 바꿈이 있다고 가정 할 수도 있습니다.

채점

이것이 이므로 최소 바이트를 가진 답이 이깁니다!

면책 조항 : 나는 실제로 COBOL을 모르고 주장하지 않습니다. 이 질문에서 내가 작성한 COBOL에 대한 주장 중 하나라도 부정확 한 경우, 나는 책임을지지 않습니다.


23
줄 번호는 주석이 아닙니다. 그들은 열입니다. 용어 해주세요.
user207421

1
귀하의 예는 모두 뒤에 공백이 *있습니다. 우연의 일치입니까?
Neil

6
오래된 것은 자동적으로 나쁜 것을 암시하지 않습니다. 나는 민첩한 COBOL 상점에서 일했다. Java로 할 수없는 AS / 400에서 수행 할 수 있습니다.
Thorbjørn Ravn Andersen

1
허 .. 나는 실제로 포장되지 않은 경우에만 작동하는 COBOL CopyBook 파서를 작성했습니다. 그냥 JSON으로 변환하십시오 key:{key:{key:length,key:length}}. 그래도 모든 서식 데이터와 입력 데이터를 제거합니다.
매직 문어 Urn

4
처음 6 자 사이에 공백이있을 수 있습니까?

답변:


104

COBOL (GnuCOBOL), 191 + 17 = 208 바이트

이 답변에 대해 COBOL을 "배웠습니다".

이것은 표준 입력으로 추정되는 내용을 입력하고 표준 출력으로 추정되는 내용을 작성하는 전체 프로그램입니다. 아마도 언젠가는 이것으로 돌아가서 (1) COBOL에 함수가 있는지 판별하고, 그렇다면 (2) 함수 솔루션이 더 짧은 지 여부를 확인하십시오.

바이트 수에는 프로그램 및 컴파일러 플래그 ( -free-frelax-syntax)가 포함됩니다.

program-id.c.select i assign keyboard line sequential.fd i. 1 l pic X(80). 88 e value 0.open input i perform until e read i end set e to true end-read if not e and l(7:1)<>'*'display l(8:73).

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

언 골프 프로그램

program-id. c.

select i assign to keyboard organization line sequential.

fd i.
    1 l pic X(80).
    88 e value 0.

open input i
perform until e
    read i
        end set e to true
    end-read
    if not e and l(7:1) <> '*'
        display l(8:73).

한계

기술적으로 말하자면 출력이 올바르지 않습니다. 내 커서 연구에서 COBOL에 문자열을 저장하는 유일한 실제 방법은 고정 크기 버퍼에있는 것 같습니다. 고정 형식 프로그램의 줄 길이 제한이기 때문에 80 문자의 버퍼 크기를 선택했습니다. 이것은 두 가지 한계를 제시합니다 :

  • 80자를 초과하는 줄은 잘립니다.
  • 80 자보다 짧은 줄은 오른쪽으로 공백으로 채워집니다.

나는 이것이 COBOL이기 때문에 이것이 받아 들일 수 있다고 생각합니다. 그렇지 않다면 대안을 기꺼이 살펴볼 것입니다.

감사의 말

  • Edward H 덕분에 -166 바이트
  • hornj 덕분에 -2 바이트

10
별표 (*)는 한 줄에서 처음 7 자 이외의 다른 곳에서는 발견되지 않습니다 . 그러나 아직 ...;)
Cœur

@ Cœur Haha 예 ...하지만 내 솔루션은 그 가정을 사용하지 않으므로 적절할 것입니다!
Jakob

8
당신은 하나의 인터넷을 이깁니다.
Joshua

COMPUTE 문을 제외하고 @ Cœur.
ClickRick

1
금메달 축하합니다!
caird coinheringaahing

20

파이썬 2 , 39 38 37 바이트

LyricLy 덕분에 -1 바이트. Mego 덕분에 -1 바이트.

lambda s:[i[7:]for i in s if'*'>i[6]]

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

문자열 목록으로서의 I / O.


2
대체하여 바이트를 저장 !=하여 <공간의 코드 포인트는 별표의보다 낮은이기 때문에, 그리고 7 번째 문자는 항상 공백이나 별표 될 것입니다.
LyricLy

그렇다면 일곱 번째 문자는 항상 공백이나 별표입니까?
완전히 인간적인

예. You may assume the seventh character is always an asterisk or a space.
LyricLy

1
if'*'!=i[6]
Mego


11

V , 13 11 10 바이트

Î6x<<
çª/d

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

설명

Î       ' On every line
  x     ' delete the first...
 6      ' 6 characters
   <<   ' and unindent the line (removes the leading space)
ç /     ' on every line
 ª      ' matching \*
   d    ' delete the line

16 진 덤프 :

00000000: ce36 783c 3c0a e7aa 2f64                 .6x<<.../d

7x대신에 할 수 6x<<없습니까?
DJMcMayhem

1
그런 다음 삭제*
nmjcman101

린을 *먼저 삭제 한 다음 어떻게해야 Î7x합니까? (* 0에서 문자 5를 사용할 수 없다고 가정)
12431234123412341234123 1

불행히도 @ 12431234123412341234123은 없습니다 *. 처음 6 자 안에는있을 수 있습니다 .
nmjcman101

9

Paradoc (v0.2.8 +), 8 바이트 (CP-1252)

µ6>(7#;x

줄 목록을 가져와 주석 처리되지 않은 줄 목록을 만듭니다.

설명:

μ        .. Map the following block over each line (the block is terminated
         .. by }, but that doesn't exist, so it's until EOF)
 6>      .. Slice everything after the first six characters
   (     .. Uncons, so now the stack has the 6th character on top
         .. and the rest of the line second
    7#   .. Count the multiplicity of factors of 7 in the character
         .. (treated as an integer, so '*' is 42 and ' ' is 32)
      ;  .. Pop the top element of the stack (the rest of the line)...
       x .. ...that many times (so, don't pop if the 6th character was a
         .. space, and do pop if it was an asterisk)

안녕하세요, 저는 골프 프로그래밍 언어를 썼습니다. :)

나는 여전히 이것을 개발하고 있으며 이것을 작성하려고 시도한 후 내장 함수를 추가 / 조정하여 " 7#" 보다 공간과 별표를 구별하는 더 합리적인 방법이 있지만, 이것이 비경쟁이 될 것 같은 느낌이 든다. 운 좋게도 여전히 문제가되었습니다 (3 일 전에 커밋 한 v0.2.8의 기능 만 사용합니다).


"저는 골프 프로그래밍 언어를 썼습니다." 이 챌린지를 게시하기 전후에 사용중인 버전이 릴리스 되었습니까?
Mast

1
그것은 3 일전에서이 버전에서 작동 : github.com/betaveros/paradoc/releases/tag/v0.2.8을
betaveros

맞다, 당신은 그것을 언급했지만 어떻게 든 명시 적으로 등록하지 않았다.
Mast


7

옥타브, 23 바이트

@(s)s(s(:,7)~=42,8:end)

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


4
옥타브가 그런 식으로 문자열을 할 수 있다는 것을 몰랐어요. MATLAB. xD
Sanchises

R2016b가 문자열 배열을 도입 한 이래로 이것이 MATLAB에서도 @Sanchises에서 작동한다고 확신합니다! 현재 R2015b에만 액세스 할 수 있으므로 확인할 수는 없습니다. MATLAB은 74 바이트, 아마 더 적은에서 그것을 할 수 @(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false), s세포 배열이 아닌 문자열 배열입니다. 정규 표현식이나 무언가를 사용하는 것이 더 짧을 수도 있지만 필자가 작성한 방법은 이전 MATLAB에 대한이 답변의 방법론과 비슷합니다
Wolfie

6

젤리 , 11 9 바이트

ṫ€7Ḣ⁼¥Ðf⁶

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

라인 목록으로 입력 및 출력.

@EriktheOutgolfer 및 @JonathanAllan 덕분에 -2 바이트

작동 원리

ṫ€7Ḣ=¥Ðf⁶
 €           On each line:
ṫ 7            Replace the line with line[7:]
      Ðf     Keep all lines that meet condition:
     ¥         Dyad:
   Ḣ             First Element (modifies line)
    =            Equals
        ⁶    Space

7$€가능€7
Outgolfer Erik

다음과 같이 9로 줄이십시오.ṫ€7Ḣ⁼¥Ðf⁶
Jonathan Allan

5

PowerShell , 32 바이트

$input-replace'^.{6}( |.*)'-ne''

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

파이프 라인 입력은 문자열 배열로 제공되며 -replace모든 문자열에서 작동 하며 배열에 -ne ''적용된 (빈 문자열과 같지 않음) 빈 줄을 필터링하는 역할을합니다.


4

C, 63 59 55 48 47 46 바이트

또 다른 바이트를 제거하는 " 익명 사용자 "에게 감사합니다 .

" 7 번째 문자는 항상 별표 또는 공백이라고 가정 할 수 있습니다. "라고 Felix Palmen 에게 감사드립니다 .

f(char**a){for(;*a;++a)(*a)[6]&2||puts(*a+7);}

다음과 같이 사용하십시오.

char** program = { "000000 apple", "000001 banana", "celery donuts", 0 };
f(program);

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


3

실제로 13 바이트

⌠6@tp' =*⌡M;░

입력 및 출력은 문자열 목록으로 수행됩니다.

설명:

⌠6@tp' =*⌡M;░
⌠6@tp' =*⌡M    for each line:
 6@t             discard the first 6 characters
    p            pop the first character of the remainder
     ' =         is it a space?
        *        multiply the string by the boolean - returns the string if true, and an empty string if false
           ;░  filter out empty strings

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


3

가이아 , 9 바이트

6>¦'*«⁈ḥ¦

문자열 목록을 허용하고 문자열 목록을 반환하는 함수입니다.

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

설명

6>¦        Remove the first 6 characters of each string
   '*«⁈    Filter out ones that start with *
       ḥ¦  Remove the initial space from each

10자를 세고 3 개는 ASCII가 아니기 때문에 1 바이트를 초과하지 않습니까?
WGroleau

@WGroleau 하고는 «모두 1 자입니다. ASCII 이외의 문자를 사용하는 골프 용 언어 (Nim 제외)는 사용자 지정 인코딩을 사용하여 ASCII가 아닌 모든 문자를 단일 바이트로 계산할 수 있습니다. Gaia의 코드 페이지 는 다음과 같습니다 .
Mr. Xcoder

@ Mr.Xcoder Neim에는 인코딩도 있습니다.
Outgolfer Erik

3

Pyth , 9 바이트

적어도 1 라인이있을 경우에만 작동합니다 하지 코멘트 적어도 1 개 라인 코멘트. 다른 모든 솔루션은 모든 경우에 작동합니다.

@pizzakingme 덕분에 -2 바이트 !

m>d7.m@b6

여기 사용해보십시오!

설명

m>d7.m@b6     - Full program with implicit input. Takes input as a list of Strings.

m>d7          - All but the first 7 letters of 
    .m   (Q)  - The input, filtered for its minimal value using the < operator on
      @b6     - the 7th character -- note that "*" is greater than " "
              - Implicitly Output the result.

Pyth , 11 바이트

tMfqhTdm>d6

여기 사용해보십시오!

설명

tMfqhTdm> d6-암시 적 입력의 전체 프로그램. 문자열 목록으로 입력을받습니다.

       m> d6-각 줄의 처음 6자를 제거하십시오.
    hT-각각의 첫 문자를 얻습니다.
  fq d-첫 번째 문자를 별표로 유지합니다.
tM-각각의 첫 문자를 제거합니다.
            -암시 적으로 출력.

Pyth , 11 바이트

m>d7fqd@T6Q

여기 사용해보십시오!

설명

m> d7fq @ T6dQ-전체 프로그램. 문자열 목록으로 입력을받습니다.

      @ T6-각각의 여섯 번째 문자.
    fq dQ-공백이있는 줄을 ^로 유지합니다.
m> d7-처음 7자를 자릅니다.
             -암시 적으로 출력합니다.

Pyth , 12 바이트

tMfnhT\*m>d6

여기 사용해보십시오!

설명

tMfnhT \ * m> d6-암시 적 입력의 전체 프로그램. 문자열 목록으로 입력을받습니다.

        m> d6-각 줄의 처음 6자를 제거하십시오.
    hT-각각의 첫 문자를 얻습니다.
  fn \ *-별표가 아닌 항목을 필터링합니다.
tM-각각의 첫 문자를 제거합니다.
             -암시 적으로 출력.

Pyth , 12 바이트

m>d7fn@T6\*Q

여기 사용해보십시오!

설명

m> d7fn @ T6 \ * Q-전체 프로그램. 문자열 목록으로 입력을받습니다.

      @ T6-각 문자열의 여섯 번째 문자를 가져옵니다
    fn \ * Q-별표가 아닌 항목을 필터링합니다.
m> d7-처음 7자를 자릅니다.
              -암시 적으로 출력합니다.

" 첫 번째 문자는 별표로 유지하십시오." "첫 번째 문자는 별표가 아닌 문자로 유지하십시오."
Kevin Cruijssen

m>d7.m@b69 바이트에서 작동해야하며, *어휘 순서대로 공간 뒤에서 남용 됩니다
Dave

원한다면 설명 / 테스트 링크로 편집 할 수 있습니다!
Dave

@pizzakingme 내가 모바일에 있기 때문에 편집한다면 기쁠 것입니다. 고마워하고 새로운 솔루션에 대한 자신을 신용하는 것을 잊지 마십시오!
Mr. Xcoder

모든 행이 행 주석 인 경우이 기능이 작동합니까? (이 사건을 처리
해야하는지 잘 모르겠습니다

3

GNU Sed, 19 + 2 = 21 자

확장 정규식을 사용 -E하려면 인수가 필요합니다 sed.

/^.{6}\*/d;s/^.{7}/

당신은 펄 사람과 같은 일을 할 수 있습니다s/^.{6}( |.*)//g
markasoftware



3

C (gcc) , 53 48 46 바이트

x;main(y){for(y=&x;gets(y-6);x&2||puts(y+1));}

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

-5 바이트 : 이 " 전체 프로그램 "을 gurka의 함수 와 같은 크기로 만드는 것은 매우 까다로운 작업이었습니다 . 이제 잘못된 유형의 배열에 대한 경계 (양방향)를 작성 하고 별표를 찾기 위해 작은 엔디안4 바이트 정수 에 의존 하지만 ...하지만, 작동합니다.)

-2 바이트 : 글쎄, 우리가 이미 "임의의" .bss위치에 쓰면 왜 배열 을 선언하는 것을 귀찮게할까요 ! 그래서 여기에 사용하는 문자열 처리 프로그램 제공 char 유형 이나 배열을.


좋은! 그리고 *x&2". 당신은 7 번째 문자는 항상 별표 또는 공간 가정 할 수있다"나를 기억했다, 그래서 난 내 대답 :-) 떨어져 일부 바이트를 면도 할 수 있어야한다
사이먼

@gurka thanks : D -2, hehe
Felix Palmen

3

R, 47 45 바이트

function(x)gsub("(?m)^.{6}( |.*\\n)","",x,,T)

입력을 문자열 목록으로 가져 가면 정규 표현식을 -6의 경우 "^. {6} (|. * ​​$)"로 줄일 수 있다고 생각합니다.
CriminallyVulgar

@CriminallyVulgar 맞습니다. 이 경우에도 pe=T논쟁을 철회 할 수 있습니다 . 그러나 문자열 목록으로 입력이 허용되는지 확실하지 않습니다.
스벤 호헨 슈타인

OP에서 :Input or output may be a matrix or list.
완전히 인간적인

@CriminallyVulgar 문제는 출력에 빈 문자열이 있다는 것입니다.
스벤 호헨 슈타인

@SvenHohenstein Ah 물론, 나는 그것을 고려하지 않았습니다.
CriminallyVulgar

3

SNOBOL4 (CSNOBOL4) , 72 70 66 50 바이트

R	INPUT POS(6) (' '  REM . OUTPUT | '*') :S(R)
END

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

SNOBOL의 패턴 일치는 정규 표현식과는 상당히 다르지만 여기의 아이디어는 여전히 동일합니다. 한 줄이 "6 자 및 별표"와 일치하면 해당 줄을 제거하고 그렇지 않으면 줄의 처음 7자를 제거하고 결과를 인쇄하십시오.

이것은 실제로 SNOBOL의 조건부 할당 연산자를 더 잘 활용합니다.

패턴은 POS(6) (' ' REM . OUTPUT | '*')다음과 같이 해석됩니다.

위치 6에서 시작하여 공백이나 별표를 일치시키고 공백과 일치하면 나머지 행을에 지정하십시오 OUTPUT.


3

Vim, 14 바이트

Ctrl-VG5ld:%g/\*/dEnter

입력 파일을 편집 할 버퍼로로드 한 다음 위 명령을 입력하십시오. 출력은 새로운 버퍼입니다.


2

루비 , 39 38 36 29 23 22 20 + 1 = 21 바이트

$_[/.{6}( |.*
)/]=''

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

-p플래그를 사용합니다 .

설명:

-p플래그는 코드 주위에 암시 적 블록을 추가, 그래서 실제로 실행됩니다 코드는 다음과 같습니다 :

while gets
    $_[/.{6}( |.*
)/]=''

    puts $_
end

gets한 줄의 텍스트를 읽고 그 결과를에 저장합니다 $_.

$_[/.../]=''정규식의 선두로부터 제거 ...하여 $_.

/.{6}( |.*\n)/줄의 시작 부분에 공백이나 줄의 나머지가 오는 6 개의 문자와 일치합니다. 공백이 먼저 나타나므로 전체 행을 제거하기 전에 처음 6 자만 공백을 제거하려고합니다.

$_ 그런 다음 각 라인에 대해이 프로세스가 반복됩니다.


1
루비에서 메소드 호출은 괄호가 필요하지 않으므로 제거하면 바이트가 절약됩니다.
m-chrzan



2

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

s=>s.map(c=>c[6]<"*"?console.log(c.substr(7)):1)

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


1
입력이에 저장되어 있다고 가정 할 때 이것은 함수도 아니고 전체 프로그램도 z아닙니다. 여기서는 허용되지 않습니다. 그러나 익명 화살표 기능으로 변환하여 유효하게 만들 수 있습니다.
caird coinheringaahing

1
@cairdcoinheringaahing 당신이 절대적으로 맞습니다. 솔루션을 업데이트했습니다 -fn (과 관련된 규칙이 무엇인지 확실하지 않은지 )확인하십시오.
sgtdck

1
()함수 주위를 필요로하지 않지만 그렇지 않으면 괜찮습니다.
caird coinheringaahing

2

> <>, 57 53 바이트

>i~i~i~i~i~i~i67*=\
<o$/?:$/?=a:;?(0:i<
\~$/~\ $
/  <o\?/

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

설명

>i~i~i~i~i~i~i67*=    Read in the first seven bytes of the line
 i~i~i~i~i~i~         Read, and discard 6 characters
             i        Read the seventh
              67*=    Check if the seventh character was an 
                      asterisk (and leave that value on the stack );

<o$/?:$/?=a:;?(0:i<    Read characters until a newline or eof
                 i     Read the next character of the line
            ;?(0:      If it's a -1, terminate the program
       /?=a:           If it's a newline, break out of the loop
   /?:$                If the seventh character was not an asterisk
<o$                    Output this character
\~$/                   otherwise discard it

   /~\ $    Having reached the end of the line, output
/  <o\?/    the newline only if it was not a comment

편집 : 53 바이트

>   i~i~i~i~i~i~i67*=\
/?=a<o/?$@:$@:$;?(0:i<
~   \~/

기본적으로 이전과 동일하지만 약간 재구성

참고로 : 아무도 아직 코볼로 이것을하지 않은 것에 실망했습니다.


2

C #, 160145 90 89 바이트

t=>{var o="";foreach(var s in i.Split('\n'))if(s[6]!=42)o+=s.Substring(7)+"\n";return o;}

크기를 줄인 Pavel & auhmaan에게 감사합니다.


PPCG에 오신 것을 환영합니다! 다른 사람들이 귀하의 코드를 테스트 할 수 있도록 온라인 으로 시도해보십시오 . 게다가, 첫 번째 (잘, 두 번째) 대답은 훌륭합니다!
LyricLy

당신은 다음과 같은 형식으로 람다를 작성함으로써 이것을 더 짧게 만들 수 있습니다t=>{...}
Pavel

@LyricLy 실제로 그렇게하려고했지만 어떤 이유로 든 작동하지 않습니다. 그러나 VS 콘솔 앱에서는 완벽하게 작동합니다.
snorepion

@Pavel 좋아요? 내가 제대로 제대로했는지 확실하지 않습니다. 전에는 람다 식을 사용할 필요가 없었습니다.
snorepion

예, 정확히 에 할당하여 테스트 할 수 있습니다 func<string, string>.
Pavel

2

Python 3, 71 바이트 (정규식 없음)

def f(s):
 for w in s.split('\n'):
  t=w[6:]
  if t[0]!='*':print(t[1:])

효과가있다!

>>> s="""000000 blah blah
000001* apples
000002 oranges?
000003* yeah, oranges.
000*04 love me some oranges"""
>>> f(s)
blah blah
oranges?
love me some oranges


1

자바 스크립트, 44 34 바이트

크로스 아웃 44는 여전히 정규 44입니다.

tsh 덕분에 6 바이트 절약

a=>a.replace(/^.{6}( |.*\n)/gm,'')

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


s=>s.replace(/^.{6}( |\*.*\s)?/mg,'')
tsh

s.match(/(?<=^.{6} ).*/mg) ESNext (비표준, 3 단계) Chrome62 +
tsh

@tsh. 그것을 허용하는 안정적인 인터프리터가있을 때까지 유효한 프로그래밍 언어로 간주되지 않는다고 생각합니다.

마지막 줄이 주석 줄이면 올바른 출력을 제공하지 않는 것 같습니다.
LyricLy

@LyricLy. 입력에 항상 새 줄이 포함된다고 가정했기 때문입니다. 입력 후 빈 줄이 있으면 작동 한다는 것을 알 수 있습니다 . 내가 그것을 가정해서는 안되면 수정 비용은 1 바이트입니다 (추가? 후를 \n).

1

C ++ (GCC), 121112 바이트

9 바이트를 절약 한 @gurka에게 감사합니다!

#import<bits/stdc++.h>
void f(std::list<std::string>l){for(auto s:l)if(s[6]-42)std::cout<<s.substr(7,s.size());}

행 목록으로 입력을받습니다.

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


#import? 또한 표준 포함을 생략해도 괜찮습니다.
simon

#import표준 C ++은 아니지만 적어도 GCC 및 MSVC가 지원합니다. 일부를 생략하면 C에서는 작동하지만 C ++에서는 작동하지 않습니다. 코드가 포함되지 않으면 작동하지 않으므로 총 바이트 수로 계산해야합니다.
Steadybox

Aha, 나는 import파이썬 답변이나 usingC # 답변에서 아무것도 볼 수 없으므로 포함을 건너 뛸 수 있다고 생각했습니다 . 또한 #include <bits/stdc++.h>대답이 더 짧지 않습니까?
simon

@gurka 네, 더 짧을 것입니다. 감사!
Steadybox

@gurka 수입 파이썬 답변에 포함됩니다. 파이썬 에는 수입 할 필요가없는 많은 기능이 있습니다. C #은 일반적으로 다음보다 쓰기 system.foo()가 짧기 때문에 문장을 사용하지 않는 경향 이 있습니다.using system;foo()
Pavel

1

자바 8, 95 54 53 바이트

s->s.filter(x->x.charAt(6)<33).map(x->x.substring(7))

-42 바이트 덕분에 @ OliverGrégoire 입력 및 출력 Stream<String>대신에 를 사용할 수 String있습니다.

설명:

여기에서 시도하십시오.

s->                          // Method with Stream<String> as parameter and return-type
  s.filter(x->x.charAt(6)<33)//  Filter out all lines containing an asterisk as 7th char
   .map(x->x.substring(7))   //  And remove the first 7 characters from the remaining lines
                             // End of method (implicit / single-line body)

String[]또는 List<String>-12 바이트에 대한 입력으로 사용할 수있는 것 같습니다 .
Jakob

아니면 Stream<String>도움이 될 수 있습니다. 예 :s->s.map(x->x.charAt(6)!=42?x.substring(7):"")
Olivier Grégoire

1
오, s->s.filter(x->x.charAt(6)!=42).map(x->x.substring(7))54 바이트 를 필터링해야 합니다.
Olivier Grégoire

1
"7 번째 문자는 항상 별표 또는 공백이라고 가정 할 수 있습니다." <42대신에 사용하십시오 !=42.
Olivier Grégoire

1
@ OlivierGrégoire 아, 그 규칙을 놓쳤다. 그렇지 않으면 나는 그렇게했을 것이다. 수정 해 주셔서 감사합니다.
Kevin Cruijssen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.