감사합니다! … 아니?


24

소개

거리 대화는 특히 거리별로 잘 알려지지 않은 프로그래머에게는 이해하기 어려울 수 있습니다.

우리 모두가 도시 환경에서 생존 할 수 있도록 통역사를 만드는 것이 귀하의 임무입니다.

도전

영어 문장을 입력으로 받으면 문장의 결과가 양수인지 음수인지를 결정하는 프로그램이나 함수를 만듭니다.

문장에는 부정적인 단어 가 포함 0됩니다 2. 프로그래머가 알고 있듯이, 이중 부정은 긍정적 인 결과를 가져온다. 따라서 코드는 다음 규칙에 따라 진실 / 거짓 값을 출력하거나 반환해야합니다 .

No negative words  -> truthy
One negative word  -> falsey
Two negative words -> truthy

부정적인 단어의 목록 :

  • no, not,none
  • 끝나는 모든 것 n't
  • never, neither,nor
  • nobody, nothing,nowhere

하나의 엣지 케이스가 있습니다. 문장이로 시작될 때마다 No,해당 단어는 결과를 결정할 때 음의 단어로 취급되지 않습니다 (음의 단어 수에 포함되므로 하나만 더있을 수 있음).

문장은 기본 문법 규칙 (대문자, 문장 부호)을 따르며 사전에서 찾을 수있는 단어 만 포함합니다 (행운이도 질문 제목을 무효화하지 않습니다). 문장에는 적절한 명사가 포함되지 않습니다 (죄송합니다, 박사님, 나왔습니다).

테스트 사례

진실한 :

Yes.
It's noon.
Hello, World!
What is this?
Ain't no thang!
Never say never.
No, it's noon now.
Neither me nor you.
I didn't do nothing!
No, I am your father.
A non-alcoholic drink.
I can't get no satisfaction.
All your base are belong to us.

팔시 :

No.
No, no!
Not today.
Neither am I.
Don't do that!
That's no moon!
And none survived.
Is this not my car?
No man is an island.
Nosebleeds are no fun.
Nothing compares to you.
That's a no, I'm afraid.
No, I am not your mother.

물론 여기서의 아이러니는 이것들 중 일부는 다르게 해석 되어야한다는 것입니다. 그러나 우리의 논리를 따르지 않아 스피커를 잘못 비난 할 수는 없습니다.

규칙

표준 허점 은 금지되어 있습니다. 이것은 이므로 간결하십시오!


1
아무도 어디에도 없었거나 아무것도 없었습니다.
Magic Octopus Urn

1
@MagicOctopusUrn : 당신은 been100 % 부정적인 문장을 잃을 수 있습니다 !
Antti29

답변:


10

레티 나 , 63 바이트

No,

Mi`\bn(e(ith|v)er|o(|body|ne|r|t|thing|where))\b|n't\b
0|2

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

설명

No,

No,입력에서 제거하십시오 . 대문자 사용 규칙으로 인해 입력 시작 부분에만 표시 될 수 있으므로 명시 적이 필요하지 않습니다 ^.

Mi`\bn(e(ith|v)er|o(|body|ne|r|t|thing|where))\b|n't\b

대소 문자를 구분하지 않는 정규 표현식의 일치 횟수를 세십시오 `. 대안과 공통 접두사 / 접미사를 추출한 모든 관련 단어와 일치합니다.

0|2

Count 0또는 2s이므로 1짝수와 홀수를로 바꿉니다 0.


일반적인 문자 추출을 직접 수행하거나 최적의 솔루션을 찾는 프로그램을 사용하십니까?
요나

@Jonah 나는 그것을 손으로했다. 자동 정규식 metagolf를위한 도구가 있지만 일반적으로 일치하는 목록과 실패하는 목록 두 개를 사용하여 정규 표현식을 생성합니다. 더 큰 문자열의 특정 하위 문자열 집합과 일치하는 최적의 정규식을 생성하는 도구를 알지 못합니다.
마틴 엔더

3
흥미로운 도전을 만들 수 있습니다 ...
조나

단어는 사전에서 가져와야하므로 그 이후에는 n't필요하지 않다고 가정 할 수 있습니다 \b. 또한 나는 똑같은 것이 있었지만 몇 바이트를 더 사용하여 대답의 고기를 간결하게 얻지 못했습니다.
mbomb007

8

배시, 115 (107) 99 98 97 95 85 바이트

핵심 유틸리티 (for wc) 및 패키지를 사용합니다 grep. 문장이 표준 입력을 통해 주어진다고 가정합니다. 에 의해 기록 확장이 사용 중지되었습니다 set +o histexpand.

((~`grep -Pio "(?!^no,)\b(no(|t|r|ne|body|thing|where)|ne(v|ith)er|.*n't)\b"|wc -l`%2))

결과 확인 : Bash 0은 true, 1은 false

어떻게 작동합니까?

((                       )) # Logical evaluation: non-zero to TRUE, zero to FALSE
  ~                    %2   # C-style arithmetic: Bit-Negate and Modulus 2
   $(                 )     # Output of the program chain
     grep -Pio "regex"      # PCRE match, ignore case, output matching part one-per-line
     | wc -l                # Pipe to `wc` and count number of lines

영감 선방 18 바이트 (115 99) Qwertiy 의 답마틴 청산 의 않음 . Nahuel Fouilleul 덕분에 1 바이트 .


정규식이 올바르지 않습니다 : 일치 noon하지That's a no, I'm afraid.
나우 Fouilleul

@NahuelFouilleul 수정되었습니다.
iBug

확인 : 주석 길이 제한 때문에 tio 는 테스트를 붙여 넣을 수 없습니다
Nahuel Fouilleul

이것은 올바른 결과를 제공합니다((~$(grep -Pio "(?!^no,)\b(no(|t|r|ne|body|thing|where)|ne(v|ith)er)\b|.*n't\b"|wc -l)%2))
Nahuel Fouilleul

$(..)1 바이트 저장 대신 따옴표를 다시
Nahuel Fouilleul

5

자바 스크립트 ES6, 89 87 86 자

s=>s.match(/(?!^no,)\bn(o(|t|r|ne|body|thing|where)|e(v|ith)er)\b|n't\b|$/ig).length&1

테스트:

f=s=>s.match(/(?!^no,)\bn(o(|t|r|ne|body|thing|where)|e(v|ith)er)\b|n't\b|$/ig).length&1

console.log(`Yes.
It's noon.
Hello, World!
Never say never.
Ain't no thang!
No, it's noon now.
Neither me nor you.
I didn't do nothing!
No, I am your father.
A non-alcoholic drink.
I can't get no satisfaction.
All your base are belong to us.`.split`
`.every(f))

console.log(`No.
No, no!
Not today.
Neither am I.
Don't do that!
That's no moon!
And none survived.
No man is an island.
Nosebleeds are no fun.
Nothing compares to you.
That's a no, I'm afraid.
No, I am not your mother.`.split`
`.every(s=>!f(s)))


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