잘하지 않는 놈을 사용하십시오


12

인터넷에는 현재 문장을 취하고 의미를 바꾸고 n't끝에 추가하는 밈이 있습니다 . 예를 들어I am small 진다I am talln't

도전

도전을 위해, 우리는 이것을 단순화 할 것입니다 : 당신의 임무는 문장에 부정이있을 때마다 감지 n't하고 끝에 추가 된 '긍정적'으로 대체하는 것입니다 . 규칙에서 설명 할 까다로운 부분이 있습니다.

규칙

  • 당신은 가지고 가야 문자열입력 하고, 반환 문자열출력 .
  • 입력 한 문장이 될 것 소문자 만에,., 문장 부호 있고 .
  • 당신은 어떤 교체해야 no <any_word>또는 not <any_word>과를<any_word>n't .
  • no/ 하위 문자열이 아닌not 단어 여야합니다 .none of those
  • 단어가 이미 마무리되면 n, 당신은 교체해야 n't와 함께 't: no plan이 될 plan't되지 plann't
  • no또는 not단어, 구두점 또는 다른 뒤에되지 no/ not, 당신은 그것을 대체해야합니다 yesn't.
  • 복합 단어는 하나의 단어로 계산됩니다. 따라서 no-op하위 문자열을 no포함하더라도 단어 no를 포함하지 않습니다 . 결과가 될 것입니다 그래서 no-op하지 -opn't .
  • 문법 오류에 대해 걱정할 필요가 없습니다. 예를 들어, there is no way에 발생합니다there is wayn't 입니다.
  • 표준 허점은 허용되지 않습니다.
  • 이것은 이므로 가장 짧은 코드가 승리합니다.

이 도전이 지금 분명하지 않더라도 몇 가지 예가 있습니다.

입력 : 나는 codegolfing을 좋아하지만 짧은 프로그램을 좋아하지 않습니다. 이 문장이 의미가 있습니까? 물론 아닙니다.
출력 : 나는 codegolfing을 좋아하지만 짧은 프로그램은 좋아하지 않습니다. 이 문장은 의미가 있습니다 ... 물론 그렇습니다.

입력 : 초대받지 않았습니다. 나가.
산출 : 당신은 초대하지 않았습니다. 나가.

입력 : 나는 괜찮지 않다, 나는 계획이 없으며 총 출력 이 없다.
: 내가 okn't 오전, 난 plan't을하고 난 gunn't이

입력 : 오 아니오 아니오 아니오 거부합니다.
산출 : 오 예 아니오 거부하지 않습니다.

입력 : 오 아니요 아니요, 거부합니다.
산출 : 오 예 아니오 예 아니오, 예 거절하지 않습니다.

입력 : 나는 이것을 믿을 수 없어, 당신은 codegolf 할 수 없습니다.
산출 : 나는 이것을 믿을 수 없다. 당신은 codegolf 할 수 없다.

입력 : 오 아니 ... 그는 다시했다.
산출 : 아 맞아 ... 그는 다시했다.

입력 : nn은 단어가 아닙니다. kevin. 그래서 이것은 아닙니다.
산출 : nn't는 단어가 아닙니다. kevin. 그래서 이것은 아닙니다.

입력 : 모두에게 명확하지 않은가
출력 : 모두에게 명확하지 않은가

입력 : 이것은 의미가 없습니다 ...
출력 : 이것은 의미가 없습니다 ...


1
도입에서 안 I am small된다 I am bign't?
RedClover

4
한 점은 "입력은 [...] 만. 및.만으로"라고 말합니다. 다른 하나는 "no-op"를 나타냅니다. 그러나 여기에는 "-"가 포함되어 있습니다. "-"가 허용됩니까?
재귀

해야 no nnn'tn't?
케빈 크루이 센

no n결과 sould n't'단어'때문에 nA를 마무리 n.
랜덤 남자

@Soaku 작고, 크고, 작고, 크고, 길고, 짧고, 등은 모두 호환 가능하게 사용됩니다. 질문을 위해 실제로 중요 하지 않습니다 . 그러나 가장 작은 논리적 인 반의어는 클 것입니다.
Yates

답변:


5

망막 , 86 70 65 바이트

T`-'`L
\bnot?\s+(?!not?\b)(\w+?)n?\b
$1n't
\bnot?\b
yesn't
T`L`-'

-16 덕분에 바이트 @Neil . @ovs
덕분에 -5 바이트 .

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

설명:

T`-'`L             # Replace all "-" with "A" and all "'" with "B" to store them

\bnot?             # Then replace the word "no" or "not",
 \s+               #  followed by 1 or more whitespaces,
 (?!not?\b)(\w+?)  #  followed by a word/letter that is not "not" or "no"
 n?\b              #  minus a single trailing "n" if there are any
$1                 # with: the word/letter
 n't               #  appended with "n't"

\bnot?\b           # Then replace any remaining loose "no" or "not"
yesn't             # with "yesn't"

T`L`-'             # And finally replace all "A" with "-" and all "B" with "'" again

나는 이것이 사실 이 아니어야 한다고 생각 한다
Dead Possum

@DeadPossum 그래, 나 자신에 대해 이미 생각하고 입력에서 "nn"이 가능한지 이미 OP에게 물었다.
Kevin Cruijssen

1
이것도 이상합니다
Dead Possum 13:30에

1
나는 그것을 70 바이트 로 줄 였다고 생각한다 .
Neil

1
L다음은 A-Z2 바이트를 절약 T`-'`AB하고 그 반대로도 줄인 말입니다.
Neil

4

파이썬 (2) , 208 (123) 113 146 바이트

lambda s:re.sub(r"\bnot?\b(?!['-])(\s(?!not?(\b)(?!['-]))([\w'-]+))?",lambda m:(m.group(3)or"yes")+"n't"[(m.group(3)or'')[-1:]=='n':],s)
import re

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

n't또는로 끝나는 단어로 인해 많은 바이트를 잃었습니다 n. 짧거나 짧지 만 둘 다 처리하는 데 시간이 더 걸렸습니다.





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