일반 및 반전 느낌표 및 물음표 쌍


13

도전

¡ 우리는 느낌표와 물음표를 뒤집어 놓을 것입니다!

에서 끝나는 텍스트 포함 된 문장의 몸을 감안할 때 ., ?또는 !, 앞에 추가 반전 물음표 ¿, 의문문 문장 (문장이 끝나는로 ?) 및 반전 느낌표, ¡, 감탄 (로 끝나는 문장에 !). 끝나는 문장 .은 무시됩니다.

문장은 공백 (공백, 탭 및 / 또는 줄 바꿈)으로 구분되며 영숫자, 쉼표, 아포스트로피 및 공백 만 포함합니다. 모든 문장에는 적어도 하나의 단어가 있습니다. 모든 문장의 첫 단어는 대문자로 보장됩니다. 입력은 공백으로 시작하고 끝날 수 있습니다.

입력:

  Hello there!      What is your name?
My name is Ron. What's your name?
My name is Alex.  Nice to meet you!
Nice to meet you to!  How was your break?
It was great, I spent all my time code golfing!
What's that?
        Wow, you're such a n00b! Here, let me show you.

산출:

  ¡Hello there!      ¿What is your name?
My name is Ron. ¿What's your name?
My name is Alex.  ¡Nice to meet you!
¡Nice to meet you to!  ¿How was your break?
¡It was great, I spent all my time code golfing!
¿What's that?
        ¡Wow, you're such a n00b! Here, let me show you.

규칙

  • 모든 기본 코드 골프 규칙이 적용됩니다.
  • 가장 짧은 바이트 수를 가진 프로그램이 승리합니다.

보너스 (17 % 할인)-여러 마크 분석

문장은 여러 느낌표 / 물음표로 끝날 수도 있습니다. 바이트 수를 17 % 더 줄이려면이 마크들 각각에 역 느낌표 / 물음표 쌍을 지정하십시오.

입력:

I am a man in a can doing a dance?? Maybe...
              Doing it for the views??!???!

산출:

¿¿I am a man in a can doing a dance?? Maybe...
              ¡¿¿¿¡¿¿Doing it for the views??!???!

잘못된 출력 :

¿¿I am a man in a can doing a dance?? Maybe...
              ¿¿¡¿¿¿¡Doing it for the views??!???!

문장을 구분하는 공백을 선택하거나 3 가지 유형을 모두 지원해야합니까?
Mego

@Mego 세 가지 유형이 모두 지원되어야합니다.
usandfriends

아니요, 문장에는 항상 적어도 하나의 단어가 포함되며 허용되는 3 개의 구두점 문자 중 하나로 끝납니다. 도전에 추가하겠습니다.
usandfriends

답변:


5

망막 , 39 37 34 바이트

\w[^.]*?([!?])
$1$0
T`?!`¿¡`\S\b

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

설명

\w[^.]*?([!?])
$1$0

느낌표 나 물음표로 끝나는 문장과 일치하며 문장 부호 앞에 문장 부호를 붙입니다. 이제 우리는 모든 것을 알고 !?원래 사람이 공백으로 다음 문자 분리해야하기 때문에하는 즉시, 우리가 삽입 된 것이어야한다 비 공백 문자가옵니다.

T`!?`¡¿`\S\b

이 음역 단계는 모든 회전 !?로를 ¡하고 ¿, 각각 그들의 일치에서 발견하고 제공 \S\b아니라 우리는 방금 삽입 한 것들에 적용됩니다. 동일한 바이트 수에서 두 개의 개별 대체로 둘 다 대체하지만 여기서 음역 단계의 의미를 선호합니다.


3

Mathematica 137 바이트

가장 짧지는 않지만 재미있었습니다.

TextSentences입력 텍스트를 문장 StringPosition으로 나누고 텍스트에서 각 문장의 시작과 끝 위치를 찾습니다. 필요에 따라 각 문장의 시작 부분에 거꾸로 문장 부호를 삽입합니다.

