하이픈 제거


15

새로운 도전을 위한 시간입니다 ! 다양한 문서 형식 (하이픈) 사이에서 복사하여 붙여 넣기 할 때 일반적으로 발생하는 문제입니다. 왼쪽 정렬 된 레이아웃의 비정형을 줄이거 나 정렬 된 레이아웃의 간격을 줄이지 만 PDF를 올바르게 구성하지 않고 레이아웃에 하이픈을 유지하면 복사 한 텍스트를 편집하거나 리플 로우하기가 어려워집니다.

운 좋게도, 우리가 무수한 자조 서적을 믿어야한다면 그것을 도전으로 볼 때 아무런 문제가 없습니다. 본인은이 자 조서가 PPCG를 언급 한 예외는 아니라고 생각합니다. 여기서 도전으로 제시 될 경우 어떤 문제도 해결 될 것입니다. 당신의 작업은 텍스트 편집기에서 붙여 넣을 수 있도록 텍스트에서 문제가있는 하이픈과 줄 바꿈을 제거하는 것입니다.

문제 설명

해당되는 경우 하이픈과 줄 바꿈을 제거하는 프로그램이나 함수를 작성합니다. 입력 A의 문자열이 될 것이다 stdin(또는 가장 근접한 대체) 또는 입력으로 기능한다. 출력 (ON stdout또는 가까운 다른 기능 또는 출력)는 '수정'텍스트 일 것이다. 이 텍스트는 직접 복사 할 수 있어야합니다 . 즉, 선행 또는 후행 출력은 정상이지만 수정 된 텍스트의 중간 출력 (예 : 모든 줄의 선행 공백)은 아닙니다 .

가장 기본적인 경우는 다음과 같습니다 (참고 : 후행 공백 없음).

Lorem ipsum dolor sit amet, con-
sectetur adipiscing elit. Morbi
lacinia nisi sed mauris rhoncus.

문제가되는 하이픈과 줄 바꿈은 제거해야합니다.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi lacinia nisi sed mauris rhoncus.

그러나 몇 가지 예외가 관찰되어야합니다.

  • 이중 줄 바꿈은 단락 구분을 나타내며 유지되어야합니다.
  • 적절한 명사와 이름은 이미 하이픈 (예 : Navier-Stokes 등)을 포함하지 않는 한 두 줄로 나뉩니다. 줄 바꿈은 제거해야하지만 하이픈은 유지됩니다. 이러한 경우는 첫 글자 만 대문자로 표시하여 식별 할 수 있습니다.
  • 때때로 하이픈은 단어 그룹을 나타냅니다 (예 : 19 세기와 20 세기). 두 줄에 걸쳐이 문제가 발생하면 다음 줄에 선행 공백이 표시됩니다.

예 : (이 예에서 표현 된 견해는 허구이며 반드시 저자의 견해를 나타내는 것은 아닙니다. Runge-Kutta-Fehlberg 방법의 반대자들도이 도전에 참여할 수 있습니다)

Differential equations can
be solved with the Runge-Kutta-
Fehlberg method.

Developed in the nineteenth-
 or twentieth century, this
method is completely FANTAS-
TIC.

될 것입니다

Differential equations can be solved with the Runge-Kutta-Fehlberg method. 

Developed in the nineteenth- or twentieth century, this method is completely FANTASTIC. 

줄 바꿈은 기본 설정에 따라 ASCII \n또는 \r\nASCII 코드 포인트 가 될 수 있으며 하이픈은 단순한 ASCII -(빼기 부호)입니다. UTF-8 지원은 필요하지 않습니다. 이 도전은 이므로 가장 짧은 코드가 승리합니다.

답변:


9

망막 , 58 바이트

(?<!\n)\n(?!\n)
<space>
- (?! |[A-Z][a-z])| (?= )|(?<=-) (?=[A-Z])
<empty>

<space>자체 행의 단일 공백을 <empty>나타내며 빈 후행을 나타냅니다. 계산을 위해 각 줄은 별도의 파일로 들어가고 \n실제 줄 바꿈 문자로 바뀝니다. 편의상 위의 모든 파일을 단일 파일에 넣고 -s플래그로 실행할 수 있습니다.

나는 이것을하는 더 짧은 방법이 있다고 확신합니다. 그래서 골프를 마칠 때까지 설명을 기다릴 것입니다.


실제로 Retina에서이 문제를 해결하고 싶었지만 Mono :(
orlp

2

GNU 세드, 68

-zr전달 된 옵션에 +2가 포함 됩니다 sed.

s/\n\n/:/g
s/-\n([A-Z][a-z])/-\1/g
s/-\n /- /g
s/-\n//g
y/\n:/ \n/

입력 스트림에 :문자 가없는 것으로 가정합니다 . 이것이 허용되지 않는 경우 :코드의은 모두 인쇄 할 수없는 다른 ASCII 문자 (예 : 0x7 BEL)로 대체 될 수 있습니다.


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