Introdução
As conversas de rua podem ser realmente difíceis de entender, principalmente para os programadores, que não são conhecidos por serem muito idiotas.
É seu trabalho criar um intérprete para ajudar a todos nós a sobreviver no ambiente urbano.
Desafio
Dada uma frase em inglês como entrada, crie um programa ou uma função que determine se o resultado da sentença é positivo ou negativo.
A sentença conterá 0
a 2
palavras negativas. Como qualquer programador sabe, um duplo negativo resulta em positivo. Portanto, seu código deve gerar ou retornar um valor truthy / falsey de acordo com a seguinte regra:
No negative words -> truthy
One negative word -> falsey
Two negative words -> truthy
A lista de palavras negativas:
no
,not
,none
- Qualquer coisa que termina em
n't
never
,neither
,nor
nobody
,nothing
,nowhere
Há um caso extremo. Sempre que uma frase começa No,
, essa palavra não é tratada como uma palavra negativa ao determinar o resultado (ela conta para o número de palavras negativas, para que possa haver apenas mais uma).
A frase seguirá as regras gramaticais básicas (letras maiúsculas, pontuação) e conterá apenas palavras que podem ser encontradas em um dicionário (felizmente, isso não invalida o título da pergunta). A frase não conterá nomes próprios (desculpe, Dr. Não, você saiu).
Casos de teste
Verdade:
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.
Falsey:
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.
A ironia aqui, é claro, é que alguns deles devem ser interpretados de maneira diferente. Mas ei, você não pode culpar o orador por não estar em conformidade com a nossa lógica.
Regras
As brechas padrão são proibidas. Isso é código-golfe , então seja conciso!
been
pena por uma sentença 100% negativa!Respostas:
Retina , 63 bytes
Experimente online!
Explicação
Retire
No,
da entrada. Devido às regras de capitalização, isso só pode aparecer no início da entrada, portanto, não precisamos de um explícito^
.Conte o número de correspondências da regex que não diferencia maiúsculas de minúsculas após o
`
. Apenas combina todas as palavras relevantes, onde extraí prefixos / sufixos comuns com as alternativas.Count
0
ou2
s, então transformamos contagens1
pares e ímpares em0
.fonte
n't
isso não é necessário\b
, pois as palavras precisam vir de um dicionário. Além disso, eu tinha a mesma coisa, mas não tinha a carne da resposta de forma concisa, usando mais alguns bytes.Bash,
1151079998979585 bytesUsa os pacotes Utilitários Principais (para
wc
) egrep
. Suponha que a sentença seja dada via Entrada padrão. A expansão do histórico está desativada porset +o histexpand
.Verifique o resultado: no Bash 0 é verdadeiro, 1 é falso
Como funciona?
18 bytes (115 a 99) guardados por inspiração de Qwertiy 'resposta s e Martin Enders ' resposta s . 1 byte graças a Nahuel Fouilleul .
fonte
noon
e nãoThat's a no, I'm afraid.
((~$(grep -Pio "(?!^no,)\b(no(|t|r|ne|body|thing|where)|ne(v|ith)er)\b|.*n't\b"|wc -l)%2))
$(..)
salvar 1 byteJavascript ES6,
898786 caracteresTeste:
fonte
Perl 5 , 74 bytes
Código de 73 bytes + 1 para
-p
.Experimente online!
fonte