w=StringPosition;f[x_,y_,q_]:=StringInsert[x,q,x~w~y/.{a_,a_}->a/.(x~w~#&/@TextSentences@#&@x/.{{c_,d_}}:>d->c)];f[f[t,"!","¡"],"?","¿"]&

에 텍스트가 입력되었다고 가정하면 사용법 t,

f[f[#,"!","¡"],"?","¿"]&[t]

산출


1
RegExp를 사용하지 않는 솔루션 인 Cool!
usandfriends

3

Sed, 61 바이트

s/\(\s*\)\([^.!?]*!\)/\1¡\2/g;s/\(\s*\)\([^.!?]*?\)/\1¿\2/g

시운전 :

$ echo """Hello there!      What is your name?
My name is Ron. What's your name?
My name is Alex.  Nice to meet you!
Nice to meet you to!  How was your break?
It was great, I spent all my time code golfing!
What's that?
        Wow, you're such a n00b! Here, let me show you.""" | sed 's/\(\s*\)\([^.!?]*!\)/\1¡\2/g;s/\(\s*\)\([^.!?]*?\)/\1¿\2/g'
¡Hello there!      ¿What is your name?
My name is Ron. ¿What's your name?
My name is Alex.  ¡Nice to meet you!
¡Nice to meet you to!  ¿How was your break?
¡It was great, I spent all my time code golfing!
¿What's that?
        ¡Wow, you're such a n00b! Here, let me show you.

1
거꾸로 된 문자는 2 바이트로 계산되므로 기술적으로 61 바이트입니다.
usandfriends

@usandfriends 맞아, 고정됨
Aaron

-r(GNU) sed에 플래그를 사용하는 경우 (및 을 이스케이프 처리 )하지 않아도되므로 8을 저장해야합니다.이 기본 옵션 이외의 옵션을 사용하려면 추가 포인트를 추가해야합니다.
디지털 외상

@DigitalTrauma 나는 그 트릭을 알고 그것을 시도했지만 같은 출력을 반환하지 않았습니다 : ""여보세요!
Aaron

3

자바 스크립트 (ES6), 86 79 66 63 바이트

i=>i.replace(/\w[^.!?]*[!?]/g,k=>(k.slice(-1)>'>'?'¿':'¡')+k)

언 골프 드 :

func = inp => inp.replace(/\w[^.!?]*[!?]/g, sentence => (sentence.slice(-1) > '>' ? '¿' : '¡') + sentence)

용법:

console.log(func(`Hello there!      What is your name?
My name is Ron. What's your name?
My name is Alex.  Nice to meet you!
Nice to meet you to!  How was your break?
It was great, I spent all my time code golfing!
What's that?
            Wow, you're such a n00b! Here, let me show you.`))

보너스 솔루션을 곧 구현할 것입니다.

감사합니다 :
@ user81655 , 86 => 79 바이트


1
9 바이트를 절약 할 수있는 몇 가지 개선 사항 :i=>i.replace(/[A-Z][^.!?]*[.!?]/g,k=>(r=k.slice(-1))<'.'?'¡'+k:r>'.'?'¿'+k:k)
user81655

@ user81655 9 바이트 대신 7 바이트를 절약하는 것처럼 보이지만 상관없이 감사합니다! 로 끝나는 문장 검사를 건너 뛰어 더 많은 바이트를 제거 할 수있었습니다 ..
usandfriends

3

Mathematica, 101 92 91 바이트

StringReplace[#,RegularExpression@"[A-Z][^.]*?([?!])":><|"?"->"¿","!"->"¡"|>@"$1"<>"$0"]&

이것이 어떻게 작동하는지 설명해 주시겠습니까?
DavidC

1
@DavidC 까다 롭습니다.
LegionMammal978

1

Python 2, 127.82 (154-17 %) 바이트

import re
print re.sub("([A-Z][\w ,']*)([\.!\?]+)",lambda m:''.join({'!':'¡','?':'¿','.':''}[c]for c in m.group(2))[::-1]+m.group(1)+m.group(2),input())

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